Как к расположению структура очереди/рабочего для поддержки больших задач для нескольких сред?

Поскольку Python/Django/Celery основывал инструмент развертывания, у нас есть следующая установка:

  1. Мы в настоящее время используем установку Сельдерея по умолчанию. (Один queue+exchange назвал "сельдерей".)
  2. Каждая Задача на очереди представляет операцию развертывания.
  3. Каждая задача для среды заканчивается фазой синхронизации, которая потенциально берет (очень) долго.

Следующие спецификации должны быть выполнены:

  1. Параллелизм: задачи для нескольких сред должны быть выполнены одновременно.
  2. Блокировка: может быть самое большее одна задача, работающая за каждой средой одновременно (т.е. блокировка сред).
  3. Оптимизация пропускной способности: Когда существует несколько задач для единой среды, их синхронизирующие фазы могут быть объединены для оптимизации. Таким образом, если задача подходит к своему окончанию, она должна проверить, существуют ли новые задачи, ожидающие в очереди этой среды и, если так, пропускают ее синхронизирующую фазу.

Что предпочтительный путь состоит в том, чтобы реализовать это?

Некоторые мысли:

  • Я сказал бы, что мы должны создать несколько очередей: один для каждой среды, и имеют рабочих сельдерея N, обрабатывающих единственную очередь исключительно, каждого. (Это решило бы спецификацию 1+2.)
    Но как мы заставляем несколько рабочих сельдерея слушать различные очереди исключительно?
  • Существует ли очевидный способ знания, что существует больше задач, ожидающих в очереди среды?
12
задан nvie 6 May 2010 в 14:33
поделиться