3.13

View in English

3.13 Redes e conectividade

Visão geral e motivação

Toda requisição que a sua aplicação faz atravessa uma rede, e a rede não se importa com os seus prazos. Entre o seu código e o banco de dados, o provedor de pagamentos ou o navegador existe uma pilha de peças móveis: resolução de nomes, roteamento, controle de congestionamento, handshakes de criptografia, balanceadores de carga, proxies e firewalls. A maioria dos engenheiros de aplicação trata tudo isso como um cano plano e confiável, e essa suposição é a fonte mais rica de incidentes em produção. As clássicas falácias da computação distribuída (a rede é confiável, a latência é zero, a largura de banda é infinita, a topologia nunca muda, o custo de transporte é zero) nomeiam exatamente as crenças que transformam um pequeno soluço numa queda. Este capítulo não é um curso de certificação em redes. É o conhecimento prático de que um engenheiro de aplicação de fato precisa para construir sistemas que continuam no ar quando a rede se comporta mal.

Para uma grande organização, a conectividade é onde a arquitetura encontra ao mesmo tempo a física e a política. Uma empresa global costura data centers, regiões de nuvem, APIs de parceiros e sistemas legados, e cada salto acrescenta latência, modos de falha e uma fronteira de segurança de que alguém precisa ser dono. Os governos acrescentam regras rígidas sobre como o tráfego entra e sai de suas redes e por onde os dados de cidadãos podem viajar. A diferença entre uma equipe que entende a rede e uma que a ignora aparece em números de disponibilidade, tempos de carga de página, relatórios de violações e achados de auditoria. Este material se conecta aos sistemas distribuídos (capítulo 3.3), à escalabilidade e à resiliência (capítulo 3.5), à segurança de infraestrutura e de nuvem (capítulo 4.3) e à criptografia e ao gerenciamento de chaves (capítulo 4.8).

A boa notícia é que vocês não precisam dominar protocolos de roteamento para construir sistemas resilientes. Precisam saber quais camadas importam para suas decisões, de onde vem a latência, como os nomes são resolvidos, como as conexões são protegidas e balanceadas e como falhar com elegância na fronteira da rede. Acertando isso, a maior parte da rede vira um substrato confiável.

Princípios fundamentais

  • A rede é uma dependência, não um dado. Trate toda chamada remota como algo que pode ser lento, cair ou mentir sobre ter terminado.
  • A latência é definida pela distância e pelas idas e vindas. Você não consegue vencer a velocidade da luz, então reduza as idas e vindas e leve os dados para mais perto dos usuários.
  • Os nomes falham mais que as máquinas. A resolução de nomes e os certificados causam uma parcela impressionante de quedas, então trate-os como preocupações operacionais de primeira classe.
  • Proteja e termine a criptografia deliberadamente. Saiba exatamente onde o tráfego é criptografado, onde é decifrado e quem detém as chaves.
  • Toda fronteira de rede precisa de um tempo limite e de uma alternativa. Esperas ilimitadas e novas tentativas às cegas transformam uma dependência lenta numa queda global.
  • Negue por padrão nas bordas. Segmente as redes, controle o que pode sair e presuma que o perímetro já é poroso.
  • Observe a conexão, não apenas o código. Erros de conexão, retransmissões, tempos de handshake e latência de DNS são sinais que seus logs normalmente perdem.

Recomendações

Entenda as camadas que de fato afetam suas decisões

Vocês não precisam do modelo de sete camadas decorado, mas precisam de um mapa mental. Na camada de transporte, o Transmission Control Protocol (TCP) dá um fluxo de bytes ordenado e confiável ao custo de um handshake e do bloqueio de cabeça de fila, enquanto o User Datagram Protocol (UDP) dá datagramas baratos e desordenados, sem garantia de entrega. O tráfego confiável de requisição/resposta viaja sobre TCP. A mídia em tempo real, os jogos e alguma telemetria viajam sobre UDP porque um pacote atrasado é pior que um perdido.

