【发布时间】:2014-03-10 09:51:59
【问题描述】:
我有许多服务器处理世界的矩形块,称它们为“区域”。当玩家从一个区域移动到另一个区域时,如果该区域不属于当前服务器,则必须将所有玩家数据发送到拥有他们刚刚移动到的区域的服务器。
您可以想象一个区域只是具有 4 个邻居(连接区域)的图上的一个节点。图表会增长和缩小,因此我会定期重新平衡服务器之间的工作分配。
我想使用一种算法来优化将区域分配到服务器,考虑以下 3 点:
- 平衡的工作分配关于节点的权重,即先前在其中观察到的玩家数量;如果我除以所有节点的权重之和,我需要找到每个服务器处理的总权重大致等于系统中所有其他服务器的“好”点。
- 区域的连续性;考虑到上述情况,节点需要彼此相邻,以尽量减少服务器之间的玩家交换。
- 并在 (2) 上进行扩展,考虑从一个区域到另一个区域的交换次数。一种更喜欢将两个区域组合在同一服务器中的方法,因为它们表现出在它们之间移动的玩家流量很高,而不会破坏 (1)。
我认为实现此目的的一种方法是使用粗略的填充填充,它将分数分配给几种类型的区域分配“填充”,但这是 O(n^2),可能不太适合任务。
我想到的另一种算法从流量最高的区域开始,并选择具有最高交叉的节点,直到它满足最小工作阈值。这将是 O(n),但可能会产生非常“搁浅”的空间分配,例如,交叉在工作重新分配之间的方向交替变化。
有没有其他方法可以将区域分配给我的服务器,比如 O(n)?
【问题讨论】:
-
因为这不仅仅是抽象的问题,而是真实的用例:您是否经常更改服务器的结构?你真的有这么多服务器,添加一个新节点将是 O(n^2),而不是 O(n) 很重要吗?还是我错过了什么?
-
n是区域(即 10,000)而不是服务器数量。
标签: algorithm distributed