запустить Celery на том же сервере, что и django?

Я запускаю свое приложение Django в среде Elastic Beanstalk с балансировкой нагрузки. Я хочу добавить процесс демона Celery, чтобы делать следующие вещи:

  • Загружать файлы на S3 в фоновом режиме и отправлять ответ об успешном завершении моему приложению для Android
  • Отправлять SMS пользователям, чтобы уведомить их о предстоящих EMI (используя celery beat)
  • Мое приложение использует Google Cloud Vision для некоторых функций, для запуска которых требуется 10 секунд, поэтому я могу запускать их в фоновом режиме.

Теперь я хочу знать, правильно ли развертывать сельдерей на том же сервере, на котором работает Django, используя Amazon SQS? Если да, то как мне это настроить?

А если несколько серверов на Elastic Beanstalk могут вызывать дублирование задач из-за celery beat?


person Joy Lal Chattaraj    schedule 24.06.2017    source источник


Ответы (1)


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

person vZ10    schedule 24.06.2017
comment
Спасибо за ответ. Меня беспокоит celery beat, который будет предназначен для проверки записей в базе данных (экземпляр AWS RDS), относящихся к этой дате, и отправки им уведомлений на основе этого. Я чувствую, что если запущено несколько экземпляров celery beat, это может привести к дублированию уведомлений. Я использую AWS SQS для организации очереди сообщений, - person Joy Lal Chattaraj; 24.06.2017
comment
Он будет нормально работать с SQS и не будет дублировать сообщения, если вы не забудете удалить сообщения после выполнения и указать соответствующее время повторения сообщения (я не знаю, как правильно оно называется в AWS) - person vZ10; 24.06.2017