Как спроектировать распределение задач с ZooKeeper - PullRequest
9 голосов
/ 07 марта 2011

Я планирую написать приложение, в котором будут распределены рабочие процессы. Одним из них будет Лидер, который будет назначать задачи другим процессам. Разработка процесса выбора лидера довольно проста: каждый процесс пытается создать эфемерный узел по одному и тому же пути. Тот, кто успешен, становится лидером.

Теперь у меня вопрос, как спроектировать процесс равномерного распределения задач? Есть рецепт для этого?

Я немного подробнее расскажу о настройке среды:

Предположим, есть 10 рабочих машин, каждая из которых запускает процесс, одна из которых становится лидером. Задачи отправляются в очередь, Лидер берет их и назначает работнику. Рабочие процессы получают уведомление всякий раз, когда задание отправляется.

Ответы [ 3 ]

8 голосов
/ 17 июня 2011

Я не уверен, что понимаю ваш алгоритм выбора Лидера, но рекомендуемый способ его реализации - использовать последовательные эфемерные узлы и использовать алгоритм на http://zookeeper.apache.org/doc/r3.3.3/recipes.html#sc_leaderElection, который объясняет, как избежать эффекта «стадо».

Распределение задач может быть выполнено с простой распределенной очередью и не требует строго Лидера. Производитель ставит задачи в очередь, а потребители следят за узлом задач - триггерные часы приведут потребителя к выполнению задачи и удалению соответствующего узла. Существуют определенные граничные условия, которые необходимо учитывать при выполнении задач от неудавшихся потребителей. http://zookeeper.apache.org/doc/r3.3.3/recipes.html#sc_recipes_Queues

1 голос
/ 14 мая 2015

Я бы порекомендовал раздел Example: Master-Worker Application этой книги ZooKeeper Distributed Process Coordination http://shop.oreilly.com/product/0636920028901.do

В этом примере показано, как распределять задачи среди работников с помощью znodes и общих команд zookeeper.

0 голосов
/ 23 мая 2012

Рассмотрите возможность использования шаблона синглтона актера. Например, в Scala есть Akka , который решает этот класс проблем с меньшим количеством кода.

...