Взаимодействие с текущей задачей сельдерея
У нас есть распределенная архитектура на основе rabbitMQ
и Celery
.
Мы можем запускать параллельно несколько задач без каких-либо проблем. Масштабируемость хороша.
Теперь нам нужно дистанционно управлять задачей: ПАУЗА, ВОЗОБНОВИТЬ, ОТМЕНА.
Единственное решение, которое мы нашли, - сделать в задаче Celery вызовом RPC другой задаче, которая отвечает команде после запроса БД. Задача Celery и задача RPC находятся не на одном компьютере, и только задача RPC имеет доступ к БД.
Есть ли у вас какие-либо советы по его улучшению и легкому взаимодействию с текущей задачей?
Спасибо вам
EDIT:
На самом деле мы хотели бы сделать что-то вроде на картинке ниже. Легко выполнить конфигурацию Blue
или Orange
, но мы не знаем, как делать оба одновременно.
Рабочие подписываются на общий Jobs queue
, и каждый рабочий имеет свой Admin queue
, объявленный на обмене.
EDIT:
ЕСЛИ это невозможно с помощью Celery
, я открыт для решения с другими фреймами, например python-rq
.
Ответы
Ответ 1
Он выглядит как Control Bus pattern
.
Для лучшей масштабируемости и для сокращения вызова RPC я рекомендую обратить вспять логику. Команда PAUSE, RESUME, CANCEL
нажимает на задачи Сельдерея через шину управления, когда происходит изменение состояния. Приложение Celery сохранит текущее состояние приложения Celery в магазине (может быть в памяти, в файловой системе..). Если состояния задачи должны храниться даже после остановки/запуска приложения, это потребует больше работы, чтобы синхронизировать оба приложения (например, синхронизация при запуске).