在 ECS Fargate 中操作 Celery Worker

you*_*inz 5 python amazon-web-services amazon-ecs celery aws-fargate

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

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

blu*_*res 6

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

向该服务添加扩展策略