Apostila · Infraestrutura

Redes:
a base que
tudo assume

O IP não garante nada. Pacotes podem perder-se, duplicar-se, chegar fora de ordem e atrasar-se arbitrariamente — e isso não é uma avaria, é o desenho. Tudo o que parece fiável, de uma página que carrega a um ficheiro que chega inteiro, é fiabilidade construída por cima de uma base que não a oferece. Perceber isto é o que permite diagnosticar o que corre mal.

12 capítulosdas camadas à escada de diagnóstico
1 demo ao vivodas 7 etapas entre o Enter e a página
12 exercíciospara fazer nos sistemas que já opera

↓ role para começar

Capítulo 01 Fundamento

As camadas, e o que cada uma garante

A rede está organizada em camadas para que cada uma possa ignorar as outras. O útil não é decorar a lista — é saber exatamente o que cada camada promete, e o que não promete.

1.1 As quatro que interessam

CamadaTrata deGaranteNão garante
LigaçãoFalar com quem está no mesmo segmento físicoEntrega dentro da rede localNada para lá do primeiro salto
Internet (IP)Levar um pacote de A a B, atravessando redesNada. Faz o melhor que podeQue chegue, que chegue uma só vez, que chegue por ordem
Transporte (TCP/UDP)Conversa entre dois programasTCP: chega, por ordem, sem duplicados. UDP: nadaQue chegue depressa
Aplicação (HTTP, DNS…)O significado do que se trocaO que o protocolo definirQue o outro lado perceba o mesmo
A linha que explica quase tudo

O IP não garante nada. Pacotes podem ser perdidos, duplicados, reordenados e atrasados arbitrariamente — e isso não é uma avaria, é o desenho. A internet funciona porque cada nó faz o melhor que consegue e desiste depressa quando não consegue.

Tudo o que parece fiável — uma página que carrega, um ficheiro que chega inteiro — é fiabilidade construída por cima de uma base que não a oferece. Perceber isto é o que permite diagnosticar o que corre mal.

1.2 As abstrações vazam

Cada camada esconde a de baixo, e esconde quase sempre. Quando falha, falha de formas que só se percebem sabendo o que está por baixo:

1.3 O que uma mensagem carrega

ao descer as camadas, cada uma acrescenta o seu cabeçalho: ┌──────────────────────────────────────────────────────────┐ │ Ethernet │ IP │ TCP │ TLS │ HTTP │ os seus dados │ └──────────────────────────────────────────────────────────┘ quem no quem que cifra que o que cabo na porta recurso interessa Internet e ao subir do outro lado, cada camada tira o seu e passa o resto.

Duas consequências práticas: há um custo fixo por mensagem — dezenas de bytes de cabeçalhos, que dominam quando as mensagens são pequenas — e cada camada só vê o seu cabeçalho, o que explica porque um equipamento de rede pode encaminhar tráfego que não consegue ler.

1.4 O que esta apostila é

Delimitação

É sobre o que é preciso saber de redes para construir, operar e diagnosticar sistemas — não para configurar equipamento de operador nem para tirar uma certificação.

Nove apostilas deste catálogo assumem estes fundamentos: DevOps, Observabilidade & SRE, CyberDevSecOps, Arquitetura & System Design, API Design, IaC & Platform Engineering, Caching & Redis, Vercel e Robótica, IoT e Embarcados. Esta é a base que faltava por baixo delas.

Exercício 1.1 — O que garante o quê

Para um problema de rede que tenha tido, identifique em que camada estava. Depois pergunte: que garantia eu estava a assumir que não existia? A resposta é quase sempre a lição.

Capítulo 02 Núcleo

Endereços, e como um pacote encontra o caminho

Um endereço IP não identifica uma máquina: identifica uma interface numa rede. A distinção parece pedante e explica metade dos problemas de configuração.

2.1 O endereço tem duas partes

Um endereço divide-se em parte de rede e parte de máquina, e a fronteira é dada pela máscara. Escreve-se junto: 192.168.1.10/24 significa que os primeiros 24 bits identificam a rede.

A decisão que uma máquina toma em cada envio

O destino está na minha rede? Compara-se o endereço de destino com o próprio, usando a máscara.

Se sim: envia diretamente ao destino, pelo cabo ou rádio.
Se não: envia ao router por omissão, e delega. O router repete a mesma pergunta com a sua própria tabela.

É só isto. Todo o encaminhamento da internet é esta pergunta repetida, salto a salto, até alguém ter o destino na sua rede local. Nenhum nó conhece o caminho completo — cada um só sabe o próximo passo.

