#parallel-processing #cron #quartz-scheduler #scheduler #distributed-computing
#параллельная обработка #cron #quartz-планировщик #планировщик #распределенные вычисления
Вопрос:
Я работаю над вариантом использования, когда у меня запланировано задание cron (через quartz), которое считывает определенные записи из базы данных и обрабатывает их. Теперь в каждом расписании я могу получить тысячи записей, которые необходимо обработать. Обработка каждой записи занимает время (в секундах / минутах). В настоящее время все эти записи обрабатываются на одном узле (узле, выбранном quartz). Теперь моя задача — распараллелить обработку этих записей. Пожалуйста, помогите мне в решении следующих проблем :
- Как я могу распределить эти записи / задачи по кластеру машин
- Если какая-либо машина выходит из строя после обработки нескольких записей, оставшиеся записи должны быть обработаны исправными узлами в кластере
- Получить сигнал о том, что обработка всех записей завершена.
Ответ №1:
Создайте задания cron для выполнения отдельно на каждом хосте с желаемой частотой. Вам понадобится некоторая форма блокировки для каждой записи или некоторая форма блокировки диапазона для набора записей, чтобы гарантировать, что серверы обрабатывают взаимоисключающий набор записей.
например: Вы можете добавить следующее новое поле ко всем записям:
Заблокирован сервером: заблокирован на время действия (или по истечении срока действия блокировки):
При каждом запуске каждый cron выбирает набор записей с истекшим сроком действия или пустые блокировки, а затем он получает блокировку для небольшого набора записей, помещая эти две записи. Затем он переходит к их обработке. В случае сбоя или зависания блокировка истекает, в противном случае она снимается по завершении.