【问题标题】:dynamically load-balanced task queue动态负载均衡的任务队列
【发布时间】:2025-12-09 15:40:01
【问题描述】:

设置
前端机器接收网络请求,将3种不同的任务放入Gearman服务器。
在该 gearman 服务器上注册了 3 台工作机器,每台都可以执行任何这些任务。

不同的任务消耗不同的资源。
每个任务在 cpu/ram/io 消耗方面都不同。
队列中的任务数量远大于工作人员的数量,这意味着每台工作机器向 gearman 注册了多个工作人员实例。

如何动态负载均衡呢
问题在于,一台工作机器可以完成所有 cpu 扩展任务,另一台机器可以获得 i/o 扩展任务,而理想情况下,工作机器可以更好地并行执行所有这些不同类型的任务。

也许 gearman 不是合适的工具?

【问题讨论】:

  • 我知道 rabbitmq 有“公平”的平衡,下一个任务会交给表明它是空闲的机器。但是一台机器可以并行执行 3 个任务,每个任务消耗不同类型的资源。

标签: load-balancing message-queue task-queue gearman


【解决方案1】:

您可能可以使用具有fair dispatching
的 RabbitMQ 使用 3 个不同的队列, 一个用于 cpu 消耗任务,一个用于 i/o,一个用于网络。

因此,每次工作机器完成任何此类任务时,它都会知道它已完成并获得另一个相同资源消耗类型的任务。

【讨论】:

    最近更新 更多