猿问

在 ECS Fargate 中操作 Celery Worker

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

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


侃侃无极
浏览 181回答 2
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 启动类型相同的任务定义)向该服务添加扩展策略

潇湘沐

你的想法很棒!但你错过了一些东西,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
随时随地看视频慕课网APP

相关分类

Python
我要回答