As duas camadas
Um balanceador de carga entende o seu tráfego ou não entende, e essa única distinção produz duas famílias de produto que quase só têm o nome em comum.
Camada 4
Ela encaminha pacotes. Ela vê uma conexão chegando, com endereço e porta de origem e de destino, escolhe um backend e passa os bytes entre os dois.
Ela não sabe se o tráfego é HTTP. Pode ser um protocolo de banco, um jogo ou um fluxo de vídeo, e essa generalidade é o que a torna rápida.
Um balanceador de camada 4 aguenta uma vazão enorme em hardware modesto, porque faz quase nada por conexão.
Camada 7
Ela lê a requisição: método, caminho, cabeçalhos e cookies. Depois roteia com base no que encontra.
Para ler uma requisição HTTPS, ela precisa decifrá-la, o que significa que ela guarda o certificado e termina o TLS. Esse fato explica a maior parte das diferenças que vêm a seguir.
flowchart TB
C["uma conexão chega"] --> L{"qual camada?"}
L -->|4| P["escolha um backend. canalize bytes"]
P --> F["rápido. agnóstico a protocolo. não sabe nada"]
L -->|7| D["termine o TLS. interprete a requisição"]
D --> R["roteie por caminho, cabeçalho, ou cookie"]
R --> S["mais lento. ciente de HTTP. consegue decidir"]
O que a camada 7 compra
Roteamento por caminho: /api para uma frota, todo o resto para outra.
Verificações de saúde de verdade. Um balanceador de camada 4 sabe se uma porta aceita conexões. Um de camada 7 sabe se o /up devolveu 200. São perguntas muito diferentes, já que um processo Rails travado ainda aceita conexões.
Novas tentativas. Um GET idempotente que falhou pode ser tentado de novo em outro backend. A camada 4 não consegue fazer isso, porque não sabe que a requisição era um GET.
Manipulação de respostas: compressão, injeção de cabeçalhos, cache.
O que ela custa
Ela decifra e interpreta cada requisição, e não cada conexão.
O certificado fica no balanceador, o que é uma questão de segurança: o tráfego do balanceador até os seus servidores vai decifrado, a menos que você o cifre de novo.
E ela vira um componente que entende a sua aplicação, o que significa que esse entendimento pode se afastar da realidade. Uma regra de roteamento que casa com algo inesperado é uma categoria inteira de problemas que a camada 4 não pode ter.
Qual delas esta aplicação tem
O kamal-proxy é um balanceador de camada 7. Ele termina o TLS, lê o cabeçalho Host para escolher um contêiner e verifica o /up enquanto um deploy sobe um contêiner novo. Na frente dele, a Cloudflare é outro proxy de camada 7: ela termina o TLS do visitante e cifra de novo o trecho até o servidor.
O kamal-proxy não costuma ser descrito como balanceador de carga, porque, com um backend só, o roteamento é trivial. Mas o mecanismo é o de que este curso trata, e reconhecê-lo é o objetivo.
Pontos-chave
- A camada 4 encaminha pacotes, e é rápida porque não entende nada.
- A camada 7 decifra e interpreta, e consegue rotear por caminho, cabeçalho ou cookie.
- Verificações de saúde de verdade precisam da camada 7, porque um processo travado ainda aceita conexões.
- O certificado fica no balanceador, então o trecho atrás dele vai decifrado, a menos que seja cifrado de novo.
- O
kamal-proxyé um balanceador de camada 7 cujo roteamento, por acaso, é trivial hoje.
Continue com a aula 2
Escolhendo um backend
Explica round robin, menos conexões, hashing e variantes com peso, e por que menos conexões é o padrão.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.