代码之家  ›  专栏  ›  技术社区  ›  Lukas Å alkauskas

负载平衡和调度算法

  •  9
  • Lukas Å alkauskas  · 技术社区  · 16 年前

    所以我的问题是:

    我有几个不同的配置服务器。我有不同的计算方法(工作);我可以预测大概每个工作需要多长时间才能计算出来。另外,我有优先权。我的问题是如何让所有的机器保持99-100%的负载,并以最佳方式安排作业。

    每台机器一次可以做几个计算。作业被推送到机器上。中央机器知道每台机器的当前负载。另外,我想在这里分配某种机器学习,因为我将知道每个作业的统计信息(开始、完成、CPU负载等)。

    我如何以最佳方式分配工作(计算),并记住优先顺序?

    有什么建议、想法或算法吗?

    仅供参考:我的平台.net。

    4 回复  |  直到 12 年前
        1
  •  2
  •   Yauheni Sivukha    16 年前
    1. 看 Dryad linq . 它已经在学术上发表了,而且可能是有用的。
    2. Win HPC server -微软的分布式计算企业解决方案。
    3. 一些 code samples 这有助于通过分析性能计数器来构建负载平衡。
    4. 微软有 StockTrader 示例应用程序(带有源代码),这是带有手写循环负载平衡的可分发SOA示例。
        2
  •  1
  •   Taiwo    15 年前

    作为一种替代方法,您可以使用每台机器的峰值性能比估计值来安排作业。只有在考虑负载平衡系统的CPU运行时性能时,这才是非常有效的。这种方法忽略了I/O、集群大小、网络性能、内存模型类型等问题。看一看 http://dx.doi.org/10.1145/1513895.1513901

    更精确(近负载平衡作业分配)方法的建议将是算法-依赖于计算机体系结构的方法。在这种情况下,更高优先级的作业可能被安排到满足其需求的最佳服务器上,但是您首先需要确定作业到服务器的最佳映射。您也可以在多处理器(而不是单处理器)上应用一些操作系统调度算法的方法。希望你会觉得这有帮助。

        3
  •  0
  •   Jørn Jensen    16 年前

    看起来这和.NET没有什么关系。

    但是把你的机器想象成“工作线程”,在可用的CPU(或其他重要资源)上创建一个可用机器的“池”,然后利用你对每个任务的了解将每个任务推送到最适合的机器上。

    如果您事先知道所有的作业,那么您可能会使用“最佳匹配”算法在正确的机器上按正确的顺序安排它们。你也可以看看“削减库存”的算法; http://en.wikipedia.org/wiki/Cutting_stock_problem …

        4
  •  0
  •   Steve Severance    16 年前

    Microsoft最近发布了 paper 在他们的昆西调度器上。如果您只是在优化CPU利用率,那么一个非常简单的解决方案可以找到全局最优。如果需要跨多个轴进行优化,那么问题空间显然会更复杂。

    你的集群有多大?如何处理围绕失败案例的优化?它们重要吗?有IO吗?数据是否具有磁盘相关性?是否有多个地方可以管理一份工作?所有的事情都要考虑。

    推荐文章