繁体   English   中英

在 ECS Fargate 中操作 Celery Worker

[英]Operating the Celery Worker in the ECS Fargate

我正在使用 AWS ECS 开展一个项目。 我想使用 Celery 作为分布式任务队列。 Celery Worker 可以构建为 EC2 类型,但由于实例处于空闲状态的时间较长,我认为 AWS Fargate 运行该作业并立即退出会比较划算。

您对如何在 AWS 云中高效使用 Celery Worker 有什么建议吗?

Fargate 启动类型比 EC2 启动类型需要更长的时间来启动,因为当您启动任务时,AWS 会为您完成所有“托管事情”,包括众所周知的缓慢连接 ENI,并且可能从码头工人回购。 现在没有竞争,EC2 启动类型每次都更快。

因此,这实际上取决于您希望工人从事的工作类型。 由于上述原因,您可以预期新的 Fargate 任务需要几分钟才能进入 RUNNING 状态。 另一方面,EC2 启动,因为 ENI 已经在您的主机上,并且图像已经下载(最好)或大部分下载(可能最坏),将很快从 PENDING 变为 RUNNING。

编辑:正如@Rocket04 在下面的评论中指出的那样,AWS 似乎为扩展应用程序改进了 Fargate 启动时间。 万岁!


将 EC2 启动类型用于稳定的工作负载,将 Fargate 启动类型用于突发容量

这是当前流行的观点,通常作为成本因素进行讨论,因为 Fargate 无法利用典型的 EC2 成本节约机制,如预留实例和现货定价。 与 EC2 相比,始终运行 Fargate 的成本很高。

需要明确的是,在 Fargate 中运行 100% 完全没问题(我们这样做),但你必须愿意接受这样做的缺点 - 扩展速度和成本较慢。

请注意,您可以在同一个集群中运行这两种启动类型。 无论如何,集群都是合乎逻辑的,只是组织资源的一种方式。


示例集群

此示例显示了运行 4 个 celery 任务的静态 EC2 启动类型服务。 任务的数量、规格、实例大小等等都无关紧要,随心所欲地去做。 重要的是——EC2 启动类型的服务不需要扩展; Fargate 启动类型服务能够根据您的扩​​展规则从无运行(在很少或没有工作要做的时期)扩展到您可以处理的尽可能多的工作人员。

EC2 启动类型 Celery 服务

运行 1 个 EC2 启动类型t3.medium (2vcpu/4GB)。

最小任务:2,期望:4,最大任务:4

在此 EC2 启动类型中以 512/1024 运行 4 个 celery 任务。

没有扩展策略

Fargate 启动类型 Celery 服务

最小任务:0,期望:(x),最大任务:32

在 512/1024 运行 (x) celery 任务(与 EC2 启动类型相同的任务定义)

向此服务添加扩展策略

你的想法很棒! 但你错过了一些东西,

celery 是一个工人,而不是一个应该 24/7 运行的任务。

任务完成时芹菜不会停止。 它仍然会运行并等待其他任务,因此 ECS 只查看 celery 并且它运行 24/7。 所以 ECS 永远不知道 celery 任务的开始和结束。

如果 celery down 任务分配时谁会调出 celery? 您的消息代理和 ECS 之间没有连接来启动 celery。

实际上,如果 celery 24/7 运行,它可以根据消息队列按需运行任务。 否则,没有人知道分配了新任务。

方案一:替换 celery 并重写所有逻辑以支持 ECS 任务,并根据您的需要为 ECS 任务创建触发机制。

FYI: the above solution needs lot of efforts and not a practical 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM