代码之家  ›  专栏  ›  技术社区  ›  HypeXR

如何利用AWS每分钟执行一次方法(多个进程/实例)

  •  0
  • HypeXR  · 技术社区  · 11 年前

    我有一个每分钟发送SQS消息的流程。消息每分钟发出一次是很重要的,所以我计划在多个实例上运行该过程,这样它就更加容错。

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

    我希望避免主/从设置。

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

    我还考虑让调度消息的进程在simpleDB或可能的其他DB中放置时间戳,并让进程检查时间戳。第一个检查它并发现它超过一分钟的人将更新时间戳并发送消息。

    我调查了SWF,发现它可以在计时器上运行工作人员/活动,但SWF似乎对这一点过分了,我宁愿避免设置它并使用我的DB来运行它。

    有人能为这样的问题找到一个优雅的解决方案吗?

    1 回复  |  直到 11 年前
        1
  •  1
  •   at0mzk    11 年前

    我们使用mysql数据库来完成这一任务,与您建议的类似。但我们不尝试读取时间戳(比赛条件?)。该表在时间戳上具有唯一索引。每个实例上的进程都尝试插入运行分钟的时间戳,例如“2015-02-27 12:47:00”。如果mysql返回一个重复的密钥错误,那么另一个实例首先出现,它们什么也不做。如果插入成功,他们将发送SQS消息。

    您可能还想尝试谷歌的分布式cron系统。