我正在使用AWS ECS进行一个项目。我想使用Celery作为分布式任务队列。Celery Worker可以构建为EC2类型,但由于实例处于空闲状态的时间很长,我认为AWS Fargate运行作业并立即退出是划算的。
你对如何在AWS云中高效使用Celery Worker有什么建议吗?
Fargate启动类型将比EC2启动类型需要更长的时间才能启动,因为AWS正在执行所有的"主机事物";当你开始任务时,包括众所周知的ENI连接速度慢,以及可能从Docker repo下载图像。现在没有竞争,EC2发射类型每次都更快。
因此,这实际上取决于您希望员工做的工作类型。由于上述原因,您可以预期一项新的Fargate任务需要几分钟才能进入RUNNING状态。另一方面,EC2的启动,因为ENI已经在您的主机上就位,并且映像已经下载(最好(或大部分下载(可能最坏(,所以将很快从PENDING移动到RUNNING。
编辑:正如@Rocket04在下面的评论中指出的那样,AWS似乎改善了Fargate扩展应用程序的启动时间。好极了
对于稳定的工作负载使用EC2启动类型,对于突发容量使用Fargate启动类型
这是目前流行的观点,通常被视为成本因素,因为法盖特无法利用典型的EC2成本节约机制,如保留实例和现货定价。与EC2相比,一直运行法盖特的成本很高。
需要明确的是,在法盖特100%运行是完全可以的(我们这样做(,但你必须愿意接受这样做的负面影响——规模和成本较慢。
注意您可以在同一集群中运行两种启动类型。集群无论如何都是合乎逻辑的,只是组织资源的一种方式。
示例集群
此示例显示了一个静态EC2启动类型的服务,该服务运行4个芹菜任务。任务数量、规格、实例大小等等都无关紧要,你可以随心所欲。重要的是,EC2启动类型的服务不需要扩展;Fargate启动型服务能够根据您的扩展规则,从没有运行(在几乎没有工作可做的时期(扩展到您可以处理的尽可能多的工作人员。
EC2启动型芹菜服务
运行1 EC2启动类型t3.medium
(2vcpu/4GB(。
最小任务:2,期望任务:4,最大任务:4
在此EC2启动类型中,以512/1024运行4个芹菜任务。
无扩展策略
Fargate推出型芹菜服务
最小任务数:0,所需任务数:(x(,最大任务数:32
以512/1024 运行(x(个芹菜任务(与EC2启动类型相同的任务定义(
将扩展策略添加到此服务
你的想法很棒!但你错过了什么,
芹菜是一个工人,而不是一项它应该全天候运行的任务。
当任务完成时,芹菜不会停止。它仍然会运行并等待其他任务,所以ECS只看芹菜,它全天候运行。所以ECS从来不知道芹菜任务的开始和结束。
如果芹菜倒了,谁会在分配任务时提起芹菜?在您的消息代理和ECS之间没有连接来启动芹菜。
实际上,如果芹菜全天候运行,它就能够根据消息队列按需运行任务。否则,没有人知道分配了新任务。
解决方案1:替换cerele并重写ur的所有逻辑以支持ECS任务,并根据您的需要创建ECS任务的触发机制。
FYI: the above solution needs lot of efforts and not a practical