2.2 Endereços privados, e a tradução que mudou a internet

Certas gamas — 10.x, 172.16–31.x, 192.168.x — são reservadas para redes internas e não são encaminhadas na internet. Milhões de redes usam as mesmas.

Para essas máquinas saírem, existe a tradução de endereços: o router substitui o endereço privado pelo seu público, guarda a correspondência, e traduz de volta na resposta.

O que isto quebrou, e ainda incomoda

A internet foi desenhada para que qualquer máquina pudesse falar com qualquer outra. Com tradução de endereços, uma máquina interna pode iniciar ligações mas não recebê-las — não tem endereço alcançável de fora.

Consequências que se sentem todos os dias: precisar de reencaminhamento de portas para expor um serviço caseiro; a complexidade das chamadas diretas entre pares; e o facto de a tabela de tradução expirar — uma ligação inativa demasiado tempo é esquecida pelo router, e ambos os lados continuam a julgar-se ligados (cap. 11).

2.3 IPv6, em três pontos

2.4 Portas: o que distingue conversas

O endereço leva à máquina; a porta leva ao programa. Um servidor com um só endereço atende centenas de serviços porque cada um escuta numa porta diferente — 443 para HTTPS, 22 para SSH, 5432 para uma base de dados.

O que identifica uma ligação

Uma ligação é identificada por quatro valores: endereço de origem, porta de origem, endereço de destino, porta de destino. Por isso mil pessoas podem estar ligadas ao mesmo servidor na mesma porta 443 — cada uma tem uma porta de origem diferente.

E daqui sai um limite real: um cliente tem um número finito de portas de origem. Um sistema que abre e fecha ligações muito depressa esgota-as, e a sintomatologia é enganadora — parece falta de recursos do servidor.

Exercício 2.1 — A pergunta de 2.1

Na sua máquina, veja o endereço, a máscara e o router por omissão. Depois, para três destinos diferentes, responda à pergunta de 2.1 à mão. Confirme com uma ferramenta de rota. É o exercício que torna concreto o que costuma ser abstrato.

Capítulo 03 Núcleo

TCP e UDP: a garantia que se paga

Uma dá-lhe a ilusão de um canal fiável e cobra em latência. A outra não dá garantia nenhuma e é mais rápida. Escolher errado é a origem de muita lentidão inexplicada.

3.1 O que o TCP faz por si

Perda de pacotes é interpretada como congestionamento

O TCP assume que um pacote perdido significa que a rede está cheia, e reduz a velocidade drasticamente. É a decisão certa numa rede com fios — e é uma leitura errada numa rede sem fios, onde a perda costuma vir de interferência, não de congestão.

É por isso que uma ligação Wi-Fi com sinal fraco fica desproporcionadamente lenta: perde alguns pacotes, o TCP conclui que há congestionamento, e abranda muito mais do que a perda justificaria.

3.2 O bloqueio de cabeça de fila

Uma garantia que às vezes é um defeito

Como o TCP entrega por ordem, se o pacote nº 5 se perder, os pacotes 6, 7 e 8 — que já chegaram — ficam à espera até o 5 ser retransmitido. A aplicação não recebe nada, apesar de haver dados prontos.

Para transferir um ficheiro, isto é irrelevante. Para uma chamada de vídeo, é fatal: mais valia mostrar um quadro imperfeito agora do que o quadro certo daqui a 300 ms. É a razão principal para usar UDP.

3.3 UDP: quando não garantir é melhor

UsoPorquê UDP
DNSPergunta e resposta cabem numa mensagem; abrir ligação custaria mais que a consulta
Voz e vídeo em tempo realUm quadro atrasado não serve; melhor perdê-lo
JogosA posição de há 200 ms é inútil; interessa a atual
Telemetria de dispositivosPerder uma leitura de mil é irrelevante (IoT)
QUICConstrói fiabilidade própria por cima, sem o bloqueio de cabeça de fila
QUIC, e porque interessa saber que existe

É o transporte por baixo do HTTP/3, e assenta em UDP por opção: implementa fiabilidade, ordem e cifra por cima, mas por fluxo — se um fluxo perde um pacote, os outros continuam. Resolve o problema de 3.2 sem perder as garantias.

Duas consequências práticas: junta o estabelecimento da ligação com o da cifra, poupando idas e voltas; e como corre em UDP, algumas redes corporativas bloqueiam-no — o que produz um sintoma característico: "o site está lento nesta rede e rápido em todas as outras".

3.4 O que isto custa em tempo