A evolução do Hypertext Transfer Protocol (HTTP) muda o seu teto de desempenho. O HTTP/1.1 trata uma requisição por conexão de cada vez, então os navegadores abrem muitas conexões e vocês pagam handshakes repetidos. O HTTP/2 multiplexa muitos fluxos sobre uma conexão TCP, o que remove o bloqueio de cabeça de fila no nível da aplicação mas não o do nível do TCP: um pacote perdido paralisa todos os fluxos daquela conexão. O HTTP/3 roda sobre QUIC, um transporte baseado em UDP que dá a cada fluxo uma entrega independente, estabelecimento de conexão mais rápido e migração de conexão entre mudanças de rede. Vocês raramente implementam isso por conta própria, mas escolhem nos balanceadores de carga, na rede de distribuição de conteúdo e nos clientes, e a escolha aparece na latência de cauda.

Trate o DNS e os certificados como sistemas de produção

O Domain Name System (DNS) traduz nomes humanos em endereços e fica na frente de quase toda requisição. Um número notável de grandes quedas remonta ao DNS: uma mudança ruim de registro, uma zona expirada, um resolvedor mal configurado, uma camada de cache servindo respostas obsoletas ou um servidor autoritativo lento acrescentando centenas de milissegundos ao primeiro byte. Tratem as mudanças de DNS com o mesmo rigor das implantações de código. Usem valores sensatos de tempo de vida (TTL) para poder mover o tráfego depressa durante um incidente sem convidar cache obsoleto na operação normal, e monitorem a latência de resolução e as taxas de falha como métricas de verdade.

Os certificados merecem a mesma seriedade. Quando os certificados de Transport Layer Security (TLS) expiram sem ser notados, serviços inteiros apagam de uma vez, e a falha não se parece em nada com um bug de código. Automatizem a emissão e a renovação, acompanhem as datas de expiração de forma centralizada e alertem bem antes do prazo. Decidam deliberadamente onde o TLS termina: no balanceador de carga da borda, num proxy ou até o serviço. Terminar na borda simplifica o tráfego interno mas deixa o salto interno sem criptografia a menos que vocês criptografem de novo. As autoridades certificadoras, a rotação de chaves e as escolhas de cifras são cobertas no capítulo 4.8. Aqui o ponto operacional é que o DNS e os certificados falham em silêncio e levam tudo junto, então instrumentem e automatizem os dois.

Balanceie a carga na camada certa e ponha os proxies para trabalhar

O balanceamento de carga espalha o tráfego entre muitos backends, e onde vocês o fazem importa. Um balanceador de carga de camada 4 (L4) roteia por endereço IP e porta sem ler o conteúdo, então é rápido, agnóstico em relação ao protocolo e barato. Um balanceador de carga de camada 7 (L7) entende HTTP, então consegue rotear por caminho ou cabeçalho, terminar TLS, tentar de novo requisições idempotentes e impor limites de taxa, ao custo de mais trabalho por requisição. A maior parte do tráfego de aplicações quer um proxy reverso L7 ou um gateway de API na borda, dando um único lugar para tratar TLS, autenticação, roteamento e observabilidade. Reservem o L4 para vazão bruta ou protocolos que não são HTTP.

As verificações de saúde são o que torna seguro o balanceamento de carga. Configurem-nas para refletir a prontidão real, não apenas “o processo está de pé”, para que um backend que não alcança seu banco de dados seja retirado da rotação antes de servir erros, e drenem as conexões nas implantações para que as requisições em andamento terminem. Um gateway de API centraliza preocupações transversais (autenticação, limitação de taxa, modelagem de requisições, versionamento) mas se torna uma dependência crítica e um possível gargalo, então deem a ele o mesmo orçamento de disponibilidade e a mesma observabilidade de qualquer serviço central.

Aproxime os dados dos usuários com uma CDN e a borda

A latência é dominada pelo tempo de ida e volta, e o tempo de ida e volta é dominado pela distância. Uma rede de distribuição de conteúdo (CDN) guarda conteúdo em cache em pontos de presença perto dos usuários, de modo que ativos estáticos e, cada vez mais, respostas dinâmicas e personalizadas sejam servidos a poucos milissegundos de distância em vez de do outro lado de um oceano. Para qualquer produto voltado ao usuário com um público geograficamente espalhado, uma CDN é um dos investimentos de desempenho de maior retorno que vocês podem fazer, e funciona também como um escudo que absorve picos de tráfego e ataques volumétricos.

Empurrem trabalho para a borda onde ajudar. Terminar o TLS na borda reduz a latência do handshake porque as idas e vindas caras acontecem perto do usuário, e guardar em cache respostas de API em locais de borda encurta o caminho das requisições comuns. A troca é a invalidação de cache: quanto mais perto e mais em cache estão os seus dados, mais difícil é garantir o frescor, então sejam explícitos sobre o que pode ficar obsoleto e por quanto tempo. Isso se conecta à discussão de cache e desempenho do capítulo 3.5.

