【问题标题】:Auto-scaling ECS Cluster to/from zero instances自动扩展 ECS 集群到/从零个实例
【发布时间】:2017-02-28 15:01:40
【问题描述】:

我已经使用 SQS 和 ECS 实现了Job Observer Pattern。职位描述被推送到 SQS 队列进行处理。作业处理在运行 ECS Docker 任务的 Auto-Scaling 组内的 ECS 集群上运行。

每个 ECS 任务都会:

  1. 从 SQS 队列中读取消息
  2. 对数据执行作业(约 1 小时)
  3. 删除消息
  4. 有更多消息时循环

当每个实例没有更多工作时,我想缩小集群,最终减少到零个实例。

查看this similar post,答案表明需要在 ASG 之外以某种方式处理缩减。实例将通过显式自行终止或在没有更多消息时关闭 ASG 实例保护来自我缩减。

这也不处理在单个实例上运行多个 ECS 任务的情况,因为如果其他任务并行运行,单个任务不应终止。

我是否仅限于自我缩减并且每个实例只有一个任务?有什么方法可以仅在实例上的所有 ECS 任务退出后终止?是否还有其他可缩小的替代方案?

【问题讨论】:

  • 您能否检查实例是否正在执行作业,并在您的实例上安装了一个简单的应用程序?例如通过获取 CPU/内存利用率?

标签: amazon-web-services autoscaling amazon-ecs


【解决方案1】:

您可以使用 CloudWatch Alarms with Actions

检测并终止闲置一段时间的工作实例

【讨论】:

    【解决方案2】:

    我最终使用了:

    • 添加与挂起的 SQS 队列消息相同数量的实例的横向扩展策略
    • SQS 队列为空后将实例设置为零的缩减策略
    • 在批处理作业开始时启用 ASG 实例保护并在结束时禁用它

    这将我限制为每个实例一个批处理作业,但在我的场景中效果很好。

    【讨论】:

      【解决方案3】:

      该问题的另一个解决方案是 2016 年底宣布的 AWS Batch 服务。

      【讨论】:

        猜你喜欢
        • 2019-12-01
        • 2021-04-22
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 2018-10-08
        • 2016-09-01
        • 2019-02-25
        • 2020-02-26
        相关资源
        最近更新 更多