【问题标题】:Least load scheduler最小负载调度程序
【发布时间】:2012-02-08 21:57:27
【问题描述】:

我正在开发一个系统,该系统同时使用数百个工作人员(评估小型任务的物理设备)。有些工人比其他工人快,所以我想知道在不事先了解他们的速度的情况下,在他们身上负载平衡任务的最简单方法是什么。

我正在考虑使用一个简单的计数器来跟踪工作人员当前正在处理的任务数量,然后对列表进行排序以获取具有最低活动任务计数的工作人员。这样,缓慢的工作人员将获得一些任务,但不会减慢整个系统的速度。我要问的原因是,当前的循环方法导致一些非常慢的工作人员(比其他工作人员慢 100 倍)不断积累任务并阻止新任务。

根据当前活动任务的数量对列表进行排序应该是一件简单的事情,但由于我会每秒对列表进行多次排序(每个任务的平均工作时间低于 25 毫秒),我担心这可能是一大瓶颈。那么有没有一个简单的版本可以让任务数量最少的工作人员无需一遍又一遍地排序。

编辑:任务通过开放的 TCP 连接推送给工作人员。由于任务之间的依赖关系相当复杂(排他性资源使用),因此我们假设所有任务都被分配开始。一旦任务从工作人员返回,所有不再被阻塞的任务都会排队,并将新任务推送给工作人员。工作队列永远不会是空的。

【问题讨论】:

    标签: scheduled-tasks scheduling multitasking worker


    【解决方案1】:

    这个系统怎么样:

    • Worker 到达其任务队列的末尾
    • 工作人员向负载平衡器请求更多任务
    • 负载平衡器分配 N 个任务(其中 N 可能大于 1,如果这些任务非常小,则可能是 20 - 50)。

    在这个系统中,由于您是在工作人员实际完成时分配新任务,因此您不必猜测剩余任务需要多长时间。

    【讨论】:

    • 应该指定,系统推送任务给worker。此外,批处理也不是最优的,因为每个批处理都会等待最长的任务返回,然后再发出新任务。
    【解决方案2】:

    我认为您需要提供有关系统的更多信息:

    如何将任务交给工作人员?工人是要求它还是被推动? 你怎么知道一个工人是否失业,或者它正在做多少工作? 物理设备是如何建模的?

    您想要做的是避免跟踪任何事情并找到一种更被动的方式来分发工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      相关资源
      最近更新 更多