【问题标题】:Limit concurrency of AWS Ecs tasks限制 AWS Ecs 任务的并发
【发布时间】:2021-06-16 15:25:39
【问题描述】:

我在 ECS Fargate 上部署了一个 selenium 脚本,它通过 API 与我的服务器通信。通常几乎 300 脚本并行运行并用 api 请求轰炸我的服务器。我面临 Net::Read::Timeout 错误,因为服务器无法在给定的时间范围内响应。如何限制并行运行的 ecs 任务。 例如,如果我运行了 300 个脚本,50 个脚本应该并行运行,其余 250 个脚本应该处于挂起状态。

【问题讨论】:

    标签: amazon-web-services selenium amazon-ecs aws-fargate


    【解决方案1】:

    我认为对于您的用例,您应该看看 AWS Batch,它支持 Docker 作业和作业队列。

    这个问题是关于在 AWS Batch 上限制并发:AWS batch - how to limit number of concurrent jobs

    编辑:顺便说一句,同样的策略可能适用于 ECS,例如将脚本分配给少数实例,这样在之前的实例完成之前无法配置更多实例。

    【讨论】:

    • 谢谢 Romain,是的,我使用了类似的技术。 sleep(3) while client.list_tasks(cluster: ClusterName).task_arns.count >= MAX_CONCURRENT_COUNT
    【解决方案2】:

    我不清楚你的脚本是如何工作的,可能有很多方法可以剥洋葱,但假设你的任务/脚本长时间运行,一种更容易实现的方法是创建一个 ECS 服务并修改其中的任务数它。您可以从具有 50 个任务的服务开始,然后将服务更新为 20 或 300 或您想要的任何数量。该服务将根据您配置的任务计数参数部署/删除任务。

    这当然假设任务(和脚本)无限运行。如果您的脚本启动并在某个时间点结束(以批处理方式),那么可能使用 AWS Batch 或 Step Functions 启动它们会是更好的方法。

    【讨论】:

    • 感谢您的回复。我的脚本运行了几分钟,然后终止。服务用于无限运行的任务,在这种情况下不能使用。 aws batch 中有什么方法可以限制其并发运行的作业吗?
    • 好的,那么 ECS 服务不在讨论范围内。我不知道 Batch 由内而外,但@romain 在他的回答中提供了一个链接到另一个线程,他们说这是可能的。
    • sleep(3) while client.list_tasks(cluster: ClusterName).task_arns.count >= MAX_CONCURRENT_COUNT clientAws::Ecs 的对象。我现在已经使用了这个jugaad。 P.S 我正在研究 AWS Batch 如何在这个用例中为我提供帮助
    猜你喜欢
    • 2017-11-29
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    相关资源
    最近更新 更多