优先考虑Erlang节点

时间:2009-05-20 11:57:40

标签: performance erlang benchmarking messaging bandwidth-throttling

假设我有一个n Erlang个节点的集群,其中一些节点可能在我的LAN上,而其他节点可能使用WAN连接(即通过互联网),适合的机制是什么a)不同的带宽可用性/行为(例如,引发的延迟)和b)具有不同计算能力的节点(甚至是内存约束)?

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

理想情况下,您可以使用基准测试来提出经验(统计)模型,该模型允许您预测给定问题的计算硬度(需要良好的领域知识和对执行具有高影响的问题特征速度和提取简单),另一个预测通信开销。结合使用这两者可以实现一个简单的调度程序,该调度程序将其决策建立在预测模型上,并通过将实际执行时间作为反馈/奖励(例如,通过reinforcement learning)来改进它们。

答案 1 :(得分:1)

我们在内部局域网/广域网上做了类似的事情(广域网是旧金山到伦敦)。问题归结为这些因素的组合:

  1. 通过本地(内部)呼叫进行远程呼叫的开销
  2. 节点的网络延迟(作为请求/结果有效负载的函数)
  3. 远程节点的性能
  4. 执行功能所需的计算能力
  5. 如果存在共享的“静态”数据集,是否批量调用可以提高性能。
  6. 对于1.我们假设没有开销(与其他开销相比可忽略不计)

    对于2.我们使用探测消息主动测量它以测量往返时间,并且我们整理了来自实际呼叫的信息

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

    对于4和5.我们根据经验为给定的批次

    进行了研究

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

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