Поскольку Python/Django/Celery основывал инструмент развертывания, у нас есть следующая установка:
- Мы в настоящее время используем установку Сельдерея по умолчанию. (Один queue+exchange назвал "сельдерей".)
- Каждая Задача на очереди представляет операцию развертывания.
- Каждая задача для среды заканчивается фазой синхронизации, которая потенциально берет (очень) долго.
Следующие спецификации должны быть выполнены:
- Параллелизм: задачи для нескольких сред должны быть выполнены одновременно.
- Блокировка: может быть самое большее одна задача, работающая за каждой средой одновременно (т.е. блокировка сред).
- Оптимизация пропускной способности: Когда существует несколько задач для единой среды, их синхронизирующие фазы могут быть объединены для оптимизации. Таким образом, если задача подходит к своему окончанию, она должна проверить, существуют ли новые задачи, ожидающие в очереди этой среды и, если так, пропускают ее синхронизирующую фазу.
Что предпочтительный путь состоит в том, чтобы реализовать это?
Некоторые мысли:
- Я сказал бы, что мы должны создать несколько очередей: один для каждой среды, и имеют рабочих сельдерея N, обрабатывающих единственную очередь исключительно, каждого. (Это решило бы спецификацию 1+2.)
Но как мы заставляем несколько рабочих сельдерея слушать различные очереди исключительно?
- Существует ли очевидный способ знания, что существует больше задач, ожидающих в очереди среды?
задан nvie 6 May 2010 в 14:33
поделиться