Gostaria de saber se haveria vantagem ou não em saber o loadavg de cada servidor backend e pedir ao HAProxy para enviar a próxima requisição para o computador com o menor loadavg.
No entanto, não vi nada que oferecesse tal capacidade no HAProxy. Talvez não esteja disponível?
Encontrei esta postagem que mostra uma definição de front-end com um use_backend
comando, mas estou pensando que o mapa será carregado uma vez e armazenado em cache durante toda a execução do HAProxy. Caso contrário, alterar dinamicamente o mapa classificando os itens por loadavg não faria diferença ...
frontend ft_items
[...]
use_backend %[path,lower,map(/etc/haproxy/items.map,bk_default)]
Não está claro para mim que roundrobin seria bom o suficiente para meu aplicativo porque algumas solicitações levam 50ms (imagens, CSS, etc.) e outras podem levar uns bons 2s (relatórios grandes). Portanto, verificar o loadavg de um computador parece mais adequado para o projeto deste aplicativo.
Seria melhor dividir os mapas HAProxy para que solicitações rápidas de recursos estáticos passem por um mapa round robin e solicitações mais lentas por meio de um mapa RR diferente.
Você pode usar o mesmo ou diferentes pools de back-end para as solicitações, a ideia é que, em média, todos os servidores estejam lidando com a mesma quantidade de solicitações rápidas e lentas. Como alternativa, você pode mapeá-los para diferentes sistemas de back-end e usar sistemas mais poderosos para o trabalho computacional intensivo dos relatórios.
Alexis,
Isso soa exatamente como o que a verificação de agente deve ser usada. Willy gentilmente adicionou o patch que usamos para o dispositivo Loadbalancer.org e abrimos o código de nosso agente de servidor baseado em Windows. As instruções, incluindo um exemplo básico de servidor Linux, estão aqui:
https://www.loadbalancer.org/blog/open-source-windows-service-for-reporting-server-load-back-to-haproxy-load-balancer-feedback-agent
O agente do Windows pode monitorar uma combinação de contagem de conexões de CPU, RAM e TCP (ou seja, para sessões RDP).
Comentários são sempre bem-vindos. Isso me lembra - seria bom se alguém implementasse algum tipo de algoritmo de tempo de resposta do servidor, então você não precisaria necessariamente de um agente baseado em servidor.