Como posso distribuir clientes para servidores uniformemente com hash_ip no Nginx como loadbalancer?

1

Eu sei que o Nginx pode usar o hash_ip para vincular clientes específicos a um servidor.

A minha pergunta é quando o Nginx está fazendo hash com o IP do cliente, ele distribui os clientes para os servidores uniformemente, independentemente de qual IP do cliente é usado ou pode ser dependendo de qual IP é usado?

Se ele tem a dependência do IP do cliente, como posso distribuir clientes para o servidor uniformemente?

Além disso, existe alguma maneira de verificar a tabela de hash que o Nginx cria com hash_ip?

    
por asleea 12.11.2015 / 06:47

2 respostas

2

Você está praticamente garantido para ter uma distribuição desigual, porque os IPs do cliente não estão indo para o hash perfeitamente. Além disso, a taxa de solicitações desses IPs de cliente também não será perfeitamente balanceada. No entanto, com um número suficientemente grande de IPs de cliente distintos, o desnível será relativamente pequeno e pode ser ignorado para fins práticos.

Se você precisa de absoluta uniformidade de distribuição, você está em um mundo de dor. A distribuição round-robin lhe dará a igualdade de pedidos count , no entanto, é um sistema incrivelmente raro em que todas as solicitações levam exatamente a mesma quantidade de tempo para processar, então a carga em um conjunto de backends alocados em round-robin não será perfeito. É possível melhorar um pouco a situação de carga, em função de tempos de serviço imprevisíveis e variados, através do uso de um algoritmo de roteamento de menor conexão, em que o balanceador de carga envia um trabalho para o backend com o menor número de "em andamento". empregos, no pressuposto de que cada conexão concorrente faz uma contribuição aproximadamente igual à carga instantânea do sistema.

Para melhorar ainda mais a situação, é necessário usar um dos mais complicados algoritmos de agendamento para tentar e até mesmo a carga, mas sem o conhecimento perfeito a priori dos recursos necessários para atender a todas as solicitações, você está fadado a aproximações. Note que, até onde eu sei, não existem algoritmos de escalonamento avançados incorporados ao nginx.

Se o balanceamento da carga de back-end for importante, a melhor coisa a fazer é adicionar algum tipo de "feedback" ao sistema, para que o balanceador esteja ciente do estado atual dos back-ends. Para fazer isso corretamente envolve algum grau de teoria de controle básico , devido à defasagem entre os trabalhos sendo roteados para um back-end e que o trabalho é impacto na carga do sistema. Sem esse controle, você acabará arremessando o seu sistema em poeira.

Sim, este é um problema complicado. É por isso que todo mundo apenas configura seu balanceador de carga para round-robin ou menos conexões, armazena suas sessões e cache centralmente, e pula para o pub.

    
por 12.11.2015 / 08:08
0

Não tenho certeza se isso ainda funciona, mas me deparei com isso:

link

    
por 26.05.2016 / 22:20