Использование Quartz для планирования одного задания на нескольких серверах приложений без сохранения состояния - PullRequest
19 голосов
/ 12 июля 2011

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

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

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

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

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

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

Спасибо!

1 Ответ

22 голосов
/ 12 июля 2011

Как вы думаете, это будет работать для вас? http://quartz -scheduler.org / документация / кварц-2.x / конфигурация / ConfigJDBCJobStoreClustering

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...