【问题标题】:Prioritizing Erlang nodes优先考虑 Erlang 节点
【发布时间】:2010-10-27 14:44:28
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: performance erlang benchmarking messaging bandwidth-throttling


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回复,您使用的技术非常符合我的设想(以及我在问题中勾勒出的内容)。我认为看到某种形式的 erlang 基础设施(例如使用 OTP)完全支持这种场景会很有趣。我接受了你的回答,因为它确实非常接近我的场景。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 2022-11-28
      • 2012-11-29
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      相关资源
      最近更新 更多