Depende do que é o protocolo e o caso de uso para balancear. Para qualquer coisa em que a quantidade de conexões esteja correlacionada com o carregamento / uso, é melhor usar leastconn
. Devido ao modo como redes e aplicativos funcionam, é sempre verdade e você é melhor usar leastconn
por padrão.
Áreas de trabalho remotas RDP / X11 / Jump Hosts
Por exemplo, uma empresa possui um pool de desktops remotos aos quais os funcionários se conectam. Você gostaria que os funcionários fossem distribuídos de maneira uniforme nos desktops.
O número de conexões ativas nesse caso de uso é aproximadamente "quantos funcionários estão usando essa área de trabalho agora". O host com menos conexões tem menos funcionários usando e é provavelmente o menos carregado. Use "leastconn" nessas circunstâncias, ele distribui a carga uniformemente com a quantidade de usuários.
Um balanceador de carga ideal deve estar ciente da carga da área de trabalho remota. Quantos usuários? Quantos aplicativos? Quanta memória e CPU consumida? Existem soluções comerciais dedicadas a desktops remotos (Microsoft / Citrix / etc ...), elas normalmente medem essas métricas para espalhar o uso muito bem. O HAProxy é um balanceador de carga de rede simples e não pode ser melhor do que contar as conexões com leastconn
.
HTTP / HTTPS
Com HTTP, uma conexão ativa significa que o servidor está ocupado processando uma solicitação. Conexões são diretamente proporcionais à carga. Você deseja selecionar o servidor com a menor quantidade de conexões ativas (solicitações em andamento). Use leastconn
para o tráfego HTTP (S).
Imagine um cenário com dois servidores HTTP, em que um servidor é mais lento para processar solicitações (talvez esteja sobrecarregado, talvez tenha hardware mais antigo).
roundrobin
distribuirá pedidos pela metade entre os dois servidores. É muito ineficiente, o servidor mais rápido deve levar mais. Pior ainda, o servidor mais lento pode ser sobrecarregado, ele ficará ainda mais lento à medida que mais solicitações forem recebidas e poderá começar a descartar solicitações a qualquer momento. Você não quer isso.
leastconn
detectaria que os servidores são desiguais. O servidor mais lento mantém as conexões por mais tempo, ele tem uma contagem de conexões mais alta. leastconn
considera isso e prefere o outro servidor.
Na minha experiência, incluindo funções em que eu estava fazendo exclusivamente testes de desempenho para sites moderados a grandes. leastconn
pode ser 300% tão eficiente quanto roundrobin
para HTTP (S). roundrobin
não distribui a conexão de forma justa e causará instabilidade em alta carga.
Solicitação de DNS
(Vamos ignorar que o HAProxy não suporta UDP e o UDP tem menos conexão).
Um último exemplo. DNS é um protocolo simples. Os clientes enviam uma única mensagem UDP para solicitar um domínio e o servidor DNS responde em uma única mensagem.
Nesse caso, não há realmente uma conexão. Mesmo se houvesse, seria instantaneamente fechado (teoricamente).
Não faria sentido contar as conexões nessas circunstâncias, não é ideal para leastconn
. Um simples roundrobin
pode distribuir mensagens.
Um mal-entendido comum
As pessoas às vezes acreditam que não devem usar leastconn
para conexões de curta duração (semelhante ao último exemplo). Até mesmo a documentação do HAProxy é enganosa sobre isso.
leastconn
Use of this algorithm is recommended where very long sessions are
expected, such as LDAP, SQL, TSE, etc... but is not very well
suited for protocols using short sessions such as HTTP.
[misleading advice, should ignore it]
No mundo real, short connections
não é uma coisa.
Os aplicativos são criados sobre o TCP. As mensagens são entregues e geralmente processadas em ordem. Quando um servidor está lento ou sobrecarregado, as conexões "curtas" se tornam mais longas. Se houver (mais) conexões, provavelmente haverá algum trabalho (mais) sendo feito. A contagem de conexões e a duração da conexão variam e têm significado.
Pense em um servidor HTTP básico. Alguns ativos demoram alguns milissegundos, algumas chamadas de API demoram alguns segundos, uma página pode levar algum tempo para ser carregada com qualquer quantidade de solicitações dentro dele, etc. As solicitações não são de curta duração, acompanham o que está sendo processado em qual servidor. leastconn
entende a atividade em andamento e ajusta a distribuição, exatamente o que você quer de um balanceador de carga.