abrir uma ligação HTTPS clássica, com 50 ms de ida e volta: TCP: 3 mensagens ................... 1 ida e volta 50 ms TLS: negociação ................... 1 a 2 idas 50–100 ms HTTP: pedido e resposta ............. 1 ida e volta 50 ms ───────────────────── 150 a 200 ms antes do primeiro byte útil

Daqui saem duas das melhores otimizações que existem, e nenhuma exige mais largura de banda: reutilizar ligações em vez de abrir uma por pedido, e aproximar o servidor do utilizador para reduzir o tempo de ida e volta (cap. 7).

Exercício 3.1 — Veja o custo

Meça o tempo de um pedido com ligação nova e com ligação reutilizada. A diferença é o custo do estabelecimento — e é frequentemente maior do que todo o tempo de processamento do servidor.

Capítulo 04 Núcleo

DNS: o sistema que decide para onde tudo vai

É a peça mais frágil e mais mal compreendida da pilha. Quando algo não funciona e ninguém percebe porquê, comece por aqui.

4.1 Como uma resposta é encontrada

o seu computador não sabe nada. pergunta ao RESOLVEDOR, e é ele que faz o trabalho: resolvedor → servidor raiz "quem trata de .pt?" resolvedor → servidor de .pt "quem trata de exemplo.pt?" resolvedor → servidor de exemplo.pt "e www?" → 203.0.113.7 e guarda a resposta em cache durante o TTL que lhe indicaram.

Três ideias que decorrem daqui: é hierárquico (ninguém sabe tudo), é delegado (cada nível aponta para o seguinte) e vive de cache — sem ela, a internet não funcionaria a esta escala.

4.2 Os registos que aparecem no dia a dia

RegistoDizNota
A / AAAAO endereço IPv4 / IPv6O caso base
CNAME"Este nome é outro nome"Não pode coexistir com outros registos no mesmo nome — origem clássica de configurações inválidas
MXQuem recebe correio deste domínioCom prioridades
TXTTexto livreUsado para provar posse do domínio e para políticas de correio
NSQuem é a autoridade sobre este domínioÉ aqui que se muda de fornecedor de DNS
CAAQue autoridades podem emitir certificadosBarato, e evita emissões indevidas (cap. 6)

4.3 "Propagação" não existe

O mal-entendido mais caro do DNS

Diz-se que uma alteração "demora a propagar". Não se propaga nada: a alteração é instantânea no servidor autoritativo. O que demora é as caches espalhadas pelo mundo expirarem — e cada uma expira ao seu ritmo, conforme o TTL que recebeu.

A consequência prática: antes de mudar um registo, baixe o TTL com antecedência. Se o TTL era de 24 horas, baixe-o para 300 segundos um dia antes da mudança. Fazer a alteração e só depois baixar o TTL não ajuda — as caches já guardaram o valor antigo com o prazo antigo.

É a diferença entre uma migração com cinco minutos de transição e uma com um dia de comportamento inconsistente.

4.4 Porque o DNS é a suspeita habitual

4.5 O que fazer bem, e custa pouco

Exercício 4.1 — Siga a cadeia

Para um domínio seu, consulte a cadeia completa: quem é a autoridade, que registos existem, e qual o TTL de cada um. Depois faça a mesma consulta a partir de dois resolvedores diferentes e compare. Se divergirem, tem uma cache desatualizada — e agora sabe explicá-la.

Capítulo 05 Núcleo

HTTP: o protocolo que engoliu tudo

Começou por servir documentos e é hoje o transporte por omissão de quase tudo. Vale a pena conhecer as três ou quatro decisões de desenho que explicam o seu comportamento.

5.1 Não tem memória

A decisão que define o protocolo

Cada pedido é independente. O servidor não se lembra do anterior. É o que permitiu à web escalar: qualquer servidor pode responder a qualquer pedido, o que torna a distribuição de carga trivial.

Como se cria então a sensação de sessão? O cliente carrega o contexto em cada pedido — um cookie, um cabeçalho de autorização. O estado vive no cliente ou numa base de dados partilhada, nunca na memória de um servidor concreto.

É por isso que "guardar a sessão em memória" quebra assim que há mais do que um servidor — e é dos erros mais comuns em sistemas que crescem.

5.2 Os métodos, e a propriedade que interessa

MétodoAltera estado?Repetir é seguro?
GETNãoSim — e por isso é cacheável
PUT / DELETESimSim — o resultado final é o mesmo
POSTSimNão — repetir cria outro
Porque isto importa mesmo

