Выберите node в кластере кварца, чтобы выполнить задание

У меня есть некоторые вопросы о кластеризации кварца, а именно о том, как запускать огонь/задания в кластере.

  • Отдает ли кварц предпочтение узлам при выполнении заданий? Например, всегда или никогда node, который выполнял одно и то же задание в последний раз, или это просто какой-либо node, который сначала попадает на задание?

  • Можно ли указать node, который должен выполнить задание?

Ответ 1

Ответ на это будет чем-то вроде "это зависит".

Для кварца 1.x ответ заключается в том, что выполнение задания всегда (только) для более или менее случайных node. Где "случайность" действительно основано на том, что node получает к ней в первую очередь. Для "занятых" планировщиков (где всегда есть много заданий для запуска) это приводит к довольно сбалансированной нагрузке на узлы кластера. Для не занятого планировщика (только случайное задание для запуска) иногда может показаться, что один node запускает все задания (поскольку планировщик ищет следующее задание, которое срабатывает при выполнении задания, поэтому node просто заканчивая выполнение, как правило, требуется выполнить следующее задание).

С кварцем 2.0 (который находится в бета-версии) ответ такой же, как и выше, для стандартного кварца. Но люди Terracotta создали Enterprise Edition своего TerracottaJobStore, который предлагает более сложный контроль кластеризации - поскольку вы планируете задания, вы можете указать, какие узлы кластера действительны для выполнения задания, или вы можете указать характеристики/реквизиты node, таких как "a node с доступным объемом не менее 100 МБ". Это также работает вместе с ehcache, так что вы можете указать задание для запуска "на node, где данные, введенные с помощью X, являются локальными".

Ответ 2

Я решил этот вопрос для своего веб-приложения, используя Spring + AOP + memcached. Мои задания действительно знают из данных, которые они пересекают, если задание уже выполнено, поэтому единственное, что мне нужно избегать, это два или более узлов, работающих одновременно.

Вы можете прочитать его здесь:

http://blog.oio.de/2013/07/03/cluster-job-synchronization-with-spring-aop-and-memcached/