Вы можете создать менеджера, который распространяет работу, например, как сказал fejesjoco, или вы можете сделать ваши приложения достаточно умными, чтобы захватить определенное количество единиц работы для обработки. Когда они завершат обработку этих блоков, попросите их связаться с сервером db, чтобы получить следующую партию. Промыть и повторить до завершения.
В качестве примечания наиболее распределенных систем рабочих в ведении:
- Работы находятся в очереди на сервере партий
- Рабочих процессов проверить с сервером, чтобы получить партию, чтобы работать дальше, доступная партия помечаются как обрабатывается этим работником.
- (необязательно) Рабочие процессы проверяются на сервере с отчетом о состоянии (то есть: 10% сделано, выполнено 20% и т. Д.)
- Рабочий процесс завершает работу и отправляет результаты.
- Перейти к шагу 2.
Другим вариантом является 3 рабочих обрабатывать один и тот же набор данных. Это позволит сравнить результаты. Если 2 или более одинаковых результатов, вы принимаете эти результаты. Если все 3 имеют разные результаты, то вы знаете, что есть проблема, и вам нужно проверить данные/код. Обычно это происходит только тогда, когда рабочие находятся вне вашего контроля (например, SETI), или вы выполняете массивные вычисления и хотите исправить возможные проблемы с оборудованием.
Иногда есть приложение управления, которое отображает текущее количество работников и прогресс со всем набором. Если вы знаете, сколько времени занимает отдельная партия, вы можете обнаружить, когда работник умер, и позволить новому процессу получить ту же самую партию.
Это позволяет добавлять или удалять как можно больше индивидуальных работников, не перерабатывая ничего.