删除弹性beantalk EC2实例后,芹菜任务和队列是否中断?

时间:2019-11-27 07:28:00

标签: python django amazon-web-services celery amazon-elastic-beanstalk

我有一个在Multicontainer Docker平台上的Elastic Beanstalk上运行的Django应用。因此,每个EC2实例都有适用于Django,Celery,RabbitMQ和Nginx的Docker容器。

我担心由于自动扩展事件或部署不可变而导致EC2实例被删除时的芹菜任务。

  • 当一个实例被删除时,celery队列中的当前任务会丢失 删除了吗?

  • 正在移除实例时可以中断正在运行的芹菜任务吗?

  • 每个新实例都会调用Celery Beat Schedule(cron) 启动,导致通话重复。

我很好奇,是否还有其他人可以解决上述问题?这是我正在考虑的一些解决方案的列表:

  1. 将celery broker更改为远程ElastiCache Redis实例。不 确保可以使用。

  2. 使用另一个库替换可以在其中存储任务的Celery 数据库(例如huey或apscheduler)。

  3. 从芹菜迁移到AWS SQS + Elastic Beanstalk Worker。那 意味着将相同的代码库复制到两个 当前的网络以及工作人员Elastic Beanstalk。

还有其他想法或担忧吗?

2 个答案:

答案 0 :(得分:0)

每个EC2实例是否需要单独的Celery / Rabbit实例?除非将兔子存储在外部,否则删除兔子实例将杀死芹菜

答案 1 :(得分:0)

(1)和(2)可以用Elasticache解决(因为redis是数据库)和task_acks_late + prefetch = 1(这是我们使用自动缩放+芹菜时要做的)。单例芹菜节拍通常很难解决,但是有些软件包已经提供了此功能(例如https://pypi.org/project/celery-redbeat/)。