鉴于在AWS Elastic Beanstalk上运行的简单Web应用程序(即负载均衡器后面的1..n相同实例),如何才能在一个实例上运行预定的后台操作?
我在Web应用程序中有一个类似cron的调度机制,可以使用例如AWS Simple Queue Service用于对任务进行排队(并确保每个任务只执行一次)。但是,我如何确保只有一个实例创建任务(以避免重复)?
显然,我可以拥有一个负责创建任务的专用实例,但我正在寻找一种更加动态的机制,让其中一个普通实例自动承担该角色。有什么想法吗?
答案 0 :(得分:3)
看起来这可以使用Hazelcast完成:只有群集中最旧的节点(可以通过API确定)创建任务并将其排队。
答案 1 :(得分:2)
Quartz Scheduler对我们非常有效。节点在我们的beanstalk中进出,Quartz设法在调度程序指示它需要运行时正好运行的节点上运行。支持cron式调度以及其他几种格式。它是容错的,并且可以运行错过的作业,因为当任务执行时没有实例可用,或者节点未能完成执行。
假设您正在使用RDS或Quartz可用作持久存储的其他关系数据库。