Тайм-аут шлюза 504 для любых запросов к Nginx с большим количеством свободных ресурсов - PullRequest
0 голосов
/ 09 мая 2018

Мы поддерживали проект внутри компании, который имеет платформу для веб-приложений и мобильных приложений. Бэкэнд проекта разработан в Django 1.9 (Python 3.4) и развернут в AWS.

Серверный стек состоит из Nginx, Gunicorn, Django и PostgreSQL. Мы используем Redis-сервер кеша для обслуживания ресурсоемких сложных запросов. Наши ресурсы AWS включают в себя:

  1. t1.medium EC2 (2 ядра, 4 ГБ ОЗУ)
  2. PostgreSQL RDS с одной дополнительной репликой для чтения.

Прямо сейчас Gunicorn настроен на создание 5 рабочих (следуя правилу 2 * n + 1). В зависимости от загрузки, около 20-30 мобильных пользователей делают запросы каждую минуту, а 5-10 пользователей проверяют веб-панель каждый час. Так что я бы сказал, не очень большая нагрузка.

Теперь эта настройка работает нормально в течение 80% дней. Но когда что-то идет не так (например, мы обнаруживаем ошибку в работающей системе, и нам приходится отключать сервер для обслуживания на несколько часов. Между тем, мобильные приложения имеют очередь запросов, готовую в своем приложении. когда мы запускаем бэкэнд, многие пользователи одновременно обращаются к системе.), сервер перестает вести себя нормально и начинает отвечать с ошибкой тайм-аута шлюза 504.

Удивительно, но каждый раз, когда это происходило, мы обнаруживали, что ресурсы сервера (ЦП, память) свободны на 70-80%, а пул соединений в базах данных в основном свободен.

Есть идеи, где проблема? Как отлаживать? Если вы уже сталкивались с подобной проблемой, пожалуйста, поделитесь исправлением.

Спасибо,

...