请问 celery 有什么负载均衡的办法吗?如何让加入队列的任务平均分配在每个 worker 节点上呢?

发布于 2022-09-06 02:34:42 字数 357 浏览 8 评论 0

目前小弟用 celery 搭了一套共 7 个 worker 节点的系统,主要是用于分散数据文件生成的任务,避免单个节点 I/O 过高,性能太差。目前小弟有几个问题:
1、一次性大量通过 apply_async 调用异步任务时,worker 对任务的获取是抢占式的,导致各个节点上的任务并不平均,有的节点早早就结束了所有的任务闲了下来,但是其他节点还在埋头苦干,请问 celery 有什么负载均衡的办法吗?如何让加入队列的任务平均分配在每个 worker 节点上呢?
2、worker 对于任务是先抢光队列里面的所有任务,然后再执行任务。请问是否有办法让每个节点只获取 worker_concurrency 数量的任务,哪个 process 完成了再去队列中获取呢?
谢谢大家~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

执手闯天涯 2022-09-13 02:34:42

改为同步方式执行任务应该就好了。apply_async换成apply试试,可能得调整下代码。

撩动你心 2022-09-13 02:34:42

这是你工作负载本身不均衡引起的吧,和Celery没关系吧,你看下你每类型任务的耗时
Celery可以支持设置Queue,将指定任务路由到特定worker

小矜持 2022-09-13 02:34:42

请问你最后有没有好的方法解决这种worker间任务不平均的问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文