2

假设我有一个由 n 个Erlang节点组成的集群,其中一些可能在我的 LAN 上,而另一些可能使用 WAN(即通过 Internet)连接,有什么合适的机制来满足 a) 不同的带宽可用性/行为(例如,引起的延迟)和b)具有不同计算能力的节点(甚至是内存限制)?

换句话说,我如何优先考虑具有大量计算能力的本地节点,而不是那些具有高延迟并且可能不太强大的节点,或者我如何在理想情况下优先考虑具有高传输延迟的高性能远程节点来专门执行这些进程相对巨大的计算/传输(即每条消息,每时间单位完成的工作)比率?

我主要考虑通过向集群中的每个节点发送一个基准过程以在初始化期间运行来对它们进行基本基准测试,以便可以计算消息传递所涉及的延迟以及整体计算速度(即使用一个节点-特定的计时器来确定节点终止任何任务的速度)。

可能,类似的事情必须重复进行,一方面是为了获得代表性数据(即平均数据),另一方面它甚至可能在运行时有用,以便能够动态调整改变运行时条件。

(在同样的意义上,人们可能希望优先考虑本地运行的节点而不是其他机器上运行的节点)

这意味着有望优化内部作业调度,以便特定节点处理特定作业。

4

2 回答 2

1

您正在谈论的问题已经在网格计算的背景下以许多不同的方式得到解决(例如,参见Condor)。为了更彻底地讨论这个问题,我认为需要一些额外的信息(要解决的问题的同质性,对节点的控制程度[即是否存在意外的外部负载等?])。

实现自适应作业调度程序通常还需要调整探测可用资源的频率(否则探测的开销可能会超过性能增益)。

理想情况下,您可能能够使用基准测试来提出一个经验(统计)模型,该模型允许您预测给定问题的计算难度(需要良好的领域知识和对执行速度有很大影响的问题特征,并且是易于提取),另一个用于预测通信开销。将两者结合使用应该可以实现一个简单的调度程序,该调度程序基于预测模型做出决策,并通过考虑实际执行时间作为反馈/奖励来改进它们(例如,通过强化学习)。

于 2009-05-22T08:07:54.840 回答
1

我们已经做了类似的事情,仅在我们的内部 LAN/WAN 上(WAN 是例如旧金山到伦敦)。问题归结为以下因素的组合:

  1. 简单地通过本地(内部)调用进行远程调用的开销
  2. 节点的网络延迟(作为请求/结果负载的函数)
  3. 远程节点的性能
  4. 执行功能所需的计算能力
  5. 如果存在共享的“静态”数据集,则调用批处理是否提供任何性能改进。

对于 1. 我们假设没有开销(与其他开销相比可以忽略不计)

对于 2. 我们使用探测消息主动测量它来测量往返时间,我们从实际调用中整理信息

对于 3. 我们在节点上测量它并让它们广播该信息(这取决于节点上的负载电流而变化)

对于 4 和 5。我们根据经验对给定批次进行了计算

然后调用者解决了获得一批调用的最小解决方案(在我们的例子中为一大堆衍生品定价)并将它们分批发送到节点。

使用这种技术,我们可以更好地利用我们的计算“网格”,但这需要付出相当多的努力。我们还有一个额外的优势,即网格仅由该环境使用,因此我们有更多的控制权。添加互联网组合(可变延迟)和网格的其他用户(可变性能)只会增加复杂性并可能减少回报......

于 2009-06-16T22:13:18.283 回答