ENGENHARIA DE SOFTWARE · LEITURA DE ~9 MIN

Algoritmos de
Load Balancer

O algoritmo de load balancer é a regra usada para decidir para qual servidor cada nova requisição será enviada.

Load balancer escolhendo servidores por diferentes algoritmos: Round Robin, IP Hash, Least Connections, Response Time e Resource-Based.

SEÇÃO 01

O que o algoritmo decide

O algoritmo de load balancer é a regra usada para decidir para qual servidor cada nova requisição será enviada.

Exemplo:

FLUXOTEXTO
Usuário → Load Balancer → Servidor A
                       → Servidor B
                       → Servidor C
Load balancer recebendo uma nova requisição e escolhendo entre os servidores A, B e C.
ESCOLHA · PARA QUAL SERVIDOR A REQUISIÇÃO VAI

O load balancer precisa escolher um deles. Essa escolha pode ser estática ou dinâmica.

SEÇÃO 02

Algoritmos estáticos

Eles não analisam profundamente o estado atual dos servidores. Apenas seguem uma regra predefinida.

Round Robin

Distribui as requisições em sequência:

ROUND ROBINTEXTO
Requisição 1 → Servidor A
Requisição 2 → Servidor B
Requisição 3 → Servidor C
Requisição 4 → Servidor A
Algoritmos estáticos: Round Robin distribui por ordem, Weighted Round Robin usa pesos e IP Hash mantém o mesmo IP no mesmo servidor.
ESTÁTICOS · REGRA PREDEFINIDA

É como distribuir cartas entre jogadores.

Vantagem: simples e barato.

Problema: pressupõe que todos os servidores têm capacidade parecida e que todas as requisições dão aproximadamente o mesmo trabalho.

Por exemplo, o Servidor A pode receber uma requisição pesada e continuar ocupado, mas receber outra quando chegar novamente sua vez.

Weighted Round Robin

É o Round Robin com pesos diferentes.

Exemplo:

PESOSTEXTO
Servidor A: peso 3
Servidor B: peso 2
Servidor C: peso 1

A distribuição pode ficar aproximadamente:

DISTRIBUIÇÃOTEXTO
A → A → A → B → B → C

O servidor mais potente recebe mais tráfego.

É útil quando as máquinas têm capacidades diferentes.

IP Hash

O load balancer usa o IP do cliente para calcular um hash e escolher o servidor.

IP HASHTEXTO
IP do usuário → função hash → Servidor B

O mesmo IP normalmente continua sendo enviado para o mesmo servidor.

Isso ajuda quando a aplicação guarda sessão localmente:

SESSÃOTEXTO
Usuário Marcelo → sempre Servidor B

O problema é que pode haver distribuição desigual. Muitos usuários podem acabar concentrados no mesmo servidor. Além disso, vários usuários podem compartilhar um único IP, como em redes corporativas.

SEÇÃO 03

Algoritmos dinâmicos

Eles observam o estado atual dos servidores antes de decidir.

Least Connections

Envia a nova requisição para o servidor com menos conexões abertas.

CONEXÕESTEXTO
Servidor A: 100 conexões
Servidor B: 45 conexões
Servidor C: 70 conexões

Nova requisição → Servidor B
Algoritmos dinâmicos observando conexões abertas, tempo de resposta e recursos reais antes de escolher o servidor.
DINÂMICOS · DECISÃO COM ESTADO ATUAL

É melhor que Round Robin quando as conexões duram tempos diferentes.

Por exemplo, uma conexão WebSocket pode ficar aberta por vários minutos, enquanto uma requisição HTTP comum termina rapidamente.

O problema é que quantidade de conexões não representa necessariamente esforço. Uma conexão pode consumir muito mais CPU do que outra.

Weighted Least Connections

Também escolhe com base nas conexões abertas, mas considera a capacidade de cada servidor.

PESOSTEXTO
Servidor A: máquina potente, peso 4
Servidor B: máquina média, peso 2
Servidor C: máquina fraca, peso 1

