使用图分布邻居敏感工作的算法

时间:2014-02-12 07:48:41

标签: algorithm distributed

我有许多服务器处理世界上的矩形块,称之为“区域”。当玩家从一个区域移动到另一个区域时,如果该区域不属于当前服务器,则必须将所有玩家数据发送到拥有他们刚搬入的区域的服务器。

您可以想象一个区域只是一个图形上有4个邻居(连接区域)的节点。图表会增长和缩小,因此我会定期重新平衡服务器之间的工作分配。

我想使用算法以最佳方式将区域分配给服务器,并考虑以下3点:

  1. 平衡工作分布关于节点的权重,即先前在其中观察到的玩家数量;如果我划分所有节点的权重总和,我需要点击“好”点,每个服务器处理的总权重大致等于系统中的每个其他服务器。
  2. 区域的邻接;考虑到上述情况,节点需要彼此相邻,以最大限度地减少服务器之间交换播放器。
  3. 并在(2)上延伸,考虑从一个区域到另一个区域的交换次数。一种优选两个区域在同一服务器中组合在一起的方式,因为它们表现出在它们之间移动的玩家的高流量,而不会破坏(1)。
  4. 我认为我可以实现这一目标的一种方法是使用粗略的填充,为几种类型的区域分配“填充”分配分数,但这是O(n ^ 2),可能不太适合任务。

    我想到的另一种算法从流量最高的区域开始,选择具有最高交叉点的节点,直到达到最小工作阈值。这将是O(n),但可能产生非常“搁浅”的空间分配,例如,交叉在工作重新分配之间的方向上交替。

    我是否可以通过另一种方式为服务器分配区域,例如O(n)?

1 个答案:

答案 0 :(得分:1)

据我所知,没有简单快捷的方法可以分割节点,从而创建最佳的边缘切割。由于您计划仅在少数服务器上运行它并且您知道图形的外观,我认为您可以简单地计算区域的权重并优化分割,以便每个区域具有相同的权重。

这应该会给你很好的结果。在100或1000台服务器上运行时,由于您需要保持平衡,因此需要更长的时间。您仍然知道图表的结构,并应该利用这些信息。

如果您不知道结构,有几种算法可以尝试以集中或分散的方式计算最佳边缘切割,但它们都不是您正在寻找的,因为它是NP复杂问题。我必须在Giraph - Ja-Be-Ja from KTH (Royal Institute of Technology)之上实现一个,并且他们将算法与其他的算法进行比较。所以你可以看到你的想法肯定会为你的问题提供更好的结果。

希望这有帮助