我有一些服務器處理世界的矩形塊,稱他們爲「地區」。當一個玩家從一個區域移動到另一個區域時,如果該區域不屬於當前服務器,則所有玩家數據必須發送到擁有他們剛進入的區域的服務器。使用圖分配鄰居敏感工作的算法
你可以想象一個區域只是一個包含4個鄰居(連接區域)的圖上的一個節點。圖形增長並縮小,因此我定期重新平衡服務器之間的工作分配。
我想使用算法來優化區域分配給服務器,以下列3點考慮:
- 平衡的工作分配與問候到節點的權重,即數量之前觀察過的球員;如果我劃分所有節點的權重總和,那麼我需要點擊「好的」點,每個服務器處理的總權重與系統中的其他所有服務器大致相同。
- 區域的連續性;考慮到上述情況,節點需要彼此相鄰以最小化在服務器之間交換播放器。
- 並且在(2)上延伸,考慮從一個區域到另一個區域的交換次數。一種更喜歡兩個區域在同一個服務器中組合在一起的方式,因爲它們表現出在它們之間移動的玩家的高流量,而不會破壞(1)。
我已經考慮過,我可以實現這一目標的一種方法是使用原始填充,將分數賦予幾種類型的區域分配「填充」,但這是O(n^2),可能不是非常適合這項任務。
我想到的另一種算法是從最高流量區域開始,選擇交叉點最高的節點,直到滿足最低工作閾值。例如,這將是O(n),但可能會產生非常「擱淺」的空間分配,例如,交叉在工作重新分配之間交替。
是否有另一種方法可以將區域分配給我的服務器,比如O(n)?
因爲它不只是抽象的問題,而且有真正的用例:你經常改變你的服務器的結構嗎?你真的有這麼多的服務器,重要的是添加一個新的節點將是O(n^2),而不是O(n)?或者我錯過了什麼? –
'n'是區域(即10,000)而不是服務器的數量。 – kvanberendonck