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

10

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 ajuste automático de balanceamento / carga. O tempo limite ocioso do balanceador de carga é de 60 segundos e o tempo limite de atividade do Gunicorn é de 2 segundos. Temos visto respostas 504 Gateway Timeout esporádicas dessa configuração. De acordo com os documentos da Amazon , isso pode acontecer porque o servidor continua -alive timeout é menor que a configuração de tempo limite ocioso do balanceador de carga:

Cause 2: Registered instances closing the connection to Elastic Load Balancing.

Solution 2: Enable keep-alive settings on your EC2 instances and set the keep-alive timeout to greater than or equal to the idle timeout settings of your load balancer.

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 Gunicorn recomendam uma configuração de keepalive no intervalo de 1 a 5 segundos.

Faz sentido bater o keepalive do Gunicorn em 75 segundos, ou há uma boa razão para mantê-lo abaixo de 5 segundos, mesmo que não estejamos usando um proxy reverso na frente dele?

    
por handsofaten 05.06.2016 / 04:37

1 resposta

12

Você quase certamente desejará aumentar o temporizador de keepalive de acordo com a recomendação do ELB, pois o ELB reutiliza as conexões. Ele os manterá até que o tempo limite expire e, se outro pedido chegar ao ELB, ele geralmente usará uma das conexões já abertas para enviá-lo para 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 quando executado no modo HTTP.

    
por 05.06.2016 / 06:49