Que tipo de algoritmos de balanceamento de carga existem

32

Eu estava pesquisando diferentes algoritmos de balanceamento de carga para HTTP e encontrei 3. Random, Round Robin e Weighted Round Robin. Existem outras opções?

Obrigado Paul

Paul Sheldrake
fonte

Respostas:

33

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").

  • Round Robin ponderado - como Round Robin, mas alguns servidores recebem uma parcela maior do tráfego geral.

  • Aleatório .

  • Hash de IP de origem . As conexões são distribuídas para servidores de back-end 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. Enquanto todos os servidores estiverem executando um determinado endereço IP do cliente, eles sempre irão para o mesmo servidor da web.

  • Hash de URL . Muito parecido com o hash do IP de origem, exceto pelo hash no URL da solicitação. Útil quando o balanceamento de carga é feito na frente dos caches de proxy, pois as solicitações para um determinado objeto sempre vão para apenas um cache de back-end. Isso evita a duplicação de cache, com o mesmo objeto armazenado em vários / todos os caches, e aumenta 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 com menos tráfego de saída.

  • Menor latência . O Perlbal faz uma solicitação HTTP OPTIONS rápida para servidores de back-end e envia a solicitação ao primeiro servidor para responder.

Indiscutivelmente, os itens acima não são algoritmos no 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 nos quais algoritmos mais exóticos são úteis - por exemplo, o streaming de vídeo pode ser útil para "menos tráfego". Mas de um modo geral, para a maioria dos aplicativos e sites, a solução ideal é:

  • Um sistema de sessões compartilhadas / distribuídas , para que qualquer nó da web possa responder a qualquer solicitação do usuário (ou seja, 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 Round Robin (opcionalmente Round Round ponderado) ou distribuição aleatória . Round Robin e Random são algoritmos simples e resistentes, sem problemas de 'hot spot', ou seja, a distribuição de carga para os backends permanece justa em todas as situações.

Jesper M
fonte
5

A questão está incompleta:

Load Balance O QUE?

CPUs podem sofrer saturação; a perspectiva usual é inversa - pressionando um recurso em vez de puxá-lo.

Os discos têm muitos tipos diferentes de cargas para equilibrar, como espaço, velocidade de leitura, velocidade de gravação, taxa de transferência, etc.

As redes podem ter balanceamento de carga com base na latência ou no rendimento total ...

As pessoas podem ter carga equilibrada com base na capacidade individual; algumas bem com várias tarefas, outras não, e há qualidade versus quantidade. Você pode otimizar seus recursos humanos com base em muitos fatores e com pesos diferentes atribuídos a diferentes atributos.

O exposto acima está longe de ser exaustivo; o ponto é que recursos diferentes usam tipos completamente diferentes de balanceamento de carga. Dos atributos e capacidades disponíveis, é necessário declarar QUAIS são do interesse do balanceamento.

O que você está tentando equilibrar é o primeiro critério para criar um bom algoritmo de balanceamento. E a sugestão de que existem apenas três é ... não esclarecida. Seria digno de um doutorado fazer um trabalho adequado tentando delinear todas as maneiras pelas quais "as cargas são equilibradas".

RT

Richard T
fonte
2
você está perdendo a pergunta Richard, algoritmos são a base de qualquer método ou implementação.
Monomito
2
Desculpe monomito, não perdi nada. Abre a tua mente.
Richard T
@monomyth, @Richard está certo - A escolha do algoritmo depende do que você deseja balancear. Você pode desenvolver um algoritmo para equilibrar o uso do espaço em disco e que pode não se aplicar a outra coisa, como solicitações HTTP.
12137 Josh
@ Josh, @ Richard, os conceitos de balanceamento de carga são os mesmos. Você ainda pode usar o Round Robin para equilibrar o uso do disco, iSCSI, HTTP, CPU, qualquer coisa.
Mark Henderson
@ Farseeker Concordo, Round Robin é bastante universal. Mas não existem algoritmos de balanceamento de carga específicos para a tarefa?
21710 Josh
0

Não é uma resposta direta à sua pergunta, mas uma solução real que achamos útil. Usando o LVS e o daemon de pulso, nosso balanceamento de carga HTTP é configurado para chamar um script bash personalizado que determina a carga nos "servidores reais" por meio de uma conexão SSH simples e uma chamada para o tempo de atividade .

Em seguida, com base na média de carga dos servidores, uma ponderação é definida por servidor. Não é a abordagem mais científica, pois a média de carga não é necessariamente indicativa de conexões HTTP ou carga de CPU causada por essas conexões. No entanto, tivemos resultados surpreendentemente eficazes.

Meu 2c. YMMV.

PS: dê uma olhada no projeto LVS - você definitivamente encontrará informações sobre implementações de agendamento de balanceamento de carga.

Zayne S Halsall
fonte