Torne resiliente a fronteira da rede por padrão

Toda chamada remota é um lugar em que a rede pode machucar vocês, então envolvam cada uma na mesma disciplina. Definam um tempo limite explícito em toda chamada, porque uma dependência travada esgotará seus pools de conexões e de threads e paralisará tudo atrás dela. Tentem de novo apenas operações que são seguras de repetir, usem recuo exponencial com jitter para que um soluço não vire uma tempestade sincronizada de novas tentativas e limitem o total de tentativas e o tempo total. Acrescentem um disjuntor para que, depois de um limiar de falhas, vocês falhem rápido durante um resfriamento em vez de empilhar requisições sobre um serviço que já está se afogando. Esses padrões são cobertos em profundidade no capítulo 3.3. O ponto aqui é que eles pertencem especificamente à fronteira da rede, idealmente como padrões compartilhados da plataforma e não algo que cada equipe reinventa.

Orcem seus tempos limite ao longo da cadeia de chamadas. Se uma requisição voltada ao usuário tem um orçamento de dois segundos e atravessa quatro saltos, cada salto precisa saber quão pouco tempo resta e falhar rápido em vez de tentar de novo no vazio. Reutilizem as conexões por pooling e keep-alive para não pagar um novo handshake de TCP e de TLS por requisição, e observem a latência de cauda, não só as médias, porque o um por cento lento é o que os usuários lembram e o que se propaga em cascata sob carga.

Projete e governe a topologia da sua rede

Na nuvem, a sua rede é software que vocês configuram, então configurem-na de propósito. Ponham as cargas numa nuvem privada virtual (VPC) e segmentem-na: camadas voltadas ao público, camadas de aplicação e camadas de dados em sub-redes separadas, com regras que permitem apenas o tráfego que deve existir. Controlem a saída tão deliberadamente quanto a entrada. O acesso de saída sem controle é como os dados saem durante uma violação e como as cargas comprometidas alcançam servidores de comando e controle, então roteiem o tráfego de saída por gateways controlados e liberem por lista de permissão os destinos que genuinamente precisam ser alcançados. Planejem para o IPv6 em vez de tratá-lo como reflexão tardia, porque o esgotamento de endereços e as exigências de parceiros o forçarão eventualmente e adaptar depois é doloroso.

Adotem um modelo de segurança de confiança zero: parem de tratar “dentro da rede” como confiável e autentiquem e autorizem toda requisição com base na identidade e não na localização na rede. Na prática isso significa TLS mútuo entre serviços, credenciais de curta duração e uma política que não presume que uma requisição é segura só porque veio de uma sub-rede vizinha. Uma malha de serviços (service mesh) pode entregar boa parte disso de modo uniforme. Ao rodar um proxy auxiliar (sidecar) ao lado de cada serviço, uma malha dá TLS mútuo, novas tentativas e tempos limite consistentes e telemetria por salto sem mudar o código da aplicação. Ela acrescenta complexidade operacional e alguma latência, então adotem-na quando a contagem de serviços tornar a imposição uniforme, sem alterar código, digna do custo. A confiança zero e a segmentação são desenvolvidas mais nos capítulos 4.3 e 8.3.

Compromissos: prós e contras

DecisãoPrósContras / custo
Balanceador de carga L7 / gateway de APIRoteamento inteligente, terminação de TLS, autenticação, limitação de taxa, observabilidadeMais latência por requisição, uma dependência compartilhada crítica
Balanceador de carga L4Rápido, agnóstico em relação ao protocolo, baratoNão vê nem age sobre HTTP, sem roteamento sensível ao conteúdo
Terminação de TLS na bordaHandshakes mais rápidos, backends mais simplesO salto interno fica sem criptografia a menos que se criptografe de novo
CDN e cache na bordaGrande ganho de latência, absorve picos e ataquesInvalidação de cache e obsolescência, custo e configuração extras
Malha de serviçosmTLS uniforme, novas tentativas, telemetria sem mudar a aplicaçãoComplexidade operacional, latência e custo de recursos do sidecar
HTTP/3 sobre QUICSem bloqueio de cabeça de fila no transporte, estabelecimento rápido, migração de conexãoFerramentas mais novas, UDP às vezes limitado, mais difícil de depurar

