Configuração de keepalive para Gunicorn atrás do ELB sem Nginx

15

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 Timeoutrespostas 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 keepaliveconfiguraçã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?

handsofaten
fonte

Respostas:

16

Você quase certamente desejará aumentar o cronômetro de keepalive de acordo com a recomendação ELB, porque o ELB reutiliza conexões. Ele os manterá até o tempo limite expirar e se outra solicitação chegar ao ELB, muitas vezes usará uma das conexões já abertas para enviá-lo a você.

504 Gateway Timeout é um erro estranho para essa condição, mas parece que é o que o ELB retorna quando a reutilização de uma conexão coincide com o fechamento prematuro do back-end.

A recomendação de 5 segundos pode fazer sentido se os navegadores estiverem se comunicando diretamente com o back-end, mas esse não é o caso do ELB, que é um proxy reverso adequado ao executar no modo HTTP.

Michael - sqlbot
fonte
Obrigado, é isso que eu suspeitava. Vou tentar essa mudança esta semana e marcar a sua resposta correta, se tudo correr bem :)
handsofaten
Mesclamos a mudança há cerca de uma semana e os anos 504 se tornaram muito menos comuns (algumas vezes por semana, em vez de algumas centenas de vezes por semana).
handsofaten