Выберите узел в кластере Кварц, чтобы выполнить задание
У меня есть несколько вопросов о кластеризации кварца, в частности о том, как триггеры запускаются / выполняются в кластере.
Дает ли кварц предпочтение узлам при выполнении заданий? Например, всегда или никогда узел, который выполнил одно и то же задание в последний раз, или это просто тот узел, который первым получит задание?
Можно ли указать узел, который должен выполнять задание?
2 ответа
Ответом на это будет что-то вроде "это зависит".
Для кварца 1.x ответ заключается в том, что выполнение задания всегда (только) на более или менее случайном узле. Где "случайность" действительно основана на том, какой узел дойдет до него первым. Для "занятых" планировщиков (где всегда много заданий для выполнения) это приводит к довольно сбалансированной нагрузке на узлы кластера. Для незанятого планировщика (только случайное задание) иногда может показаться, что один узел запускает все задания (потому что планировщик ищет следующее задание для запуска при завершении выполнения задания, поэтому узел просто завершает выполнение стремится найти следующую работу для выполнения).
С кварцем 2.0 (который находится в бета-версии) ответ такой же, как и выше, для стандартного кварца. Но ребята из Terracotta создали Enterprise Edition своего TerracottaJobStore, который предлагает более сложное управление кластеризацией - при планировании заданий вы можете указать, какие узлы кластера являются допустимыми для выполнения задания, или вы можете указать характеристики / реквизиты узлов, например как "узел с ОЗУ не менее 100 МБ". Это также работает вместе с ehcache, так что вы можете указать задание для запуска "на узле, где данные, обозначенные X, являются локальными".
Я решил этот вопрос для моего веб-приложения, используя Spring + AOP + memcached. Мои работы знают по данным, которые они просматривают, если задание уже выполнено, поэтому единственное, чего мне нужно избегать, - это два или более узлов, работающих одновременно.
Вы можете прочитать это здесь:
http://blog.oio.de/2013/07/03/cluster-job-synchronization-with-spring-aop-and-memcached/