Настройка Keepalive для Gunicorn за ELB без Nginx

15

API REST нашего приложения обслуживается Gunicorn ( не за Nginx), работающим на экземплярах AWS EC2 с типичной настройкой автоматического масштабирования / балансировки нагрузки. Тайм-аут простоя балансировщика нагрузки составляет 60 секунд, а таймер активности Gunicorn составляет 2 секунды. Мы видели спорадические 504 Gateway Timeoutответы от этой конфигурации. Согласно Amazon Docs , это может быть связано с тем, что время ожидания активности сервера меньше, чем время ожидания простоя балансировщика нагрузки:

Причина 2: зарегистрированные экземпляры, закрывающие соединение с Elastic Load Balancing.

Решение 2. Включите настройки поддержания активности в экземплярах EC2 и установите для параметра времени ожидания значение, превышающее или равное настройкам времени простоя вашего балансировщика нагрузки.

С Nginx значение по умолчанию keepalive_timeoutсоставляет 75 секунд, что, очевидно, хорошо работает с настройками ELB по умолчанию. Тем не менее, документация Gunicorn рекомендует keepaliveустановку в диапазоне 1-5 секунд.

Имеет ли смысл увеличить поддержку активности Gunicorn до 75 секунд, или есть веская причина оставить его ниже 5 секунд, даже если перед ним не используется обратный прокси-сервер?

handsofaten
источник

Ответы:

16

Вы почти наверняка захотите увеличить таймер поддержки активности в соответствии с рекомендацией ELB, потому что ELB повторно использует соединения. Он будет удерживать их до тех пор, пока не истечет время ожидания, и если в ELB поступит другой запрос, он часто будет использовать одно из уже открытых соединений, чтобы отправить его вам.

504 Gateway Timeout Это странная ошибка для этого условия, но, похоже, именно это возвращает ELB, когда повторное использование соединения совпадает с преждевременным закрытием серверной части.

5-секундная рекомендация может иметь смысл, если браузеры напрямую взаимодействуют с бэкэндом, но это не относится к ELB, который сам по себе является правильным обратным прокси-сервером при работе в режиме HTTP.

Майкл - sqlbot
источник
Спасибо, это то, что я подозревал. Я попробую это изменение на этой неделе и
отмечу
Мы объединили изменения около недели назад, и 504 стали намного реже (пару раз в неделю вместо пары сотен раз в неделю).
рукопожатие