System Design/02 - Componentes/Load Balancers2 min
Layer 4 Load Balancing
- Que problema isso resolve?
- Quando usar / quando NÃO usar?
- Qual o principal trade-off?
- Como isso falha em produção?
Conceito
Balanceamento na camada de transporte (TCP/UDP). O balanceador decide olhando apenas IP e porta — ele não abre o pacote nem entende o protocolo de aplicação.
cliente → [ L4 ] → escolhe backend por IP:porta
encaminha os bytes, sem interpretar
Duas formas de operar
| Modo | Como funciona |
|---|---|
| NAT / proxy | Reescreve o destino; a resposta volta pelo balanceador |
| DSR (Direct Server Return) | A resposta vai direto ao cliente, sem passar de volta |
DSR é o que permite throughput altíssimo: o balanceador só toca o tráfego de entrada, que costuma ser uma fração do de saída.
Trade-offs
| Ganha | Perde |
|---|---|
| Latência mínima (~microssegundos) | Não roteia por path, host ou header |
| Throughput altíssimo | Sem terminação TLS |
| Funciona com qualquer protocolo TCP/UDP | Sem cache, sem compressão, sem WAF |
| Preserva a conexão fim a fim | Health check limitado (porta aberta ≠ app saudável) |
| Menor custo de CPU | Não faz retry de requisição |
O ponto mais importante é o health check: em L4, "a porta 8080 aceita conexão" é tudo que o balanceador sabe. Um processo travado com socket aberto continua recebendo tráfego. Em Layer 7 Load Balancing, o check pede /health e vê a resposta.
O segundo é a granularidade: L4 balanceia conexões, não requisições. Com HTTP/2 ou conexões persistentes, um cliente que abre uma conexão e envia mil requisições fica preso a um backend — e a carga pode ficar bem desigual.
Em compensação, L4 é o único caminho quando o protocolo não é HTTP: banco de dados, MQTT, RTMP, jogos sobre UDP.
Exemplo prático
Um serviço de jogo com milhões de pacotes UDP por segundo. L7 está fora de questão — não existe "path" para rotear, e o custo de terminar cada conexão mataria a latência.
Um balanceador L4 com DSR encaminha os pacotes de entrada e deixa as respostas irem direto do servidor ao jogador. A latência adicionada fica em microssegundos.
O contraste: uma API REST atrás do mesmo L4 perderia roteamento por rota, terminação TLS centralizada e health check real — três coisas que, nesse caso, valem mais que os microssegundos economizados.
Relacionado
Parte de Load Balancers · roadmap.sh/system-design