Подтвердить что ты не робот

Использование кварца для планирования одиночного задания через несколько серверов с автономным приложением

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

Это отлично работает до сих пор, но теперь я хотел бы иметь запланированное задание, которое выполняется на одном из серверов приложений. Все серверы приложений будут запускать Quartz и иметь одинаковое расписание для выполнения заданий. Триггер будет запускаться на каждом сервере приложений, но я бы хотел, чтобы только один сервер приложений фактически выполнял задание - по сути, все они запускались, и только один фактически запускается, остальные серверы приложений просто игнорируют работу. Идея здесь в том, что если мы потеряем сервер приложений, другой будет запускать задание вместо этого, и если мы добавим новые серверы приложений, они приступят к выполнению заданий.

Я планировал это сделать, имея таблицу "блокировки заданий" в базе данных, которую все серверы приложений будут читать до начала работы, и только начинать, если задание "разблокировано". Сервер приложений, который делает обновление первым в таблице, по существу блокирует других, обновляя таблицу до состояния работы/сбросив ее в конце задания.

Прежде чем я построю это, я был бы признателен за вклад тех, у кого больше опыта Quartz:

a) Могу ли я подключить это поведение к кварцу, чтобы его не нужно было выполнять на основе работы? То есть разработчики могут добавлять новые задания, не беспокоясь о блокировке работы, поскольку они абстрагируются.

b) Предоставляет ли кварц какие-либо встроенные механизмы для достижения чего-то подобного выше, поэтому мне не нужно самостоятельно его качать?

Спасибо!

4b9b3361

Ответ 1

Как вы думаете, это сработает для вас? http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering

Выдержка из ссылки

В настоящее время кластеризация работает только с JDBC-Jobstore (JobStoreTX или JobStoreCMT) и, по сути, работает, если каждый node кластера использует одну и ту же базу данных.

Балансировка нагрузки происходит автоматически, при каждом node срабатывания кластера как можно быстрее. Когда происходит время срабатывания триггера, первый node для его получения (путем размещения блокировки на нем) - это node, который его срабатывает.