Se um pedido falhar por tempo esgotado, não se sabe se chegou: pode ter sido processado e a resposta perdida. Repetir um GET é inofensivo; repetir um POST pode cobrar duas vezes.

É a razão de existirem chaves de idempotência: o cliente gera um identificador único por operação e envia-o; o servidor reconhece a repetição e devolve o resultado original em vez de executar de novo. Em qualquer sistema que mova dinheiro, isto não é opcional (API Design).

5.3 Os códigos que dizem alguma coisa

5.4 Cache: a otimização com melhor retorno

Duas famílias, e a diferença

Validação — o cliente pergunta "isto mudou?" com um identificador de versão; o servidor responde 304 se não mudou. Poupa transferência, não poupa a ida e volta.

Expiração — o servidor diz "isto vale por N segundos"; durante esse tempo o cliente nem pergunta. Poupa a ida e volta inteira, e é por isso muito mais eficaz.

O padrão que resolve o dilema entre cache longa e poder atualizar: nome do ficheiro com impressão digital do conteúdoapp.7f3a9c.js — com validade de um ano. Quando o conteúdo muda, o nome muda, e não há nada a invalidar. É o desenho por trás de qualquer processo de construção moderno.

5.5 As versões, em uma linha cada

A implicação prática: otimizações que faziam sentido em HTTP/1.1 podem prejudicar em HTTP/2 e 3. Juntar tudo num ficheiro gigante deixou de ser vantagem e passou a impedir cache parcial.

Exercício 5.1 — Leia os cabeçalhos

Faça um pedido a um site que use e leia todos os cabeçalhos de resposta. Identifique a política de cache, a versão do protocolo e se passou por algum intermediário. Está tudo lá, e quase ninguém olha.

Capítulo 06 Núcleo

TLS: o que é cifrado, e o que não é

Toda a gente sabe que o cadeado significa cifrado. Menos gente sabe o que fica de fora — e é isso que decide o que se pode e não se pode assumir.

6.1 As três garantias

GarantiaSignifica
ConfidencialidadeQuem está no caminho não lê o conteúdo
IntegridadeQuem está no caminho não altera sem ser detetado
Autenticação do servidorEstá a falar com quem julga — e é esta que faz o trabalho pesado
Cifrar sem autenticar não vale nada

Uma ligação cifrada com um impostor está perfeitamente cifrada — e o impostor lê tudo. A verificação do certificado é o que impede isso, e é a parte que mais vezes é desligada "temporariamente" em ambientes de desenvolvimento e fica assim para sempre.

Um cliente que ignora erros de certificado tem cifra e não tem segurança. É um dos erros mais comuns em integrações entre serviços internos, onde se assume que "é rede interna".

6.2 A cadeia de confiança

o certificado do servidor é assinado por uma autoridade intermédia, que por sua vez é assinada por uma raiz que o seu sistema já confia: raiz (no seu sistema) → intermédia → certificado do servidor o servidor tem de enviar a cadeia INTERMÉDIA. se se esquecer, funciona nuns clientes e falha noutros — os que já a tinham em cache contra os que não.

É a causa de uma classe inteira de problemas com um sintoma característico: o navegador aceita e a chamada a partir de um servidor rejeita. Não é um problema do cliente; é uma cadeia incompleta.

6.3 O que fica visível apesar da cifra

A lista que costuma surpreender

Mesmo com HTTPS, quem observa a rede vê:

  • O endereço IP de destino — e portanto, muitas vezes, o serviço.
  • A consulta DNS, se não for cifrada — o nome do site, em claro.
  • O nome do servidor pedido no início da negociação, que historicamente vai em claro para permitir vários sites no mesmo endereço.
  • O volume e o ritmo do tráfego — que revelam mais do que se supõe sobre o que se está a fazer.

O que fica protegido é o caminho, os cabeçalhos e o corpo. HTTPS impede que leiam o que enviou; não esconde com quem falou. É uma distinção que muda o que se pode prometer a um utilizador.

6.4 Certificados na prática

6.5 Terminação: onde a cifra acaba

Em quase todas as arquiteturas, o TLS termina num equipamento à frente — um balanceador ou uma rede de distribuição — e o tráfego segue depois para os servidores. Isso é normal e tem duas consequências que convém ter presentes:

Exercício 6.1 — Inspecione a cadeia

Para um serviço seu, inspecione o certificado e a cadeia enviada. Verifique se a intermédia está lá, quando expira, e que autoridades podem emitir para o seu domínio. Três verificações, e evitam três incidentes conhecidos.

Capítulo 07 Núcleo

Latência e largura de banda: a física que não negoceia

