我正在使用AWS ECS进行项目.我想将Celery用作分布式任务队列.可以将Celery Worker构建为EC2类型,但是由于实例处于空闲状态的时间很多,因此我认为AWS Fargate运行作业并立即退出将具有成本效益.
您是否对如何在AWS云中有效使用Celery Worker提出建议?
解决方法:
Fargate启动类型的启动时间将比EC2启动类型的启动时间更长,因为启动任务时AWS会为您完成所有“主机操作”,包括众所周知的慢速连接ENI以及可能从ENI下载映像. Docker仓库现在没有任何竞争,每次EC2启动类型都会更快.
因此,这实际上取决于您希望工人从事的工作类型.由于上述原因,您可以期望新的Fargate任务需要几分钟才能进入RUNNING状态.另一方面,由于ENI已在您的主机上安装并且映像已下载(最佳状态)或大部分已下载(可能最差),因此EC2启动将非常快地从PENDING变为RUNNING.
将EC2启动类型用于稳定的工作负载,将Fargate启动类型用于突发容量
这是当前流行的观点,通常被讨论为成本因素,因为Fargate无法利用预留实例和现货定价等典型的EC2成本节省机制.与EC2相比,一直运行Fargate的成本很高.
需要明确的是,在Fargate中运行100%完全可以(我们这样做),但是您必须愿意接受这样做的缺点-扩展速度和成本降低.
请注意,您可以在同一集群中运行两种启动类型.无论如何,集群都是合乎逻辑的,只是一种组织资源的方式.
集群示例
此示例显示了运行4个celery任务的静态EC2启动类型服务.任务的数量,规格,实例大小以及所有这些都无关紧要,但是您可以随心所欲地完成.重要的是-EC2启动类型服务无需扩展; Fargate启动类型服务能够根据扩展规则将不运行的情况(在几乎没有工作要做或没有工作的期间)扩展为您可以处理的尽可能多的工作人员.
EC2启动式芹菜服务
运行1个EC2启动类型t3.medium(2vcpu / 4GB).
最小任务:2,需要:4,最大任务:4
在此EC2启动类型中,以512/1024运行4个芹菜任务.
没有扩展政策
Fargate启动式芹菜服务
最小任务:0,所需:(x),最大任务:32
在512/1024上运行(x)个芹菜任务(与EC2启动类型相同的任务def)
向该服务添加扩展策略