A tensão central é entre controle e simplicidade. Todo componente capaz que vocês acrescentam na fronteira da rede (um gateway L7, uma malha, uma CDN, um proxy de saída) compra inteligência de roteamento, imposição de segurança e visibilidade, e cada um também acrescenta um salto, um modo de falha e algo para operar. Resolvam isso empurrando as preocupações compartilhadas para a infraestrutura compartilhada apenas quando equipes suficientes as precisarem para justificar o peso operacional, e mantendo curto o caminho rápido. Uma startup de duas pessoas que termina o TLS num balanceador de carga gerenciado e dá o assunto por encerrado faz uma troca melhor que a mesma equipe montando à mão uma malha de serviços. Uma empresa de mil serviços sem TLS mútuo uniforme nem controle de saída faz uma pior.

Perguntas para discutir com sua equipe

  1. Onde o TLS termina em cada um dos seus caminhos de requisição, e todos conseguem desenhá-lo do mesmo jeito? Isso parece trivialidade até um incidente. Se metade da equipe acredita que o tráfego é criptografado de ponta a ponta e a outra metade sabe que é decifrado na borda e enviado em texto puro ao backend, vocês têm ao mesmo tempo uma brecha de segurança e uma armadilha de depuração. Para uma grande organização, essa pergunta mapeia diretamente para a conformidade: reguladores e auditores perguntarão por onde os dados de cidadãos ou de clientes viajam em claro, e “não temos certeza” é um achado. Levem um diagrama real de um caminho do cliente ao banco de dados, marcando cada ponto em que a criptografia começa e termina e quem detém cada certificado e chave. A resposta deve dizer se vocês precisam de recriptografia interna, onde o TLS mútuo pertence e quais certificados derrubariam um serviço se expirassem. Se ninguém consegue desenhá-lo com confiança, essa lacuna é a sua primeira tarefa.

  2. O que acontece com o seu sistema quando o DNS está lento ou errado, e vocês de fato testaram? O DNS está a montante de quase toda requisição, e ainda assim a maioria das equipes nunca observou seu sistema sob degradação do DNS. Um resolvedor lento acrescenta latência a toda nova conexão, um cache obsoleto pode mandar tráfego a um host desativado e uma mudança ruim de registro pode jogar um serviço inteiro num buraco negro em segundos. Numa grande empresa o raio de impacto é maior porque a descoberta interna de serviços, as integrações com parceiros e os endpoints de nuvem se apoiam todos na resolução de nomes. Levem as configurações de TTL do DNS, suas métricas de latência de resolução se as tiverem e o runbook para uma mudança ruim de registro e perguntem com que rapidez vocês conseguiriam de fato deslocar o tráfego durante um incidente. A resposta deve conduzir se vocês monitoram a resolução como métrica de primeira classe, ajustam os TTLs tanto para agilidade quanto para eficiência do cache e ensaiam o failover de DNS. Se vocês nunca induziram uma falha de DNS num teste controlado, esse experimento pertence ao calendário.

  3. Quais padrões de resiliência na fronteira da rede são padrões da plataforma, e quais toda equipe está reinventando? Tempos limite, novas tentativas limitadas com jitter, disjuntores, pooling de conexões e rastreamento por salto são mais baratos e mais confiáveis quando construídos uma vez e herdados por todos. Deixados a cada equipe, derivam: algumas chamadas não têm tempo limite, algumas tentam de novo operações não idempotentes, algumas não emitem telemetria no nível da conexão e as lacunas só aparecem sob carga. Para uma grande equipe, essa é uma escolha organizacional sobre onde a resiliência vive, numa biblioteca compartilhada ou camada de plataforma versus espalhada pelos serviços. Levem uma auditoria de uma amostra de serviços contando quantos definem um tempo limite explícito em toda chamada remota e propagam um identificador de correlação de ponta a ponta. Se esse número é baixo, a correção é um investimento de plataforma, e padronizar também torna a resiliência testável e auditável, o que importa cada vez mais em setores regulados. A resposta deve dizer se vocês financiam uma capacidade de plataforma de redes ou continuam pagando pela inconsistência nos incidentes.

  4. O que cada uma das suas cargas consegue alcançar na internet pública agora, e quem aprovou cada um desses destinos de saída? A entrada recebe a atenção porque é onde os atacantes batem, mas a saída é como os dados de fato saem durante uma violação e como uma carga comprometida liga para casa, para um servidor de comando e controle. A maioria das equipes consegue listar o que fala com elas muito mais facilmente do que com o que elas falam, e essa assimetria é exatamente a lacuna que um atacante explora. A consideração concorrente é o atrito: uma lista de permissão de destinos aprovados desacelera os desenvolvedores que querem chamar uma nova API de terceiros hoje, então o debate honesto é quanta conveniência vocês trocam por um raio de impacto menor. Levem as regras de saída atuais de um serviço representativo, uma captura de onde ele de fato se conectou na última semana e o processo (se houver) para aprovar um novo destino. Para sistemas corporativos e governamentais isso não é higiene opcional, mas uma linha de auditoria: a proteção de fronteira e os inventários de saída são exatamente o que reguladores e regras de fronteira de rede exigem que vocês produzam, e “qualquer carga alcança qualquer lugar” é um achado que mandarão vocês remediarem.

  5. Os seus tempos limite e novas tentativas se compõem num orçamento coerente ao longo de cada cadeia de chamadas, ou cada salto chuta isoladamente? Uma requisição voltada ao usuário que atravessa quatro serviços tem um único prazo que o usuário de fato sente, e ainda assim cada salto costuma definir seu próprio tempo limite localmente, tenta de novo num serviço que já desistiu e estoura o orçamento de ponta a ponta fazendo trabalho extra. Para uma grande equipe, o perigo é emergente: tempos limite razoáveis por serviço se compõem em paralisações em cascata e tempestades sincronizadas de novas tentativas que nenhuma equipe sozinha enxerga do próprio painel. A tensão é entre a autonomia local, em que cada equipe ajusta seus limites, e um prazo propagado que todo salto lê e encurta à medida que o tempo é gasto. Levem um caminho de requisição real com a política de tempo limite e de nova tentativa em cada salto, o orçamento de ponta a ponta que o produto promete e seus números de latência de cauda (p99, não a média) sob carga. Em contextos regulados e de alta disponibilidade, liguem isso aos objetivos de recuperação: uma cadeia que não consegue falhar rápido dentro do orçamento transforma uma dependência lenta numa violação do objetivo de nível de serviço, e essa violação é o número que a liderança e os auditores pedirão que vocês expliquem.

  6. A partir de que contagem de serviços e de que perfil de tráfego a imposição uniforme (uma malha de serviços, um gateway L7, cache na borda) merece o seu peso operacional, e em que ponto dessa curva vocês estão hoje? Todo componente capaz que vocês acrescentam na fronteira da rede compra inteligência de roteamento, segurança e visibilidade, e cada um também acrescenta um salto, um modo de falha e algo para operar 24 horas por dia. Adotem uma malha cedo demais e afogam um punhado de serviços em complexidade de sidecar. Adotem tarde demais e têm mil serviços sem TLS mútuo uniforme nem novas tentativas consistentes. As considerações que competem são o valor da imposição consistente e sem alterar código entre muitas equipes contra o custo real de operar o plano de controle, a latência adicional e as escassas pessoas que sabem depurá-lo. Levem a contagem atual de serviços e a curva de crescimento, a fração de serviços que já usam clientes compartilhados que dão as mesmas garantias e a folga de latência que vocês têm para gastar. Para uma grande empresa ou agência a decisão também é de governança: uma malha ou gateway central permite a uma equipe de plataforma implantar uma política em todo lugar de uma vez, o que é poderoso para a conformidade e perigoso se esse ponto único de estrangulamento tiver poucos recursos, então orcem-no como infraestrutura central com sua própria meta de disponibilidade, não um projeto paralelo.

