【问题标题】:Scheduling tasks within a cluster of identical peers在相同对等点的集群中调度任务
【发布时间】:2012-01-11 21:36:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-sqs hazelcast


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 那么有没有 Quartz 插件可以检测 EC2 安全组中正在运行的实例并协调作业执行?或者如何防止重复执行作业?
      • 不需要插件,只需要配置。例如,将 EC2 安全组中的所有节点指向同一个数据库以存储其 Quartz 作业数据将自动使它们相互协调。每个节点上的 Quartz 代理检查集中在数据库中的作业详细信息。
      • 谢谢,找到了这个:quartz-scheduler.org/documentation/quartz-2.x/tutorials/…。看起来您需要关系数据库或 Terracotta。
      • 完全正确(RDS 就是这样 - 来自亚马逊的 MySQL 或 Oracle)
      • 你知道dynamodb也有一个实现:github.com/azam/dynamodb-quartz
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2020-08-05
      • 2019-09-19
      • 2012-04-24
      • 2015-12-19
      • 2022-08-10
      • 2012-02-06
      相关资源
      最近更新 更多