负载均衡和调度算法

时间:2010-06-15 06:42:30

标签: algorithm machine-learning load-balancing

所以这是我的问题:

我有几种不同的配置服务器。我有不同的计算(工作);我可以预测大约每项工作需要花多长时间才能完成。另外,我有优先事项。我的问题是如何保持所有机器加载99-100%并以最佳方式安排作业。

每台机器一次可以进行多次计算。工作被推到了机器上。中央机器知道每台机器的当前负载。另外,我想在这里分配一些机器学习,因为我会知道每个工作的统计数据(启动,完成,CPU负载等)。

如何以最佳方式分配工作(计算),并牢记优先事项?

任何建议,想法或算法?

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

4 个答案:

答案 0 :(得分:2)

  1. 看看Dryad linq。它已经在学术上发布,可能很有用。
  2. Win HPC server - Microsoft的分布式计算企业解决方案。
  3. 一些code samples可以通过分析性能计数器来帮助构建负载平衡。
  4. Microsoft拥有StockTrader示例应用程序(带有源代码),这是带有手写RoundRobin负载平衡的可分发SOA的示例。

答案 1 :(得分:1)

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

更准确(近负载均衡作业分配)方法的提议将是算法 - 依赖于计算机体系结构的方法。在这种情况下,可以将更高优先级的作业调度到满足其需求的最佳服务器 - 但是您需要首先确定作业到服务器的最佳映射。您还可以在多处理器(非单处理器)上应用OS调度算法的一些方法。希望你会发现这有用。

答案 2 :(得分:0)

看起来这与.NET几乎没什么关系。

但是将您的机器视为“工作线程”,在可用CPU(或其他重要资源)上订购可用机器的“池”,然后使用您对每项任务的了解将每项工作推送到最适合的机器。

如果您事先了解所有工作,则可以使用“最适合”算法在正确的计算机上按正确顺序安排它们。您还可以查看“切割库存”算法; http://en.wikipedia.org/wiki/Cutting_stock_problem ......

答案 3 :(得分:0)

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

您的群集有多大?你如何处理优化失败案例?他们重要吗? IO有吗?数据是否具有磁盘关联性?是否有不止一个地方可以办一份工作?所有要考虑的事情。