Я работаю над системой на основе Python, чтобы ставить в очередь многолетние задачи для рабочих.Устойчивые длительные задачи в сельдерей
Задачи берутся из внешней службы, которая генерирует «токен», но как только они создаются на основе этого токена, они должны работать непрерывно и останавливаться только при явном удалении кода.
Задача запускает WebSocket и включает в себя петли. Если разъем закрыт, он снова открывает его. В принципе, задача не должна заключаться.
Мои цели в проектировании это решения являются:
- При грациозно перезапуском работника (например, для загрузки нового кода), задача должна быть повторно добавлена в очередь, и взял какой-то рабочий.
- То же самое должно произойти, когда происходит несравнимое завершение работы.
- 2 работникам не следует работать с одним и тем же токеном.
- Другие процессы могут создавать больше задач, которые должны быть направлены на одного и того же работника, который обрабатывает определенный токен. Это будет разрешено путем отправки этих задач в очередь с именем после токена, которую работник должен начать слушать после запуска задачи маркера. Я перечисляю это требование как объяснение того, почему здесь требуется даже механизм задач.
- Независимые серверы, быстрая перезагрузка кода и т. Д. - Минимальное время простоя для каждой задачи.
Вся наша серверная сторона - это Python, и выглядит так: Celery - лучшая платформа для этого. Мы используем правильную технологию здесь? Любые другие архитектурные решения, которые мы должны рассмотреть?
Благодарим за помощь!
Я использую на 'acks_late = True, track_started = True' в задаче process_token. И у меня будут гарантии на уровне приложений, чтобы убедиться, что на одном и том же токене не будет двух задач. – yulkes
С помощью acks_late и track_started я добираюсь до точки, где задача process_token достигает состояния «сбой», с причиной «WorkerLostError» («Работник вышел преждевременно: сигнал 15 (SIGTERM).»,) \t 'Это не так уж плохо, на самом деле, потому что он все еще находится в очереди. Мне не нужен другой рабочий, чтобы забрать его. – yulkes