2012-01-11 2 views
3

Учитывая, что на веб-приложении AWS, работающем на AWAS Elastic Beanstalk (например, в идентичных экземплярах за балансировщиком нагрузки), как я могу выполнять запланированную фоновое действие, которое выполняется только для одного экземпляра?Задачи планирования в кластере идентичных одноранговых узлов

У меня есть cron-подобный механизм планирования в веб-приложении и может использовать, например. AWS Simple Queue Service для очереди задач (и убедитесь, что каждая задача выполняется только один раз). Но как я могу гарантировать, что только один экземпляр создает задачи (чтобы избежать дубликатов)?

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

ответ

3

Похоже, что это может быть выполнено с использованием Hazelcast: только самый старший узел в кластере (может быть определен через API) создает и ставит задачи.

2

Quartz Scheduler работает очень хорошо для нас. Узлы приходят и уходят в наш beanstalk, и Quartz удается выполнить задание на узле, который, случается, заканчивается, когда планировщик указывает, что ему нужно запустить. Поддерживает cron-style scheduling, а также пару других форматов. Он отказоустойчив и может запускать задания, которые были упущены, поскольку экземпляры не были доступны, когда задача должна была выполняться, или если узел не смог выполнить выполнение.

Предполагается, что вы используете RDS или другую реляционную БД, которую Quartz может использовать в качестве постоянного хранилища.

+0

Итак, есть ли подключаемый модуль для кварца, который позволяет обнаруживать запущенные экземпляры в группе безопасности EC2 и координировать выполнение задания? Или как вы предотвращаете дублирование выполнения задания? – ejain

+0

Плагин не нужен, просто конфигурация. Например, указание всех узлов в вашей группе безопасности EC2 в одной и той же базе данных для хранения их данных задания Quartz автоматически сделает их скоординированными. Агенты Quartz на каждом узле проверяют детали работы, которые централизованы в базе данных. – Jason

+0

Спасибо, нашел это: http://quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-09. Похоже, вам нужна реляционная база данных или Terracotta. – ejain

Смежные вопросы