Perspectiva por setor

Startup. Apoiem-se em infraestrutura gerenciada e gastem a escassa atenção de engenharia no produto, não em pacotes. Um balanceador de carga L7 gerenciado que termina o TLS com certificados renovados automaticamente, mais uma CDN na frente do aplicativo, compra tráfego criptografado, balanceado e globalmente rápido sem uma equipe de operações. Envolvam toda chamada externa num pequeno cliente compartilhado com tempo limite e nova tentativa limitada e resistam a uma malha de serviços até terem muito mais serviços do que pessoas para operá-la.

Pequena empresa. Vocês não têm especialista em redes e têm orçamento apertado, então tratem a conectividade como algo que se compra configurado e não que se constrói. Escolham um provedor de nuvem ou plataforma cujos padrões já deem certificados automatizados, gestão de DNS e um firewall sensato e liguem o que eles oferecem em vez de montar por conta própria. Onde precisarem decidir, prefiram a opção gerenciada: pagar um fornecedor para renovar certificados e monitorar o DNS é muito mais barato que a queda que uma expiração esquecida causa.

Grande empresa. O seu problema é a consistência entre muitas equipes e regiões: TLS mútuo uniforme, tempos limite e novas tentativas padronizados, saída controlada e monitoramento de certificados e de DNS de que nenhuma equipe sozinha possa se excluir. Empurrem isso para a infraestrutura compartilhada da plataforma (uma malha de serviços, um gateway interno, uma biblioteca de cliente compartilhada) para que a resiliência seja herdada e não reinventada e gerenciem a fronteira da rede com o mesmo orçamento de disponibilidade e a mesma observabilidade de qualquer serviço central. Segmentem as VPCs, governem a saída de forma central e tratem a topologia como software que vocês auditam.

