Ao configurar o Proxy HA, como você decide quais valores atribuir aos tempos limite? Eu li meia dúzia de amostras em vários blogs e todo mundo usa tempos limite diferentes e ninguém discute o porquê.
O HAProxy parece especificamente preocupado com o cliente, a conexão e o servidor, sobre os quais o HAPRoxy lança um aviso se você deixar completamente desmarcado:
While not properly invalid, you will certainly encounter various problems
with such a configuration. To fix this, please ensure that all following
timeouts are set to a non-zero value: 'client', 'connect', 'server'.
A documentação é inútil a esse respeito: sugere "um pouco acima de múltiplos de 3 segundos", mas não por que você escolheria um múltiplo de 1 vs 100 ou 42.
O RPM que estou usando (repositório Amazon Linux) define esses padrões:
timeout connect 10s
timeout client 1m
timeout server 1m
Dois dos quais são múltiplos exatos de 3 segundos, violando o único conselho oficial que eu já vi.
Se você não tem conselhos específicos de ajuste, talvez uma pergunta mais fácil seja: o que devo esperar dar errado com intervalos muito curtos ou muito longos?
Prefácio
Estive ajustando o HAProxy por um tempo e fiz muitos testes de desempenho. De 100 solicitações / s HTTP a 50.000 solicitações / s HTTP.
O primeiro conselho é ativar a página de estatísticas no HAProxy . Você precisa de monitoramento, sem exceção. Você também precisará de um ajuste fino se pretender passar de 10.000 solicitações / s.
Timeouts são um animal confuso, porque eles têm uma enorme variedade de valores possíveis, a maioria deles sem diferença observável. Ainda estou para ver algo falhar por causa de um número 5% menor ou 5% maior. 10000 vs 11000 milissegundos, quem se importa? Provavelmente não é o seu sistema.
Configuração
Não posso, em sã consciência, dar alguns números como "os melhores tempos de todos os tempos".
O que eu posso dizer são os tempos limite mais agressivos, sempre aceitáveis para o balanceamento de carga HTTP (S). Se você encontrar um valor inferior a estes, é hora de reconfigurar seu balanceador de carga.
cliente de tempo limite:
Leitura : este é o tempo máximo para receber cabeçalhos de solicitação HTTP do cliente.
Às vezes, o 3G / 4G / 56k / satélite pode ser lento. Ainda assim, eles devem poder enviar cabeçalhos HTTP em alguns segundos, NÃO 30.
Se alguém tem uma conexão tão ruim que precisa de mais de 30s para solicitar uma página (mais de 10 * 30s para solicitar as 10 imagens incorporadas / CSS / JS), acredito que seja aceitável rejeitá-lo.
servidor de tempo limite:
Ler : é o tempo máximo para receber cabeçalhos de resposta HTTP do servidor (depois de receber a solicitação completa do cliente). Basicamente, esse é o tempo de processamento dos seus servidores, antes que ele comece a enviar a resposta.
Se seu servidor é tão lento que requer mais de 30 anos para começar a dar uma resposta, acredito que seja aceitável considerá-lo morto.
Caso especial : alguns serviços RAROS que executam processamento muito pesado podem levar um minuto ou mais para dar uma resposta. Esse tempo limite pode precisar ser muito aumentado para esse uso específico. (Nota: é provável que este seja um caso de design incorreto, use uma comunicação de estilo assíncrono ou não use HTTP.)
timeout connect:
Leitura : o tempo máximo que um servidor tem para aceitar uma conexão TCP.
Os servidores estão na mesma LAN que o HAProxy, portanto deve ser rápido. Aguarde pelo menos 5 segundos, porque é o tempo que leva para que algo inesperado aconteça (um pacote TCP perdido para retransmitir, um servidor bifurcando um novo processo para receber as novas solicitações, aumentar o tráfego).
Caso especial : quando os servidores estão em uma LAN diferente ou em um link não confiável. Esse tempo limite pode precisar ser muito aumentado. (Nota: é provável que este seja um caso de arquitetura incorreta.)
verificação de tempo limite:
Ler : Ao executar uma verificação de integridade, o servidor precisa
timeout connect
aceitar a conexão etimeout check
dar a resposta.Todos os servidores devem ter uma verificação de saúde HTTP (S) configurada. Essa é a única maneira de o balanceador de carga saber se um servidor está disponível. A verificação de saúde é uma
/isalive
página simples , sempre respondendoOK
.Dê a esse tempo limite pelo menos 5 segundos, porque é o tempo que demora quando algo inesperado acontece (um pacote TCP perdido para retransmitir, um servidor bifurcando um novo processo para receber as novas solicitações, aumentar o tráfego).
História de Guerra : Muitas pessoas acreditam erroneamente que o servidor sempre pode responder a esta página simples em 3 ms. Eles definem um tempo limite agressivo (<2000ms) com failover agressivo (2 verificações com falha = servidor morto). Eu vi sites inteiros caindo por causa disso. Normalmente, há um ligeiro pico no tráfego, os servidores back-end ficam mais lentos, as verificações de saúde são adiadas ... até que de repente eles se esgotam, o HAProxy acha que TODOS os servidores morreram de uma só vez e todo o site foi desativado.
fonte