请问 celery 有什么负载均衡的办法吗?如何让加入队列的任务平均分配在每个 worker 节点上呢?
目前小弟用 celery 搭了一套共 7 个 worker 节点的系统,主要是用于分散数据文件生成的任务,避免单个节点 I/O 过高,性能太差。目前小弟有几个问题:
1、一次性大量通过 apply_async 调用异步任务时,worker 对任务的获取是抢占式的,导致各个节点上的任务并不平均,有的节点早早就结束了所有的任务闲了下来,但是其他节点还在埋头苦干,请问 celery 有什么负载均衡的办法吗?如何让加入队列的任务平均分配在每个 worker 节点上呢?
2、worker 对于任务是先抢光队列里面的所有任务,然后再执行任务。请问是否有办法让每个节点只获取 worker_concurrency 数量的任务,哪个 process 完成了再去队列中获取呢?
谢谢大家~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
改为同步方式执行任务应该就好了。apply_async换成apply试试,可能得调整下代码。
这是你工作负载本身不均衡引起的吧,和Celery没关系吧,你看下你每类型任务的耗时
Celery可以支持设置Queue,将指定任务路由到特定worker
请问你最后有没有好的方法解决这种worker间任务不平均的问题。