Governo. As regras de contratação, a transparência e a responsabilização pública moldam toda fronteira. Canalizem o tráfego voltado à internet por um pequeno conjunto de gateways endurecidos e monitorados, inventariem todo endpoint externo e conduzam uma arquitetura de confiança zero em que os serviços se autenticam pela identidade com credenciais de curta duração e não pela localização na rede. Tratem o DNS e o gerenciamento de certificados como infraestrutura crítica com monitoramento dedicado, porque um único certificado expirado num serviço voltado ao cidadão convida o escrutínio público e legislativo, e mantenham a evidência auditável para que as revisões de proteção de fronteira encontrem um design documentado e defensável.

Exemplos

Startup. Uma empresa de software como serviço de dez pessoas roda tudo atrás de um único balanceador de carga L7 gerenciado que termina o TLS com certificados renovados automaticamente e põe uma CDN na frente do aplicativo web e da API. Essa combinação lhes dá cargas de página rápidas no mundo todo, absorve o eventual pico de tráfego de um lançamento de produto e protege a origem sem uma equipe de operações dedicada. Eles definem um tempo limite explícito e uma nova tentativa limitada em toda chamada ao provedor de pagamentos e ao serviço de e-mail, envolvidas num pequeno cliente compartilhado, de modo que um terceiro lento nunca trave uma requisição de usuário. Resistem a acrescentar uma malha de serviços: com uma dúzia de serviços, o custo operacional superaria o benefício, e a infraestrutura gerenciada já lhes dá tráfego criptografado e balanceado.

Grande empresa. Uma varejista multinacional opera em três regiões de nuvem e num data center local legado, conectados por links privados e não pela internet pública, para que o tráfego de estoque e de pagamento nunca atravesse redes abertas. Cada região fica numa VPC segmentada, com sub-redes públicas, de aplicação e de dados separadas, e todo o tráfego de saída flui por gateways de saída que liberam por lista de permissão os destinos aprovados, para que uma carga comprometida não consiga exfiltrar dados em silêncio. Centenas de serviços se comunicam por uma malha de serviços que impõe TLS mútuo em toda parte e aplica novas tentativas, tempos limite e rastreamento uniformes, permitindo a uma equipe central de plataforma implantar uma nova política de nova tentativa sem tocar no código da aplicação. O monitoramento centralizado de certificados sinaliza as expirações com dias de antecedência e a automação os rotaciona antes que algum cliente perceba.

Governo. Uma agência nacional opera sob regras de proteção de fronteira de rede que canalizam todo o tráfego voltado à internet por um pequeno conjunto de gateways endurecidos e monitorados, em linha com o modelo de conexões confiáveis com a internet. O tráfego entre agências corre por conexões privadas, e todo endpoint externo é inventariado, de modo que as equipes de segurança sabem exatamente o que pode entrar e sair. A agência conduz uma arquitetura de confiança zero em que os serviços se autenticam entre si pela identidade com credenciais de curta duração, e nenhuma requisição é confiável apenas por se originar dentro do perímetro. O DNS e o gerenciamento de certificados são tratados como infraestrutura crítica com monitoramento dedicado, porque um único certificado expirado ou uma mudança ruim de zona poderia derrubar um portal de benefícios voltado ao cidadão e gerar escrutínio público e legislativo.

