假设我有一个由n个Erlang节点组成的群集,其中一些节点可能在我的局域网上,而其他节点可能是通过广域网(即通过互联网)连接的,那么有什么合适的机制来满足a)不同的带宽可用性/行为(例如,延迟引起的)和b)具有不同计算能力(甚至是内存限制)的节点?
换句话说,我如何确定具有大量计算能力的本地节点的优先级,而不是那些具有高延迟和可能不太强大的节点,或者我如何理想地优先考虑具有高传输延迟的高性能远程节点,以专门执行具有相对巨大的计算/传输比率(即,每条消息、每时间单位完成的工作)的那些进程?
我主要考虑通过在初始化期间向集群中的每个节点发送一个基准进程来对它们进行基准测试,以便可以计算消息传递所涉及的延迟以及整体计算速度(即,使用特定于节点的计时器来确定节点终止任何任务的速度)。
也许,这样的事情必须重复进行,一方面是为了获得代表性数据(即平均数据),另一方面,它甚至可能在运行时有用,以便能够动态调整以适应不断变化的运行时条件。
(在相同的意义上,人们可能希望将本地运行的节点优先于在其他计算机上运行的节点)
这意味着有希望优化内部作业调度,以便特定节点处理特定作业。
发布于 2009-06-16 22:13:18
我们只在内部LAN/WAN (例如从旧金山到伦敦的WAN)上执行了类似的操作。问题归结为以下几个因素的组合:
简单地通过本地(内部)调用进行远程调用的开销
对于1.我们假设没有开销(与其他方法相比可以忽略不计)
对于2,我们使用探测消息来测量往返时间,并从实际调用中整理信息。
对于3。我们在节点上测量它,并让它们广播该信息(这取决于节点上活跃的负载电流)。
对于4和5,我们对给定的批次进行了经验计算。
然后,调用者求解以获得一批调用的最小解(在我们的示例中,为一大堆衍生品定价),并将它们分批发送到节点。
我们使用这种技术更好地利用了我们的计算“网格”,但这是相当费力的。我们有一个额外的优势,那就是网格只被这个环境使用,所以我们有更多的控制。加入互联网混合(可变延迟)和其他网格用户(可变性能)只会增加复杂性,并可能导致回报递减……
发布于 2009-05-22 08:07:55
您正在讨论的问题已经在网格计算的上下文中以许多不同的方式得到了解决(例如,请参阅Condor)。为了更深入地讨论这一点,我认为需要一些额外的信息(要解决的问题的同质性,对节点的控制程度,即是否存在意外的外部负载等)。
实现自适应作业分派器通常还需要调整探测可用资源的频率(否则,探测产生的开销可能会超过性能收益)。
理想情况下,您可以使用基准测试提出一个经验(统计)模型,该模型允许您预测给定问题的计算难度(需要良好的领域知识和对执行速度有很大影响且易于提取的问题特性),以及另一个预测通信开销的模型。两者结合使用应该可以实现一个简单的调度程序,该调度程序基于预测模型做出决策,并通过考虑实际执行时间作为反馈/奖励(例如,通过reinforcement learning)来改进它们。
https://stackoverflow.com/questions/887502
复制相似问题