如何利用 AWS 每分钟执行一次方法(多个 processes/instances)

How to execute a method once (multiple processes/instances) per minute utilizing AWS

我有一个进程每分钟发送一次 SQS 消息。消息每分钟发出一次很重要,因此我计划 运行 在多个实例上执行此过程,以便它更容错。

即使在多个实例上 运行ning 我只希望 SQS 消息每分钟发出一次。因此,如果机器 A 发送消息,我不希望机器 B 发送它们,反之亦然。

我想避免master/slave设置。

我想过使用一个单独的 SQS 队列来发送一个完成的消息,该消息可以被其中一个进程接收以开始调度消息并在完成/一分钟后发送完成的消息,但是如果完成的消息没有由于失败或其他问题而被发送,他们循环将结束,这是不可接受的。

我还考虑过让发送消息的进程在 simpleDB 或可能是另一个数据库中放置一个时间戳,并让进程每隔一段时间检查一次时间戳。第一个检查它并发现它早于一分钟的人将更新时间戳并发送消息。

我调查了 SWF,发现它可以 运行 workers/activities 定时器,但 SWF 似乎有点矫枉过正,我宁愿避免设置它和 运行 访问到我的数据库。

有没有人有解决此类问题的优雅解决方案?

我们使用 mysql 数据库来执行与您建议的类似的操作。但是我们不会尝试读取时间戳(竞争条件?)。 table 在时间戳上有一个唯一索引。每个实例上的进程都尝试插入它们 运行 分钟的时间戳,例如“2015-02-27 12:47:00”。如果 mysql returns 重复键错误,则另一个实例先出现,它们什么也不做。如果插入成功,他们会发送 SQS 消息。

您可能还想尝试 google 分布式 cron 系统。