Синхронизация времени кварцевого планировщика - PullRequest
4 голосов
/ 03 апреля 2012

Я просмотрел документацию по Quartz и не могу найти однозначного ответа на вопрос: что произойдет, если я использую Quartz Scheduler в кластерной среде, но машины не синхронизируются (мы будем использовать JobStoreTX )? Будет ли Quartz запускать несколько рабочих мест? Будет ли запускаться только один, блокируя запись строки базы данных?

1 Ответ

2 голосов
/ 03 апреля 2012

К сожалению, я не думаю, что это задокументировано, однако я считаю, что результаты не настолько разрушительны и ошибочны.

Каждый экземпляр планировщика Quartz в кластере опрашивает базу данных каждые несколько секунд, пытаясь найти новые задания для запуска (я думаю, что по умолчанию он ищет все задания со следующим запланированным временем между now - 30 и now + 60 секундами - но это не имеет значения и зависит от конфигурации). Эта операция, очевидно, безопасна для всего кластера, поскольку вполне вероятно, что несколько экземпляров одновременно опрашивают новые задания.

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

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

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