2

假设我有一个n Erlang节点的集群,其中一些节点可能位于我的局域网上,而其他节点可能使用WAN(即通过Internet)连接,那么适合哪些节点)不同的带宽可用性/行为(例如,诱发延迟)和b)具有不同计算能力的节点(或者甚至针对该问题的内存限制)?划分Erlang节点的优先级

换句话说,我如何优先考虑具有大量计算能力的本地节点,而不是那些具有高延迟且可能不那么强大的节点,或者如何理想地将具有高传输延迟的高性能远程节点优先化为特定优先级那些计算/传输量相对较大的过程(即每个消息完成的工作量,每个时间单位)的比率是多少?

我主要是基于基准测试集群中的每个节点,通过向它们发送基准进程以在初始化期间运行来考虑,以便可以计算涉及杂乱的潜伏期以及整体计算速度(即,使用节点特定的计时器来确定节点以任何任务终止的速度)。

可能这样的事情必须重复进行,一方面为了获得有代表性的数据(即平均数据),另一方面它可能甚至在运行时有用,以便成为能够动态调整以适应不断变化的运行环境

(在相同的意义,人们可能希望在本地运行的优先级比那些在其他机器上运行的节点)

这将意味着希望优化内部作业调度,以便特定节点处理具体工作。

回答

1

我们只在内部局域网/广域网(例如旧金山到伦敦的广域网)上做了类似的事情。归结于这些因素的组合的问题:在简单地在一个地方(内部)进行远程呼叫

  1. 塔顶调用
  2. 的网络延迟到节点(作为请求/结果的功能有效载荷)
  3. 远程节点
  4. 要执行的函数
  5. 无论呼叫的配料提供任何性能改进,如果有设置一个共享的“静态”数据所需的计算能力的性能。

对于1.我们假定没有开销(比别人是可忽略的)

对于2.我们积极利用探测消息以测量往返行程时间测量它,我们整理制成实际​​的呼叫信息

对于3.我们测量它的节点上,并让他们的广播的信息(这改变取决于负载电流活性的节点上)

对于4和5,我们的工作了凭经验为给定的批次

然后调用者求解以获得一批调用的最小解(在我们的例子中定价一大堆派生),并将它们分批发送到节点。

我们利用这种技术获得了更好的利用我们的计算“网格”,但这是相当费力的。我们还有额外的优势,即网格仅被这个环境使用,所以我们有更多的控制权。增加互联网组合(可变延迟)和网格的其他用户(可变性能)只会增加复杂性和可能递减的收益...

+0

感谢您的回应,您使用的技术几乎符合我一直在想象(以及我在问题中所勾画的)。我认为看到这种场景会被某种形式的erlang基础架构支持(例如使用OTP)会很有趣。我接受了你的答案,因为它非常接近我的情况。 – none 2009-06-16 22:52:34

1

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

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

理想情况下,您可以使用基准测试来提出一个经验(统计)模型,使您能够预测给定问题的计算硬度(需要良好的领域知识和问题特征,执行速度快且易于提取),另一个用于预测通信开销。两者结合使用可以实现简单的调度程序,该调度程序将其决策基于预测模型,并通过考虑实际执行时间作为反馈/回报(例如,通过reinforcement learning)来改进它们。