L'API REST de notre application est servie par Gunicorn ( pas derrière Nginx) fonctionnant sur des instances AWS EC2 avec une configuration typique de mise à l'échelle automatique / équilibrage de charge. Le délai d'inactivité de l'équilibreur de charge est de 60 secondes et le délai de maintien en vie de Gunicorn est de 2 secondes. Nous avons vu des 504 Gateway Timeout
réponses sporadiques de cette configuration. Selon Amazon docs , cela peut être dû au fait que le délai d'expiration du serveur est inférieur au paramètre de délai d'inactivité de l'équilibreur de charge:
Cause 2: instances enregistrées fermant la connexion à Elastic Load Balancing.
Solution 2: activez les paramètres de conservation sur vos instances EC2 et définissez le délai de conservation sur supérieur ou égal aux paramètres de délai d'inactivité de votre équilibreur de charge.
Avec Nginx, la valeur par défaut keepalive_timeout
est de 75 secondes, ce qui semble bien fonctionner avec les paramètres par défaut ELB. Cependant, les documents Gunicorn recommandent un keepalive
paramètre dans la plage de 1 à 5 secondes.
Est-il judicieux de ramener la durée de vie de Gunicorn à 75 secondes, ou y a-t-il une bonne raison de la maintenir en dessous de 5 secondes même si nous n'utilisons pas de proxy inverse devant elle?
la source