Justificativa de negócio: motivações, ROI e TCO

A disciplina de redes é comprada barato e sua ausência é paga no pior momento possível. O investimento é em grande parte único e em formato de plataforma: clientes compartilhados com tempos limite e novas tentativas, gestão automatizada de certificados, monitoramento de DNS, uma VPC sensatamente segmentada e cache na borda. Cada um beneficia toda equipe que o herda, então o custo marginal por equipe é baixo enquanto o ganho se compõe. Uma CDN em particular muitas vezes se paga duas vezes, cortando custos de largura de banda de origem enquanto melhora os números de conversão e de engajamento que decorrem de cargas de página mais rápidas.

O custo de pular esse trabalho se mede em quedas e violações. Um certificado expirado ou uma mudança ruim de DNS pode tirar do ar um produto inteiro em minutos, com a correção atrasada enquanto os engenheiros perseguem a camada errada. Um tempo limite ausente pode propagar em cascata uma dependência lenta numa paralisação total da plataforma. A saída sem controle transforma uma única carga comprometida num incidente de exfiltração de dados. Enquadrem o caso para a liderança em termos que ela já acompanha: disponibilidade, tempo médio de recuperação, tempo de carga de página e risco de violação. A gestão automatizada de certificados e de DNS previne uma categoria de quedas autoinfligidas, o investimento em borda e CDN move uma métrica de desempenho do produto, e a segmentação e o controle de saída reduzem o raio de impacto de violações. O argumento de custo total de propriedade é o que se repete em todo este guia: construir a capacidade desde o início custa uma fração do que custa adaptá-la depois do incidente que força a questão.

Antipadrões e armadilhas

  • Presumir que a rede é confiável e rápida. Codificar como se as chamadas remotas fossem locais, sem tempos limite, sem novas tentativas e sem tratamento para “expirou mas talvez tenha concluído”.
  • Gestão manual de certificados. Acompanhar a expiração numa planilha ou na memória de alguém, garantindo uma queda eventual quando ela passar sem ser notada.
  • Ignorar o DNS como sistema operacional. Sem monitoramento de resolução, com TTLs descuidados e mudanças de registro feitas sem o rigor de uma implantação.
  • Tentar de novo sem idempotência nem recuo. Efeitos colaterais duplicados e tempestades sincronizadas de novas tentativas que amplificam um pequeno soluço numa queda.
  • Confiar na rede interna. Tratar tudo dentro do perímetro como seguro, com tráfego interno sem criptografia e sem autorização baseada em identidade.
  • Saída sem controle. Permitir que as cargas alcancem qualquer destino de saída, entregando aos atacantes um caminho de exfiltração e um canal para servidores de comando.
  • Caminhos de requisição tagarelas. Cadeias profundas de chamadas síncronas em que cada salto acrescenta uma ida e volta, de modo que a latência de cauda dispara sob carga.
  • Adotar uma malha de serviços cedo demais. Assumir complexidade e latência de sidecar para um punhado de serviços que um cliente compartilhado serviria melhor.

