为了账号安全,请及时绑定邮箱和手机立即绑定

在 ECS Fargate 中操作 Celery Worker

在 ECS Fargate 中操作 Celery Worker

侃侃无极 2021-08-11 22:11:12
我正在使用 AWS ECS 开展一个项目。我想使用 Celery 作为分布式任务队列。Celery Worker 可以构建为 EC2 类型,但由于实例处于空闲状态的时间很长,我认为 AWS Fargate 运行作业并立即退出将具有成本效益。您对如何在 AWS 云中高效使用 Celery Worker 有什么建议吗?
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

Fargate 启动类型比 EC2 启动类型需要更长的时间来启动,因为当你开始任务时,AWS 会为你做所有的“主机事情”,包括众所周知的 ENI 连接缓慢,以及可能从一个Docker 回购。现在没有竞争,EC2 启动类型每次都更快。

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


将 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 启动类型相同的任务定义)

向该服务添加扩展策略


查看完整回答
反对 回复 2021-08-11
?
潇湘沐

TA贡献1816条经验 获得超6个赞

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

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

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

如果 celery 下达任务时谁会调高 celery?您的消息传递代理和 ECS 之间没有连接来启动 celery。

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

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

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


查看完整回答
反对 回复 2021-08-11
  • 2 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号