Mesmo que o Servidor A tenha mais conexões, ele ainda pode receber tráfego por conseguir suportar mais carga.

É uma versão mais realista do Least Connections para infraestrutura desigual.

Weighted Response Time

Considera principalmente:

  • tempo de resposta do servidor;
  • quantidade de conexões abertas;
  • peso ou capacidade configurada.

Exemplo:

LATÊNCIATEXTO
Servidor A: 80 ms
Servidor B: 300 ms
Servidor C: 120 ms

A nova requisição provavelmente será enviada ao Servidor A.

Esse algoritmo tenta direcionar usuários para os servidores que estão respondendo mais rápido.

O cuidado é que uma medição temporária pode enganar. Um servidor pode estar lento por poucos segundos, e não necessariamente com problema permanente.

Resource-Based

Analisa recursos reais de cada servidor, como:

RECURSOSTEXTO
CPU
memória RAM
fila interna
uso de disco

Exemplo:

ESTADOTEXTO
Servidor A: CPU 90%, RAM 80%
Servidor B: CPU 35%, RAM 40%
Servidor C: CPU 60%, RAM 50%

Nova requisição → Servidor B

É uma decisão mais inteligente, mas também exige mais infraestrutura. Normalmente existe um agente ou mecanismo de monitoramento informando ao load balancer o estado de cada máquina.

SEÇÃO 04

Health checks

Health check não é exatamente um algoritmo de distribuição, mas trabalha junto com ele.

O load balancer testa periodicamente algo como:

HEALTH CHECKHTTP
GET /health

Servidor saudável:

SAUDÁVELJSON
{
  "status": "ok"
}

Servidor problemático:

PROBLEMATEXTO
timeout
erro 500
conexão recusada
Health checks removendo temporariamente um servidor problemático da distribuição de tráfego.
HEALTH CHECKS · REMOVE SERVIDORES COM PROBLEMA

Se um servidor estiver com problema, ele é removido temporariamente da distribuição:

DISTRIBUIÇÃOTEXTO
Servidor A: saudável
Servidor B: fora do ar
Servidor C: saudável

Tráfego → somente A e C

SEÇÃO 05

Qual escolher?

Para servidores iguais e uma aplicação simples:

ESCOLHATEXTO
Round Robin

Para servidores com capacidades diferentes:

ESCOLHATEXTO
Weighted Round Robin

Para conexões longas, como WebSocket:

ESCOLHATEXTO
Least Connections

Para servidores diferentes e conexões longas:

ESCOLHATEXTO
Weighted Least Connections

Para otimizar velocidade percebida:

ESCOLHATEXTO
Weighted Response Time

Para infraestrutura grande e altamente monitorada:

ESCOLHATEXTO
Resource-Based

Para manter o mesmo usuário no mesmo servidor:

ESCOLHATEXTO
IP Hash
Guia de escolha para algoritmos de load balancer conforme servidores iguais, capacidades diferentes, conexões longas, resposta rápida, recursos monitorados ou sessão fixa.
GUIA · QUAL ALGORITMO USAR

Na prática, uma escolha comum e equilibrada é:

EQUILÍBRIOTEXTO
Least Connections + health checks

E, quando os servidores têm capacidades diferentes:

EQUILÍBRIOTEXTO
Weighted Least Connections + health checks

SEÇÃO 06

Ideia central

A ideia central é:

RESUMOTEXTO
Round Robin → distribui por ordem
Least Connections → procura quem está menos ocupado
Response Time → procura quem está respondendo mais rápido
Resource-Based → procura quem tem mais recursos disponíveis
IP Hash → mantém o cliente associado a um servidor

FIM · OBRIGADO POR LER

Quer entender a peça que fica na frente dos servidores?

O artigo sobre Reverse Proxy x Load Balancer explica a diferença entre encaminhar, proteger e distribuir tráfego.

LER REVERSE PROXY VOLTAR AOS CONTEÚDOS