São dois números diferentes, e confundi-los faz gastar dinheiro no sítio errado. Um melhora todos os anos; o outro tem um limite que não se ultrapassa.

7.1 A distinção

Largura de bandaLatência
ÉQuantos bits por segundoQuanto tempo até o primeiro bit chegar
AnalogiaA largura do canoO comprimento do cano
Melhora comMelhor tecnologia — e tem melhorado muitoDistância menor. E só
LimiteSem limite prático à vistaA velocidade da luz
O limite que não se compra

Em fibra, a luz percorre cerca de 200 000 km por segundo. Lisboa–Nova Iorque são cerca de 5 500 km, portanto 27 ms só de viagem, e 55 ms de ida e volta no melhor caso teórico. Com equipamentos e desvios no caminho, na prática 80 a 120 ms.

Nenhum contrato de internet reduz isto. É a razão pela qual as redes de distribuição de conteúdo existem: não servem para dar mais banda, servem para encurtar a distância, que é a única forma de reduzir latência.

7.2 Onde a latência se multiplica

Um tempo de ida e volta isolado é irrelevante. O problema é quando se acumulam:

página que faz 8 pedidos em sequência, cada um dependente do anterior, com 100 ms de ida e volta: 8 × 100 ms = 800 ms só de espera os mesmos 8 pedidos em paralelo: 1 × 100 ms = 100 ms → a diferença não está na rede. está na FORMA COMO SE PEDE.

7.3 Quando mais banda deixa de ajudar

Um resultado contraintuitivo e bem estabelecido

Aumentar a largura de banda melhora muito o tempo de carregamento até certo ponto — e depois deixa praticamente de melhorar. Reduzir a latência melhora sempre, e proporcionalmente.

A razão está no capítulo 3: o TCP começa devagar e vai acelerando, e páginas típicas são feitas de muitos recursos pequenos com dependências entre si. O tempo é gasto em idas e voltas, não em transferir bytes — portanto um cano mais largo não ajuda se o problema é o número de viagens.

Consequência para quem decide: investir em pontos de presença mais próximos rende mais do que investir em capacidade, na maioria dos casos.

7.4 O que fazer, por ordem de retorno

  1. Reduzir o número de idas e voltas. Reutilizar ligações, paralelizar, juntar o que é sempre pedido em conjunto.
  2. Aproximar o conteúdo. Cache na periferia da rede, perto de quem pede.
  3. Não pedir nada. A ida e volta mais rápida é a que não acontece — cache no cliente com validade longa (cap. 5).
  4. Comprimir. Ajuda quando o conteúdo é grande; irrelevante quando são muitos recursos pequenos.
  5. Mais banda. Último da lista, e o primeiro que costuma ser proposto.
Exercício 7.1 — Meça as duas coisas

Meça o tempo de ida e volta até um servidor seu e o débito. Depois conte quantos pedidos em cadeia a sua página faz. Multiplique. É frequente descobrir que a maior parte do tempo percebido é latência acumulada, não transferência.

Capítulo 08 Prática

Quem está no caminho

Entre o cliente e a aplicação há quase sempre mais equipamentos do que se pensa. Saber quais são, e o que cada um faz, é metade do diagnóstico.

8.1 O percurso típico

cliente │ ├─ router e tradução de endereços (casa ou empresa) ├─ possível proxy ou filtro corporativo ├─ rede de distribuição de conteúdo (cache na periferia) ├─ firewall ├─ balanceador de carga ← termina o TLS ├─ proxy inverso / gateway de API └─ a aplicação │ └─ base de dados, cache, outros serviços

Cada um destes pode: atrasar, alterar cabeçalhos, terminar a ligação, responder por si, ou descartar em silêncio. E o último é o que produz os problemas mais difíceis.

8.2 O que cada um faz

ElementoFazSintoma quando é ele
BalanceadorDistribui por vários servidores; verifica saúde502/504; sessões que se perdem entre pedidos
Proxy inversoEncaminha por caminho ou domínio; termina TLSCabeçalhos alterados; limites de tamanho
Rede de distribuiçãoCache perto do utilizadorConteúdo desatualizado; comportamento diferente por região
FirewallFiltra por porta, endereço, protocoloSilêncio — a ligação nunca responde
Filtro corporativoInspeciona tráfego, por vezes abrindo o TLSErros de certificado só naquela rede
Rejeitar e descartar são coisas diferentes

Rejeitar devolve uma recusa imediata: a ligação falha depressa e a mensagem é clara. Descartar não devolve nada: o cliente fica à espera até esgotar o tempo.

