Os algoritmos de balanceamento de carga mais comuns para balanceadores de carga HTTP são IMHO:
-
Round Robin (às vezes chamado de "Next in Loop").
-
Rodada ponderada Robin - como Round Robin, mas alguns servidores recebem uma parcela maior do tráfego geral.
-
Aleatório .
Hash -
IP de origem . As conexões são distribuídas para os servidores de backend com base no endereço IP de origem. Se um nó da Web falhar e for retirado de serviço, a distribuição será alterada. Desde que todos os servidores estejam em execução, um determinado endereço IP do cliente irá sempre para o mesmo servidor da Web.
-
URL hash. Muito parecido com o hash do IP de origem, exceto que o hash é feito na URL da solicitação. Útil quando o balanceamento de carga é feito na frente de caches proxy, já que as solicitações para um determinado objeto sempre vão para apenas um cache de back-end. Isso evita a duplicação do cache, tendo o mesmo objeto armazenado em vários / todos os caches e aumentando a capacidade efetiva dos caches de back-end.
-
Menos conexões , menos conexões ponderadas. O balanceador de carga monitora o número de conexões abertas para cada servidor e envia para o servidor menos ocupado.
-
Menos tráfego , menos tráfego ponderado. O balanceador de carga monitora a taxa de bits de cada servidor e envia para o servidor que tem menos tráfego de saída.
-
Menos latência . O Perlbal faz uma rápida requisição HTTP OPTIONS para servidores back-end, e envia a requisição para o primeiro servidor responder.
Indiscutivelmente, os algoritmos acima não são algoritmos em um sentido estrito da ciência da computação, são descrições mais gerais de abordagens comuns. Aqui está um pequeno artigo da Cisco que descreve alguns dos algoritmos que eles usam com mais detalhes. . As implementações de outros fornecedores serão ligeiramente diferentes.
Existem casos extremos em que os algoritmos mais exóticos são úteis - por exemplo, a transmissão de vídeo pode ser bem "menos tráfego". Mas, em geral, para a maioria das aplicações web e sites, a melhor solução é:
-
Um sistema de sessão compartilhado / distribuído , para que qualquer webnode possa responder a qualquer solicitação do usuário (ou seja, os dados da sessão do usuário, como cookies de sessão, estão igualmente disponíveis para todos os servidores).
-
Balanceamento de carga usando a distribuição Round Robin (opcionalmente Weighted Round Robin) ou Random . Round Robin e Random são algoritmos simples e resilientes sem nenhum problema de "hot spot", ou seja, a distribuição de carga para backends permanece justa em todas as situações.