3

给定一个在 AWS Elastic Beanstalk 上运行的简单 Web 应用程序(即负载均衡器后面的 1..n 个相同实例),我如何才能有一个仅在一个实例上运行的计划后台操作?

我在 Web 应用程序中确实有一个类似 cron 的调度机制,并且可以使用例如 AWS 简单队列服务对任务进行排队(并确保每个任务只执行一次)。但是如何确保只有一个实例创建任务(以避免重复)?

显然,我可以有一个专门的实例来负责创建任务,但我正在寻找一种更动态的机制,让一个普通实例自动承担该角色。有任何想法吗?

4

2 回答 2

3

看起来这可以使用 Hazelcast 完成:只有集群中最旧的节点(可以通过 API 确定)创建和排队任务。

于 2012-01-12T18:41:04.877 回答
2

Quartz Scheduler非常适合我们。节点在我们的 beanstalk 中来来去去,当调度程序指示它需要运行时,Quartz 设法在恰好启动的节点上运行作业。支持 cron 样式的调度以及其他几种格式。它是容错的,并且可以运行由于在任务应该执行时没有可用的实例或节点未能完成执行而错过的作业。

假设您正在使用 RDS 或 Quartz 可以用作持久存储的其他关系数据库。

于 2012-05-03T15:31:21.477 回答