Планирование задач в кластере идентичных пиров - PullRequest
3 голосов
/ 12 января 2012

Учитывая простое веб-приложение, работающее на AWS Elastic Beanstalk (т. Е. 1.. В идентичных экземплярах за балансировщиком нагрузки), как я могу иметь запланированную фоновую операцию, которая выполняется только в одном экземпляре?иметь механизм планирования в виде cron в веб-приложении и может использовать, например, AWS Simple Queue Service для постановки задач в очередь (и обеспечения того, чтобы каждая задача выполнялась только один раз).Но как я могу гарантировать, что только один экземпляр создает задачи (чтобы избежать дублирования)?

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

Ответы [ 2 ]

3 голосов
/ 12 января 2012

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

2 голосов
/ 03 мая 2012

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

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

...