【问题标题】:Celery worker best practices芹菜工人最佳实践
【发布时间】:2020-08-13 10:21:16
【问题描述】:

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

我目前正在使用 Celery 默认队列和所有工作人员从中获取信息。我正在考虑实施优先级划分within the only queue,但它到处都被描述为一种不好的做法。 处理优先级问题的最佳方法的共识是set different Celery queues for each level of priority。比方说:

  • 队列 1 用于最高优先级任务,分配给 x 个工作人员

  • Queue2 默认队列,分配给所有其他工作人员

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

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

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

【问题讨论】:

  • 我想知道你从哪里读到使用优先级是不好的做法

标签: django heroku celery priority-queue


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2022-01-08
    • 2014-06-09
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多