тайм-аут приложения flask с балансировщиком нагрузки amazon

Я пытаюсь использовать приложение Flask за балансировщиком нагрузки Amazon, а потоки Flask продолжают тайм-аут. Похоже, что балансировщик нагрузки отправляет Connection: keep-alive заголовок, и это приводит к тому, что процесс колбы никогда не возвращается (или занимает много времени). С gunicorn впереди процессы убиты и начались новые. Мы тоже пытались использовать на uwsgi и просто exposign приложение колбу напрямую (без обертки). Все это приводит к тому, что процесс колбы просто не отвечает.

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

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

4 ответов


решение у меня сейчас через gunicorn как обертка вокруг склянки. Для worker_class Я использую eventlet с несколькими работниками. Это сочетание кажется стабильным и отзывчивым. Gunicorn также настроен для HTTPS.

Я предполагаю, что это дефект в колбе, который вызывает проблему, и это эффективный обходной путь.


вы не забыли установить session.permanent = True и app.permanent_session_lifetime?


самый простой способ-заставить все соединения убедиться, что вы используете HTTP/1.0 и не добавляя заголовок Connection: Keep-Alive ответ.

пожалуйста, заказ werkzeug.http.remove_hop_by_hop_headers().


вам нужен балансировщик нагрузки HTTP? Использование балансировщика уровня 4 может также решить вашу проблему, потому что это не мешает более высоким уровням протокола.