Aprenda / Redes e Internet

FundamentosAula 8 de 1616 min0% da trilha

Load balancer — distribuindo tráfego entre servidores

Quando um servidor não aguenta mais sozinho, a resposta raramente é 'um servidor maior'.

Um servidor tem um teto de requisições que aguenta processar por segundo. Duas formas de crescer: escalar verticalmente (um servidor mais potente — tem limite físico e fica caro rápido) ou escalar horizontalmente (vários servidores idênticos, dividindo o trabalho). Um load balancer é a peça que torna a segunda opção possível — ele decide, a cada requisição, qual servidor vai atender.

Repare que o load balancer fica conectado aos 3 servidores o tempo todo — a diferença entre uma requisição e outra é só qual dessas 3 conexões recebe o tráfego daquela vez.

Requisição 1 → Servidor A

Cliente
Load Balancer
Servidor A
Servidor B
Servidor C

Clique em “Reproduzir fluxo” para ver a requisição passo a passo.

Requisição 2 (logo em seguida) → Servidor B

Cliente
Load Balancer
Servidor A
Servidor B
Servidor C

Clique em “Reproduzir fluxo” para ver a requisição passo a passo.

Estratégias de distribuição

Round-robin        → alterna entre os servidores em sequência (A, B, C, A, B, C...)
Least connections   → manda pro servidor com menos conexões ativas no momento
IP hash              → o mesmo cliente sempre cai no mesmo servidor (útil sem sessão compartilhada)

Health check — o LB precisa saber quem está de pé

nginx como load balancer
upstream backend {
  server 10.0.0.1:3000;
  server 10.0.0.2:3000;
  server 10.0.0.3:3000 max_fails=3 fail_timeout=30s;
}

server {
  location / {
    proxy_pass http://backend;
  }
}

Se o Servidor C parar de responder, o load balancer precisa parar de mandar tráfego pra ele automaticamente (via health check periódico) — senão parte das requisições dos usuários cairia num servidor morto.

Exercício

Com 3 servidores atrás de um load balancer, cada um guardando sessão de login só na própria memória (sem banco compartilhado), o que pode dar errado com a estratégia round-robin?

Quiz rápido

Qual a diferença entre escalar verticalmente e horizontalmente?
Por que um load balancer precisa de health check?