Rob-d menciona que os balanceadores de carga devem executar verificações de integridade nos servidores de back-end para garantir que eles sejam saudáveis e possam atender às solicitações. Isso é absolutamente verdade e acho que é o que permitiria que você fizesse o que queria (verificando outras métricas e fazendo o LB fazer escolhas de roteamento com base nelas).
Supondo que você seja HTTP de balanceamento de carga, a maioria dos balanceadores de carga executará um HTTP GET
ou HEAD
para uma determinada página para verificar seu status como um back-end viável. Esta página pode ser uma imagem estática, um arquivo CSS ou até mesmo uma página HTML.
Mas também pode ser uma página PHP / ASP / Java / Python. Alguns podem argumentar que deve ser até mesmo uma página que pode executar algum tipo de verificação de integridade na pilha do seu aplicativo (SQL, NoSQL, serviços auxiliares, etc.).
Não há motivo para você não poder escrever um script que implemente seu algoritmo complexo de balanceamento de carga e simplesmente retorne um HTTP/1.1 200 OK
ou HTTP/1.1 503 Service Unavailable
dependendo se o servidor pode ou não atender às solicitações.
Eu conheço pelo menos um load-balancer que pode executar um agent-check
secundário, que é capaz de retornar mais detalhes do que simplesmente UP / DOWN, permitindo que o peso de um servidor seja dinamicamente alterado em intervalos configurados baseado em qualquer coisa agente decide. Eu acho que isso seria exatamente o que você está procurando.