是否有人将django celery worker实施为docker容器,仅在分配任务时运行

时间:2019-08-30 09:26:40

标签: django docker celery amazon-ecs aws-fargate

我能够使用FARGATE作为计算成功地将Django Celery worker作为AWS ECS服务中的docker容器进行部署。

但我担心的是芹菜容器运行24/7。如果仅在分配任务时才可以运行容器,那么按照AWS FARGATE计费方法,我可以节省很多钱。

2 个答案:

答案 0 :(得分:1)

芹菜并不是真正适合使用的东西,因为它可以持久存在,但目标应该相当容易实现。

在架构上,您可能想在Fargate任务上运行脚本。脚本将在队列中嚼碎,然后死亡。您会以某种方式触发该任务:

  • 您的数据接收者(例如Django)的API调用
  • lambda函数(由什么触发)

还有一些悬而未决的问题……您一次只将自己限制在一项任务上吗,还是需要管理对队列的并发请求?您重试吗?但是一个合理的起点。


一个不推荐但可能更简单的方法是在Django容器中运行一个celery worker(例如使用超级用户)并使用Fargate的自动缩放功能。您将始终运行一个Django容器来接收数据。如果该容器上的芹菜工人用完了所有可用资源,则Fargate将通过添加任务来扩展服务。作业完成后,它将删除多余的容器。您会在每个容器中为Django支付“开销”,但它的成本要比经常使用的celery容器少,而且肯定会更简单-利用您的celery经验并避免额外的事件处理层。 >

答案 1 :(得分:0)

您是否考虑过使用AWS Lambda代替芹菜工人?然后,您将按任务执行付费,其中成本由执行时间和内存使用量决定。如果您的应用程序大部分是空闲的,那么按请求付费(跳过空闲成本)最为合理。