É a diferença entre "ligação recusada" — que aponta logo para o serviço ou para a porta — e "tempo esgotado", que pode ser firewall, encaminhamento, ou um servidor sobrecarregado. A distinção é o primeiro dado útil de qualquer diagnóstico (cap. 10).

8.3 O endereço de quem pediu

Com intermediários no caminho, a aplicação vê o endereço do último equipamento, não o do utilizador. Por isso existe a convenção de acrescentar o endereço original num cabeçalho.

E é um cabeçalho que se pode falsificar

Qualquer cliente pode enviá-lo com o valor que quiser. Só é fiável se os seus intermediários o reescreverem, e só se deve confiar na parte que foi acrescentada por equipamento seu.

Usar este cabeçalho tal como vem para limitar taxa, bloquear endereços ou registar auditoria é uma vulnerabilidade — e é comum.

8.4 Verificações de saúde: o detalhe que decide

Um balanceador retira do serviço as instâncias que considera doentes. O que ele pergunta determina a fiabilidade do conjunto:

Exercício 8.1 — Desenhe o caminho

Para um pedido do seu sistema, desenhe todos os equipamentos entre o utilizador e o código, e escreva ao lado de cada um o que ele pode fazer ao pedido. Quase sempre aparece um que ninguém tinha em conta.

Capítulo 09 Método aplicado · Demo

O que acontece entre o Enter e a página

Role devagar. Sete etapas entre carregar Enter e ver a primeira letra — e o orçamento de tempo de cada uma.

Etapa 1 — resolver o nome

Quatro caches antes de alguém perguntar seja o que for

O navegador tem a sua cache, o sistema tem a dele, há ficheiros locais, e só depois se pergunta ao resolvedor — que por sua vez pergunta à raiz, ao servidor do domínio de topo e ao autoritativo (cap. 4).

Quarenta milissegundos, ou zero se já estivesse em cache. E é aqui que se percebe porque uma alteração de DNS "não pega": há quatro sítios diferentes onde a resposta antiga pode estar guardada, cada um com o seu prazo.

Etapa 2 — abrir a ligação

Uma ida e volta inteira só para combinar que há conversa

Três mensagens, e nenhuma leva conteúdo útil (cap. 3). São cinquenta milissegundos gastos antes de o servidor saber sequer o que se quer.

É aqui que a distância começa a decidir tudo: este custo é proporcional ao tempo de ida e volta, e o tempo de ida e volta é geografia, não tecnologia (cap. 7).

Etapa 3 — negociar a cifra

O certificado é validado aqui, e é aqui que falha

O cliente anuncia o que aceita — incluindo o nome do site, em claro (cap. 6) —, o servidor envia o certificado e a cadeia, e o cliente valida contra as raízes em que já confia.

Mais uma a duas idas e voltas. E é o ponto exato onde falta de cadeia intermédia produz o sintoma mais confuso do capítulo 6: funciona no navegador, falha na chamada entre servidores.

Etapa 4 — o pedido

Seiscentos bytes que carregam todo o contexto

Método, caminho, domínio, o que aceita, e os cookies. Vai tudo em cada pedido porque o HTTP não tem memória (cap. 5) — e é essa decisão que permite ao balanceador da etapa seguinte escolher qualquer instância.

Etapa 5 — o caminho

Cinco equipamentos, e o TLS acaba no segundo

Rede de distribuição (que não tem isto em cache, por ser personalizado), firewall, balanceador — onde a cifra termina —, proxy inverso, e finalmente a aplicação (cap. 8).

Oitenta milissegundos no servidor, dos quais 45 são três consultas à base de dados feitas em cadeia. Não é tempo de rede e comporta-se como tal: é latência acumulada por dependências, exatamente o problema do capítulo 7 aplicado dentro da máquina.

Etapa 6 — somar

330 milissegundos para 14 kilobytes

Aqui está o resultado que muda a forma de pensar sobre desempenho: transferiram-se 14 KB e demorou um terço de segundo. Com qualquer ligação moderna, esses bytes viajam em milissegundos.

A largura de banda não explica nada deste tempo. Explicam-no as idas e voltas — cinco delas — e a distância de cada uma. É a demonstração concreta de por que aumentar a capacidade não acelera páginas.

Etapa 7 — cortar

De 330 para 75 milissegundos, sem comprar nada

Quatro cortes, por ordem de facilidade: DNS em cache na segunda visita; ligação reutilizada, que elimina TCP e TLS dos pedidos seguintes; consultas em paralelo em vez de em cadeia, que corta o tempo de servidor quase a metade; e servidor mais próximo, que reduz proporcionalmente todas as idas e voltas restantes.