Modelo de maturidade

  • Nível 1, Iniciar: As chamadas remotas são tratadas como chamadas locais. Os tempos limite e as novas tentativas estão ausentes ou são ingênuos, e “expirou mas talvez tenha concluído” não é tratado. Os certificados e o DNS são gerenciados à mão e causam quedas-surpresa. Não há segmentação, e o tráfego interno é confiável por padrão. O trabalho de conectividade é reativo, acontecendo só depois que um incidente o força.
  • Nível 2, Desenvolver: Algumas equipes adotaram práticas básicas, mas são inconsistentes entre os serviços. Existem tempos limite e novas tentativas simples em alguns lugares, o TLS é terminado num balanceador de carga e os certificados são em sua maioria automatizados. Uma CDN fica na frente do conteúdo estático e existe segmentação básica de rede, embora a saída seja em grande parte aberta e cada equipe invente seu próprio cliente. O que uma equipe faz bem outra ainda não começou.
  • Nível 3, Padronizar: A rede resiliente é documentada e imposta em toda a organização. Os tempos limite, o recuo com jitter e os disjuntores são padrão por meio de bibliotecas compartilhadas ou de um gateway que toda equipe herda. O DNS e os certificados são monitorados e automatizados como sistemas de produção, as VPCs são segmentadas com entrada e saída controladas, a telemetria no nível da conexão é coletada em toda parte e os princípios de confiança zero estão sendo adotados como política e não como experimento de uma equipe.
  • Nível 4, Gerenciar: A fronteira da rede é medida e controlada em relação a linhas de base, e não apenas padronizada. A latência de resolução, o tempo de handshake de TLS, as taxas de retransmissão e de erro de conexão, a latência de cauda (p99, não a média), a antecedência de expiração de certificados e as violações da política de saída são acompanhados em painéis com limiares de alerta e orçamentos de erro. As decisões de seguir ou não e de capacidade são conduzidas por esses dados, exercícios induzidos de falha de DNS e de dependências são conduzidos numa agenda e seus resultados medidos, e uma regressão em qualquer sinal é pega e tem responsável em vez de descoberta na próxima queda.
  • Nível 5, Orquestrar: A rede resiliente é o padrão da plataforma continuamente melhorado, integrado em toda a organização e adaptativo à mudança. O TLS mútuo e a autorização baseada em identidade são uniformes, muitas vezes por uma malha de serviços. A estratégia de borda e de CDN é ajustada contra dados vivos de latência, a saída é totalmente governada, e as escolhas de topologia, de provedor e de roteamento são reequilibradas à medida que custo, risco e tráfego mudam. As decisões de rede são tecidas no planejamento de capacidade, de segurança e de negócio, e a organização raciocina explicitamente sobre idas e vindas, latência de cauda e modos de falha de fronteira como rotina.

Ideias para discussão

  1. Se o seu provedor principal de DNS ou resolvedor se degradasse por uma hora, quanto do seu sistema ainda funcionaria, e como vocês saberiam?
  2. Quais dos seus serviços ainda enviam tráfego sem criptografia depois que ele está “dentro” da rede, e o que seria preciso para fechar essa lacuna?
  3. Onde estão as cadeias de chamadas síncronas mais profundas da sua arquitetura, e quantas idas e vindas de rede uma requisição típica de usuário de fato incorre?
  4. Os seus tempos limite se compõem ao longo da cadeia de chamadas num orçamento coerente, ou cada camada define o seu e torce?
  5. O que as suas cargas conseguem alcançar na internet pública agora, e quem aprovou cada um desses destinos de saída?
  6. A partir de que número de serviços a imposição uniforme de uma malha de serviços superaria o seu custo operacional para a sua organização, e quão perto vocês estão?

Principais conclusões

  • A rede é uma dependência com seus próprios modos de falha. Projete toda chamada remota para a lentidão, a perda e a conclusão ambígua, não apenas para o sucesso ou a falha limpa.
  • A latência é governada pelas idas e vindas e pela distância, então reduza saltos, reutilize conexões e aproxime os dados dos usuários com uma CDN e a borda.
  • O DNS e os certificados TLS falham em silêncio e derrubam serviços inteiros. Automatize e monitore os dois como sistemas de produção.
  • Balanceie a carga na camada que se ajusta ao tráfego e ponha as preocupações compartilhadas atrás de um gateway L7 apenas quando o custo de disponibilidade e de observabilidade se justificar.
  • Torne resiliente a fronteira da rede por padrão, com tempos limite, novas tentativas limitadas com jitter e disjuntores, idealmente como padrões herdados da plataforma.
  • Segmente a sua VPC, governe a saída, planeje para o IPv6 e adote a confiança zero para que estar “dentro” da rede não confira nenhuma confiança automática.

Referências e leitura complementar

  • W. Richard Stevens, TCP/IP Illustrated, Volume 1: The Protocols
  • Ilya Grigorik, High Performance Browser Networking
  • Cricket Liu and Paul Albitz, DNS and BIND
  • Andrew S. Tanenbaum and David J. Wetherall, Computer Networks
  • Michael Nygard, Release It!: Design and Deploy Production-Ready Software
  • Evan Gilman and Doug Barth, Zero Trust Networks: Building Secure Systems in Untrusted Networks
  • Lee Calcote and Zack Butcher, Istio: Up and Running (service mesh concepts)
  • Internet Engineering Task Force, RFC 9110 (HTTP Semantics) and RFC 9000 (QUIC)
  • Peter Deutsch and James Gosling, “The Eight Fallacies of Distributed Computing”
  • National Institute of Standards and Technology, Special Publication 800-207: Zero Trust Architecture