首页 > 解决方案 > 芹菜工人最佳实践

问题描述

我正在使用 Celery 为我的 Django 应用程序运行后台作业,该应用程序托管在 Heroku 上,Redis 作为代理。我想设置任务优先级。

我目前正在使用 Celery 默认队列和所有工作人员提供的信息。我正在考虑在唯一的队列中实现优先级,但它到处都被描述为一种不好的做法。处理优先级问题的最佳方法的共识是为每个优先级设置不同的 Celery 队列。比方说:

我用这种方法看到的第一个问题是,如果某个时候没有高优先级任务,我会失去 x 工人的生产力。

另外,假设我的基础设施扩大了,我有更多的工人可用。只有“默认”工作人员的数量会动态扩展。此外,这种方法使我无法保持相同的 dynos(Heroku 上的容器),这看起来并没有针对可扩展性进行优化。

是否有一种有效的方法来处理任务优先级并同时保留可复制的工作人员?

标签: djangoherokucelerypriority-queue

解决方案


对于答案,W1 和 W2 分别是执行高优先级和低优先级任务的工人。

您可以将 W1 和 W2 作为单独的容器进行缩放。您可以拥有三个容器,基本上是从同一个图像中提取的。一个用于应用程序,两个用于工作人员。如果您有更多数量的一种任务,则只有该容器可以扩展。此外,根据您使用的测功机类型,您可以为工作人员设置并发以更好地使用资源。

供您参考,这是我在我的一个项目中所做的。

缩放工作者


推荐阅读