Nenhum dos quatro é largura de banda. Todos são distância ou número de viagens — que é a conclusão desta apostila inteira, e a razão pela qual a otimização mais proposta é habitualmente a menos eficaz.

Exercício 9.1 — O seu orçamento de tempo

Meça as sete etapas para um pedido real do seu sistema — as ferramentas de rede do navegador dão-lhe quase tudo. Some. Depois identifique qual das quatro poupanças de 7 se aplica ao seu caso.

Capítulo 10 Prática

Diagnosticar pela ordem certa

A maior parte do tempo perdido em problemas de rede vem de começar pelo sítio errado. Há uma ordem, e ela elimina metade das hipóteses de cada vez.

10.1 A escada

1 · O nome resolve? Consulte o DNS diretamente. Se falhar, acabou aqui — e a metade dos problemas resolve-se neste degrau (cap. 4).

2 · A máquina é alcançável? Tente chegar ao endereço. Atenção: muitos servidores ignoram pedidos de eco por política, portanto não responder não prova nada.

3 · A porta está aberta? Tente abrir uma ligação à porta. Aqui a distinção do capítulo 8 é o dado principal: recusada aponta ao serviço; tempo esgotado aponta a filtragem ou encaminhamento.

4 · O TLS negoceia? Verifique certificado, cadeia e validade (cap. 6).

5 · A aplicação responde? Faça o pedido com detalhe completo e leia os cabeçalhos e o código de estado.

6 · Responde corretamente? Aqui já não é rede — é a aplicação, e o problema mudou de disciplina.

Porque a ordem importa

Cada degrau elimina tudo o que está abaixo. Começar a ler registos da aplicação quando o problema é DNS é gastar uma hora a olhar para o sítio errado — e é o que acontece na maioria das vezes, porque a aplicação é o que se conhece melhor.

A escada é chata de propósito. Cinco minutos a subi-la poupam frequentemente uma tarde.

10.2 As perguntas que estreitam depressa

PerguntaSe a resposta for sim
Funciona a partir de outra rede?É a rede de origem: filtro, proxy, DNS local
Funciona a partir do próprio servidor?É o caminho, não a aplicação
Falha sempre ou de vez em quando?Intermitente aponta a uma instância má atrás do balanceador, ou a cache
Falha para todos ou para alguns?Para alguns aponta a DNS, cache regional, ou versão de protocolo
Começou quando?Cruze com alterações, certificados a expirar e mudanças de DNS
Falha depressa ou demora?Depressa: recusa explícita. Demora: descarte silencioso

10.3 As ferramentas, e o que cada uma responde

10.4 Registar o que interessa

Quatro campos que resolvem incidentes

Em cada pedido, registe: um identificador que atravesse todos os serviços, o tempo gasto em cada etapa, que instância respondeu e se veio de cache.

Com estes quatro, a pergunta "porque é que este pedido demorou 3 segundos" tem resposta em minutos. Sem eles, tem resposta em horas ou nenhuma — e a diferença de custo aparece precisamente no pior momento (Observabilidade & SRE).

Exercício 10.1 — Suba a escada

Escolha um serviço seu e percorra os seis degraus de 10.1, mesmo estando tudo bem. Guarde os comandos num ficheiro. Da próxima vez que algo falhar, tem o procedimento pronto — e não terá de o inventar sob pressão.

Capítulo 11 Crítica

Como a rede falha de forma traiçoeira

As falhas totais são fáceis: nota-se e corrige-se. As perigosas são as parciais, as lentas e as que o próprio sistema amplifica.

11.1 As oito falhas que se repetem

FalhaSintomaDefesa
Ligação morta que parece vivaPedidos ficam pendurados; a outra ponta já não existeTempos limite em tudo; sinais de vida periódicos
Tempestade de repetiçõesUm serviço abranda, todos repetem, e o abrandamento vira quedaRecuo exponencial com aleatoriedade, e limite de tentativas
Buraco negro de tamanhoPedidos pequenos passam, grandes desaparecemÉ um equipamento no caminho a descartar pacotes grandes sem avisar
Esgotamento de ligaçõesTudo pára embora a carga esteja normalLimites dimensionados; ligações devolvidas ao conjunto sempre
Esgotamento de portas de origemFalhas ao abrir ligações, sem carga aparenteReutilizar ligações em vez de abrir e fechar (cap. 2)
Cache de DNS desatualizadaMetade dos clientes vai para o sítio antigoGerir o TTL antes de mudar (cap. 4)
Certificado expiradoTudo pára de uma vez, à mesma horaRenovação automática e vigiada (cap. 6)
Relógios desalinhadosCertificados "ainda não válidos"; sinais recusadosSincronização horária, e vigiá-la

