用于 elasticbeanstalk 上自动缩放的 django 应用程序的多个 celerybeat 实例

Multiple instances of celerybeat for autoscaled django app on elasticbeanstalk

我正在尝试找出构建 Django 应用程序的最佳方法,该应用程序使用 Celery 在自动扩展的 AWS ElasticBeanstalk 环境中处理异步和计划任务。

到目前为止,我只使用了带有 Celery + Celerybeat 的单个实例 Elastic Beanstalk 环境,并且效果非常好。但是,我想在我的环境中有多个实例 运行,因为时不时有一个实例崩溃并且需要很长时间才能备份该实例,但我无法将我当前的架构扩展到更多不是一个实例,因为 Celerybeat 应该在所有实例中只 运行 一次,否则 Celerybeat 计划的每个任务都将提交多次(环境中的每个 EC2 实例一次)。

我已经阅读了多种解决方案,但它们似乎都存在不适合我的问题:

如何在分布式 Elastic Beanstalk 环境中将 Celery 与计划任务一起使用而不会重复任务?例如。我如何确保在 Elastic Beanstalk 环境中所有实例中始终只有一个实例 运行(即使使用 Celerybeat 的当前实例崩溃)?

还有其他方法可以实现吗?将 Elastic Beanstalk 的工作层环境与 Django 结合使用的最佳方式是什么?

万一有人遇到类似的问题:我最终切换到 django 的不同队列/任务框架。它被称为 django-q,在不到一个小时的时间内就完成了设置和工作。它具有我需要的所有功能,并且比 Celery 更好地集成了 Django(因为 djcelery 不再活跃)。

Django-q 超级易用,而且比庞大的 Celery 框架更轻巧。只能推荐了!

我猜你可以把 c​​elery beat 分给不同的组。

您的自动缩放组运行多个 django 实例,但 celery 未包含在缩放组的 ec2 配置中。

你应该有不同的一组(或只有一组)celery beat 实例