Algoritmos de load balancing: Round Robin vs Least Connections

1. Introdução ao balanceamento de carga

O balanceamento de carga (load balancing) é uma técnica fundamental em sistemas distribuídos que distribui o tráfego de rede entre múltiplos servidores. Seu objetivo principal é garantir alta disponibilidade, escalabilidade e desempenho consistente, evitando que um único servidor se torne um gargalo. Em arquiteturas modernas — como servidores web, APIs RESTful e malhas de microsserviços — o balanceador de carga atua como um ponto central de entrada, encaminhando requisições de acordo com algoritmos específicos.

A escolha do algoritmo de balanceamento impacta diretamente a eficiência do sistema. Dois dos algoritmos mais amplamente adotados são o Round Robin e o Least Connections. Cada um possui características distintas que os tornam adequados para cenários diferentes. Compreender suas diferenças, vantagens e limitações é essencial para projetar sistemas robustos e responsivos.

2. Algoritmo Round Robin: simplicidade e previsibilidade

O Round Robin é um dos algoritmos mais antigos e simples de balanceamento de carga. Seu funcionamento é cíclico: as requisições são distribuídas sequencialmente entre os servidores disponíveis, na ordem de uma lista circular. Quando o último servidor é alcançado, o ciclo recomeça no primeiro.

Exemplo de fluxo com 3 servidores (S1, S2, S3):
- Requisição 1 → S1
- Requisição 2 → S2
- Requisição 3 → S3
- Requisição 4 → S1
- Requisição 5 → S2
- ...

Vantagens:
- Implementação leve: não requer monitoramento de estado ou métricas dos servidores.
- Overhead mínimo: decisões são tomadas em O(1), sem necessidade de consultas a bancos de dados ou caches.
- Justiça temporal: em cargas homogêneas, cada servidor recebe aproximadamente o mesmo número de requisições.

Limitações:
- Ignora carga real: servidores podem estar sobrecarregados mesmo recebendo o mesmo número de requisições que outros.
- Desconsidera capacidade: servidores com hardware inferior podem falhar sob a mesma carga que servidores potentes.
- Latência variável: requisições longas podem se acumular em um servidor enquanto outros ficam ociosos.

3. Algoritmo Least Connections: adaptabilidade dinâmica

O Least Connections adota uma abordagem mais inteligente: a cada nova requisição, o balanceador seleciona o servidor com o menor número de conexões ativas no momento. Isso permite uma distribuição mais equitativa da carga real, especialmente quando as requisições têm durações variáveis.

Exemplo de fluxo com 3 servidores (S1, S2, S3) e conexões ativas:
- S1: 5 conexões ativas
- S2: 2 conexões ativas
- S3: 8 conexões ativas
- Nova requisição → S2 (menos conexões)

Vantagens:
- Melhor resposta a picos de carga: servidores que processam requisições rapidamente recebem mais tráfego, enquanto servidores lentos são aliviados.
- Heterogeneidade: servidores com diferentes capacidades são utilizados de forma mais eficiente.
- Sessões longas: ideal para aplicações com tempo de resposta variável (ex.: streaming, upload de arquivos).

Desafios:
- Monitoramento constante: o balanceador precisa rastrear o estado de cada servidor, o que adiciona overhead.
- Possível inconsistência: em sistemas com alta taxa de conexões simultâneas, a contagem pode se tornar imprecisa.
- Sobrecarga de estado: em ambientes com muitos servidores, o gerenciamento de estado pode consumir recursos significativos.

4. Comparação prática entre Round Robin e Least Connections

A escolha entre Round Robin e Least Connections depende do perfil de tráfego e da infraestrutura do sistema.

Característica Round Robin Least Connections
Cargas uniformes Excelente: distribuição justa e previsível Bom, mas com overhead desnecessário
Cargas variáveis Ruim: pode sobrecarregar servidores Excelente: adapta-se dinamicamente
Servidores heterogêneos Ruim: ignora diferenças de capacidade Bom: ajusta-se naturalmente
Sessões longas Ruim: acúmulo de conexões Excelente: distribui por conexões ativas
Overhead Mínimo Moderado (monitoramento de estado)
Complexidade Baixa Média

Cenário de destaque para Round Robin:
- Servidores com hardware idêntico.
- Requisições curtas e de duração similar (ex.: consultas a APIs de cache).
- Tráfego previsível e uniforme.

Cenário de destaque para Least Connections:
- Servidores com diferentes capacidades (ex.: instâncias EC2 de tipos variados).
- Aplicações com sessões longas (ex.: WebSockets, streaming de vídeo).
- Picos de carga imprevisíveis.

5. Implementação e configuração em balanceadores comuns

Nginx — Round Robin (comportamento padrão)

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

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

Nginx — Least Connections

http {
    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

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

HAProxy — Round Robin (comportamento padrão)

frontend web
    bind *:80
    default_backend servers

backend servers
    balance roundrobin
    server srv1 192.168.1.10:80 check
    server srv2 192.168.1.11:80 check
    server srv3 192.168.1.12:80 check

HAProxy — Least Connections

frontend web
    bind *:80
    default_backend servers

backend servers
    balance leastconn
    server srv1 192.168.1.10:80 check
    server srv2 192.168.1.11:80 check
    server srv3 192.168.1.12:80 check

6. Variações e extensões dos algoritmos

Weighted Round Robin

Adiciona pesos aos servidores para refletir sua capacidade. Um servidor com peso 3 recebe três vezes mais requisições que um com peso 1.

upstream backend {
    server backend1.example.com weight=3;
    server backend2.example.com weight=1;
    server backend3.example.com weight=2;
}

Weighted Least Connections

Combina pesos com o número de conexões ativas. A decisão considera tanto a capacidade do servidor (peso) quanto sua carga atual (conexões).

backend servers
    balance leastconn
    server srv1 192.168.1.10:80 weight=3 check
    server srv2 192.168.1.11:80 weight=1 check
    server srv3 192.168.1.12:80 weight=2 check

Algoritmos híbridos

Soluções como o Least Time (HAProxy) combinam conexões ativas com tempo de resposta médio, oferecendo ainda mais precisão. Em ambientes de microsserviços, algoritmos como Power of Two Choices (usado em sistemas como Envoy) escolhem entre dois servidores aleatórios o que tem menos carga, equilibrando simplicidade e adaptabilidade.

7. Escolha do algoritmo ideal para seu sistema

A decisão entre Round Robin e Least Connections deve considerar:

  1. Perfil de tráfego: requisições curtas e uniformes favorecem Round Robin; cargas variáveis ou sessões longas favorecem Least Connections.
  2. Recursos dos servidores: se os servidores são heterogêneos, Least Connections (ou sua versão ponderada) é mais adequado.
  3. Tempo de resposta: aplicações com latência variável se beneficiam da adaptabilidade do Least Connections.
  4. Overhead de monitoramento: em sistemas com dezenas de servidores, o custo de rastrear conexões pode ser justificado pelos ganhos de desempenho.

Recomendações práticas:
- Para sistemas de alta performance com hardware homogêneo e tráfego previsível, Round Robin é suficiente e eficiente.
- Para ambientes de produção com picos de carga e servidores variados, Least Connections ou Weighted Least Connections oferecem melhor resiliência.
- Testes de carga são essenciais: simule o tráfego real e meça a latência média, taxa de erros e utilização dos servidores antes de decidir.

Em última análise, não existe um algoritmo universalmente superior. A escolha correta depende do equilíbrio entre simplicidade de implementação e capacidade de adaptação às condições dinâmicas do sistema.

Referências