A API REST do nosso aplicativo é veiculada pelo Gunicorn ( não atrás do Nginx) em execução nas instâncias do AWS EC2 com uma configuração típica de escalonamento automático / balanceamento de carga. O tempo limite inativo do balanceador de carga é de 60 segundos e o tempo limite de manutenção do Gunicorn é de 2 segundos. Temos visto 504 Gateway Timeout
respostas esporádicas dessa configuração. De acordo com os documentos da Amazon , isso pode ocorrer porque o tempo limite de manutenção do servidor é menor que a configuração de tempo limite inativo do balanceador de carga:
Causa 2: Instâncias registradas que fecham a conexão com o Elastic Load Balancing.
Solução 2: ative as configurações de manutenção de funcionamento em suas instâncias do EC2 e defina o tempo limite de manutenção de funcionamento como maior ou igual às configurações de tempo limite de inatividade do seu balanceador de carga.
Com o Nginx, o padrão keepalive_timeout
é 75 segundos, o que aparentemente funciona bem com as configurações padrão do ELB. No entanto, os documentos do Gunicorn recomendam uma keepalive
configuração no intervalo de 1 a 5 segundos.
Faz sentido aumentar a vida útil do Gunicorn para 75 segundos ou existe uma boa razão para mantê-lo abaixo de 5 segundos, mesmo que não esteja usando um proxy reverso na frente dele?