Распределять обработку записей задания планировщика

#parallel-processing #cron #quartz-scheduler #scheduler #distributed-computing

#параллельная обработка #cron #quartz-планировщик #планировщик #распределенные вычисления

Вопрос:

Я работаю над вариантом использования, когда у меня запланировано задание cron (через quartz), которое считывает определенные записи из базы данных и обрабатывает их. Теперь в каждом расписании я могу получить тысячи записей, которые необходимо обработать. Обработка каждой записи занимает время (в секундах / минутах). В настоящее время все эти записи обрабатываются на одном узле (узле, выбранном quartz). Теперь моя задача — распараллелить обработку этих записей. Пожалуйста, помогите мне в решении следующих проблем :

  1. Как я могу распределить эти записи / задачи по кластеру машин
  2. Если какая-либо машина выходит из строя после обработки нескольких записей, оставшиеся записи должны быть обработаны исправными узлами в кластере
  3. Получить сигнал о том, что обработка всех записей завершена.

Ответ №1:

Создайте задания cron для выполнения отдельно на каждом хосте с желаемой частотой. Вам понадобится некоторая форма блокировки для каждой записи или некоторая форма блокировки диапазона для набора записей, чтобы гарантировать, что серверы обрабатывают взаимоисключающий набор записей.

например: Вы можете добавить следующее новое поле ко всем записям:

Заблокирован сервером: заблокирован на время действия (или по истечении срока действия блокировки):

При каждом запуске каждый cron выбирает набор записей с истекшим сроком действия или пустые блокировки, а затем он получает блокировку для небольшого набора записей, помещая эти две записи. Затем он переходит к их обработке. В случае сбоя или зависания блокировка истекает, в противном случае она снимается по завершении.