Que tipo de algoritmo de balanceamento de carga está lá?

27

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

Obrigado Paul

    
por Paul Sheldrake 12.02.2010 / 16:34

3 respostas

28

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.

por 20.02.2010 / 11:50
4

A pergunta está incompleta:

Balanceamento de carga O QUE?

CPUs podem levar saturação; a perspectiva usual é para trás - empurrando um recurso em vez de puxá-lo.

Os discos têm muitos tipos diferentes de cargas para balancear, 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 na taxa de transferência total ...

As pessoas podem ter balanceamento de carga com base na capacidade individual; alguns multi-tarefa bem, outros não e então há qualidade vs quantidade. Você pode otimizar seus recursos humanos com base em muitos fatores e com diferentes pesos atribuídos a diferentes atributos.

O acima está longe de ser exaustivo; O ponto é que diferentes recursos levam tipos completamente diferentes de balanceamento de carga. De seus atributos e capacidades disponíveis, você deve indicar QUAIS têm interesse em balancear.

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

RT

    
por 12.02.2010 / 17:17
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, já que 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 de LVS - você definitivamente encontrará informações sobre implementações de agendamento de balanceamento de carga.

    
por 13.02.2010 / 23:00