Um pouco da coluna A, um pouco da coluna B:)
Por causa do tempo de atividade, você definitivamente deveria estar usando verificações de saúde em HAProxy, independentemente de qualquer outra coisa. Se um de seus nós de back-end ficar inativo, você deseja que o HAProxy pare de enviar solicitações para ele. A falha não precisa estar em sua aplicação, pode ser hardware, rede, qualquer coisa. Isso é bem simples de configurar:
option httpchk GET /test HTTP/1.0\r\n
250 ms soa como um cheque muito frequente. Nesse ritmo, seus servidores de back-end podem gastar muito tempo apenas processando verificações de integridade. Você precisa compensar o custo das verificações de integridade em termos de sobrecarga do aplicativo versus a rapidez com que você deseja que os nós mortos sejam colocados offline.
A segunda estratégia é uma que eu usei antes. Descubra o número total de conexões simultâneas que seu aplicativo pode manipular. Em seguida, no HAProxy, divida as solicitações em velocidade lenta e rápida e aloque uma proporção do total de conexões para cada uma. Por exemplo,
frontend myfrontend
bind *:80
acl url-slow path /some-long-running-request
use_backend slow-backend if url-slow
default_backend regular-backend
backend slow-backend
...
server backend1 1.2.3.4:80 maxconn 10
backend regular-backend
...
server backend1 1.2.3.4.:80 maxconn 90
Portanto, o backend1 pode manipular 100 conexões simultâneas. Acima, alocamos 90 conexões a solicitações "regulares" e 10 conexões a solicitações lentas. Mesmo se você usar todas as suas conexões lentas, as solicitações "regulares" ainda serão processadas.
Boa sorte!