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 启动类型相同的任务定义)
向该服务添加扩展策略

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
添加回答
举报