我有许多服务器处理世界上的矩形块,称之为“区域”。当玩家从一个区域移动到另一个区域时,如果该区域不属于当前服务器,则必须将所有玩家数据发送到拥有他们刚搬入的区域的服务器。
您可以想象一个区域只是一个图形上有4个邻居(连接区域)的节点。图表会增长和缩小,因此我会定期重新平衡服务器之间的工作分配。
我想使用算法以最佳方式将区域分配给服务器,并考虑以下3点:
我认为我可以实现这一目标的一种方法是使用粗略的填充,为几种类型的区域分配“填充”分配分数,但这是O(n ^ 2),可能不太适合任务。
我想到的另一种算法从流量最高的区域开始,选择具有最高交叉点的节点,直到达到最小工作阈值。这将是O(n),但可能产生非常“搁浅”的空间分配,例如,交叉在工作重新分配之间的方向上交替。
我是否可以通过另一种方式为服务器分配区域,例如O(n)?
答案 0 :(得分:1)
据我所知,没有简单快捷的方法可以分割节点,从而创建最佳的边缘切割。由于您计划仅在少数服务器上运行它并且您知道图形的外观,我认为您可以简单地计算区域的权重并优化分割,以便每个区域具有相同的权重。
这应该会给你很好的结果。在100或1000台服务器上运行时,由于您需要保持平衡,因此需要更长的时间。您仍然知道图表的结构,并应该利用这些信息。
如果您不知道结构,有几种算法可以尝试以集中或分散的方式计算最佳边缘切割,但它们都不是您正在寻找的,因为它是NP复杂问题。我必须在Giraph - Ja-Be-Ja from KTH (Royal Institute of Technology)之上实现一个,并且他们将算法与其他的算法进行比较。所以你可以看到你的想法肯定会为你的问题提供更好的结果。
希望这有帮助