【问题标题】:How can I sequentially process jobs that are executed on multiple EC2 instances?如何按顺序处理在多个 EC2 实例上执行的作业?
【发布时间】:2021-07-14 05:28:23
【问题描述】:

目前,有多个作业(shell 脚本)在多个 EC2 实例上运行。 EC2 不相互链接。 作业在 cron 设定的时间运行。

我应该使用什么服务/配置来确认作业 A 已在 EC2 上完成并在另一个 EC2 上运行作业 B?

(如果 EC2 上的作业 A 没有完成,另一个 EC2 上的作业 B 将不会被执行。)

如果你也可以给我一些页面来参考会很有帮助。

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

    您根本没有提供太多信息,因此很难推荐选项。

    但是,您可能考虑使用多个 Amazon SQS 队列

    每个 EC2 实例都应该从不同的队列中提取“工作”,例如:

    • 实例 A 从队列 A 中拉取
    • 实例 B 从队列 B 中拉取

    每个实例上的“工人”代码将:

    • 将消息从其队列中拉出(这会导致消息在定义的时间段内不可见)
    • 处理工作
    • 向下一个队列发送消息
    • 从其队列中删除消息(以表明它已完成)

    如果工作人员未能在“不可见期”内处理消息,Amazon SQS 将使消息再次可见以供工作人员处理,或者(根据您的队列设置)将其移至死信队列以进行取证调查.

    这被称为CDP:Queuing Chain Pattern - AWS-CloudDesignPattern

    如果每个单独的作业都相对较小,那么更好的模式是使用 AWS Lambda 函数而不是 Amazon EC2 实例。这样,当队列中没有工作时,不会产生任何费用。

    或者,如果每个 EC2 实例都可以充当任何工作人员,而不仅仅是一个特定的工作人员,那将很有用。如果一个进程比其他进程花费更多的时间,这将避免潜在的阻塞。工作人员可能会从最新的队列中拉出,例如 CDP:Priority Queue Pattern - AWS-CloudDesignPattern 的反向版本。

    【讨论】:

    • 对于信息的缺乏,我深表歉意。我已经添加了关于当前情况的注释。我仍然可以使用以前的答案吗?如果您能回答这个问题,我将不胜感激。
    • 我无法再添加任何内容,因为坦率地说,我们对您的脚本或您想要做什么一无所知。
    【解决方案2】:

    有多个具有不同功能的选项。

    正如上一个答案中已经提到的,一种选择是通过队列链接作业。简单,可靠,但安静的刚性。或许可以满足您的所有需求。

    如果您需要更多复杂性、控制力和洞察力,您可以使用AWS Step Functions

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 2019-02-10
      • 2019-09-07
      • 2019-02-08
      相关资源
      最近更新 更多