【问题标题】:Algorithm for distributing neighbour sensitive work using a graph使用图分配邻居敏感工作的算法
【发布时间】:2014-03-10 09:51:59
【问题描述】:

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

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

我想使用一种算法来优化将区域分配到服务器,考虑以下 3 点:

  1. 平衡的工作分配关于节点的权重,即先前在其中观察到的玩家数量;如果我除以所有节点的权重之和,我需要找到每个服务器处理的总权重大致等于系统中所有其他服务器的“好”点。
  2. 区域的连续性;考虑到上述情况,节点需要彼此相邻,以尽量减少服务器之间的玩家交换。
  3. 并在 (2) 上进行扩展,考虑从一个区域到另一个区域的交换次数。一种更喜欢将两个区域组合在同一服务器中的方法,因为它们表现出在它们之间移动的玩家流量很高,而不会破坏 (1)。

我认为实现此目的的一种方法是使用粗略的填充填充,它将分数分配给几种类型的区域分配“填充”,但这是 O(n^2),可能不太适合任务。

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

有没有其他方法可以将区域分配给我的服务器,比如 O(n)?

【问题讨论】:

  • 因为这不仅仅是抽象的问题,而是真实的用例:您是否经常更改服务器的结构?你真的有这么多服务器,添加一个新节点将是 O(n^2),而不是 O(n) 很重要吗?还是我错过了什么?
  • n 是区域(即 10,000)而不是服务器数量。

标签: algorithm distributed


【解决方案1】:

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

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

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

希望对你有帮助

【讨论】:

  • 有趣的论文。通过一些修改,我认为它可能能够完全满足我的需要。不过,我仍在尝试找出建议的复杂性
猜你喜欢
  • 2013-06-19
  • 2020-06-21
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2015-09-14
  • 2012-02-16
  • 2020-08-12
相关资源
最近更新 更多