11.2 A tempestade de repetições, em detalhe

O mecanismo pelo qual um sistema se derruba a si próprio

Um serviço fica lento. Os clientes esgotam o tempo e repetem. As repetições somam-se à carga original, portanto fica ainda mais lento. Mais repetições. Em segundos, um abrandamento transitório tornou-se uma queda total — causada não pela avaria original, mas pela reação a ela.

Três defesas, e as três são necessárias:

  • Recuo exponencial: esperar 1 s, 2 s, 4 s, 8 s. Reduz a taxa de repetições depressa.
  • Aleatoriedade: acrescentar variação ao tempo de espera. Sem isto, todos os clientes repetem ao mesmo tempo e criam ondas sincronizadas — é o detalhe mais esquecido e o mais importante.
  • Disjuntor: ao fim de N falhas, parar de tentar durante um período. Dá ao serviço a hipótese de recuperar, que repetições contínuas lhe negam.

E uma regra que evita o pior caso: não repetir automaticamente o que não é seguro repetir (cap. 5). Uma cobrança repetida três vezes por um mecanismo automático é um incidente pior do que a falha original.

11.3 Tempos limite: os números que ninguém escolhe

11.4 O que se assume e não é verdade

As oito suposições falsas

É uma lista clássica da computação distribuída e continua a descrever erros atuais. Assume-se, erradamente, que: a rede é fiável; a latência é zero; a largura de banda é infinita; a rede é segura; a topologia não muda; há um só administrador; o transporte não tem custo; a rede é homogénea.

Cada uma destas suposições, feita em silêncio, produz uma classe de bugs. E a mais cara é a primeira: escrever código que trata uma chamada remota como se fosse uma chamada local — sem tempo limite, sem repetição pensada, sem tratar o caso de não se saber se chegou.

11.5 Falhar de forma útil

Exercício 11.1 — Os tempos limite que tem

Liste todas as chamadas de rede que o seu sistema faz e o tempo limite de cada uma. Onde estiver por definir, está o valor por omissão da biblioteca — que muito provavelmente não é o que quer. Verifique também se diminuem para dentro.

Capítulo 12 Ofício

O que fica

Um punhado de reflexos que se aplicam antes de saber qual é o problema — e que resolvem a maior parte deles.

12.1 As seis ideias

1 · A base não garante nada

O IP faz o melhor que pode. Toda a fiabilidade é construída por cima, e é aí que se paga em latência.

2 · Latência é distância

Melhora aproximando, não comprando capacidade. E multiplica-se com cada dependência em cadeia.

3 · Suspeite do DNS primeiro

Está no caminho de tudo, falha de forma assimétrica, e "propagação" é apenas cache a expirar.

4 · Cifrar não é autenticar

A verificação do certificado é a garantia que interessa. E HTTPS esconde o conteúdo, não com quem falou.

5 · Tempo limite em tudo

E que diminuam para dentro. Sem eles não há falha — há bloqueio, e o bloqueio propaga-se.

6 · Repetir tem de ser desenhado

Recuo exponencial, aleatoriedade, limite, disjuntor — e nunca repetir o que não é seguro repetir.

12.2 A lista de verificação de um serviço exposto

1. DNS com mais do que um servidor autoritativo, TTL adequado ao momento, e registo CAA.

2. Certificado com renovação automática e prazo vigiado como métrica.

3. Cadeia intermédia completa — verificada com um cliente que não seja o navegador.

4. Ligações reutilizadas; conjunto dimensionado e com limite.

5. Tempos limite definidos em todas as chamadas, e decrescentes para dentro.

6. Repetições com recuo, aleatoriedade e disjuntor — só onde é seguro repetir.

7. Cache com política explícita, e nomes com impressão digital para o que é estático.

8. Verificações de saúde que distinguem vivo de pronto, sem dependência partilhada por todas as instâncias.

9. Registo com identificador de correlação, tempo por etapa, instância e origem de cache.

10. A escada de diagnóstico (cap. 10) escrita e guardada, antes de fazer falta.

12.3 O que ler a seguir

Exercício 12.1 — As dez linhas

Passe um serviço seu pelas dez verificações de 12.2 e conte quantas falha. Comece pela que for mais barata de corrigir — habitualmente os tempos limite, que são uma linha de configuração e evitam a falha em cascata mais comum que existe.