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.