單一世界架構初探之動態分割槽

2021-04-30 07:49:11 字數 1547 閱讀 3057

靜態分割槽,讓每個伺服器負責特定區域,技術上相對簡單;而動態分割槽實際上更接近於集群技術,按照負載自動調整區域,但技術更加複雜。上面所論述的計算遷移就是為了討論動態分割槽做的準備。

在 魔獸世界中,暴風城和閃金鎮是2個典型,暴風城是個主城,人多、地形複雜,而閃金鎮周圍都是森林,人也多是匆匆過客,除了少數公升級做任務。一般說來,我們 可以拿2個伺服器,乙個負責暴風城,而另外乙個負責閃金鎮。顯然,這種劃分,會導致2個伺服器嚴重不平衡,動態分割槽就是為了處理這種情況。在晚上的時候, 沒什麼人在暴風城,2個伺服器的負荷差不多,可以按照固定區域。隨著暴風城人越來越多,暴風城的伺服器肯定負荷會越來越高,那麼,就逐步擴大閃金鎮伺服器 負責的場景,而進一步收縮暴風城的負責的場景,這是一種策略。在某種極端的情況,比如發生部落進攻暴風城的情況,那麼閃金鎮伺服器可能要併入暴風城,或者 由其他地方,比如西部荒野伺服器併入暴風城,共同承當計算任務。

要實現動態分割槽,除了計算遷移外,還必須有個基礎,就是地圖的小區化【cell】,移動手機的蜂窩一樣。每個伺服器負責相鄰的一組cell,cell是伺服器的最小劃分單位。下面我們將繼續討論動態分割槽的一些問題。

1、 動態分割槽的首要問題cell遷移問題。首先必須有個完整地圖的伺服器,來負責分配所有的cell,哪個cell在哪個伺服器上,至少是知道。當cell遷 移時,實時更新這個資訊。同時將整個cell相關的資料遷移到另外乙個機器上。比如,我們將暴風城劃分為1000個區,遷移時只要指定哪些區轉移到閃金鎮 就可以了。

2、分割槽的邊界衝突。不管是靜態分割槽,還是動態分割槽,由於區之間在邏輯是無縫的,所以區之間的衝突是不可避免的。我們在考查魔獸 世界時,會發現有趣的事情。從艾澤拉斯到外域,必須穿過黑暗之門,穿過的時候,就不再看到原有的世界,而且有明顯的延時。從這個現象,我推測艾澤拉斯和外 域是分布在不同的伺服器上,所以他不需要解決區之間邊界衝突問題。至於艾澤拉斯是否是乙個cell,或者是無數個cell,我不知道。

3、 區的形狀。每個cell在實現上,必須有個嚴格的邊界,畢竟伺服器是很難計算出模糊邊界的。同時,由於分割槽邊界衝突的存在,我們必須讓邊界盡可能的小,於 是這個分割槽的形狀必須滿足最大的面積而邊長最小,顯然圓形是最高的選擇。但在實現圓形在劃分邊界時,運算比較複雜。在實踐中,我們參考蜂窩的六邊形形狀, 應該效果最好,至於為什麼,可以找資料,但移動就是這麼幹的,我相信還是有道理,這種核心的東西是經得起考驗的。

4、分割槽同步是指在2個伺服器上,邊界的區必須是同步的,並且內容完全一樣。這主要是為了解決某個事件在邊界往返時,出現各種異常。但這也不是沒有問題的,我們想下,如果有個區是被同步的,那麼同步區和非同步區之間邊界由誰處理呢?另外,同步區由誰計算呢?如果是共同計算,就會有結果一致性問題,如果由其中乙個計算,那麼同步和非同步區的邊界計算同樣是個問題。

其實,區的形狀和同步沒有異議,最多將有6個伺服器需要同步這個區的資料。我傾向於乙個伺服器計算這個cell,其他服務向他傳遞邊界資料,同時同步該cell的資料。

5、分割槽的大小。乙個分割槽應該多大呢?有3個原則,乙個是分割槽內部計算量必須是乙個伺服器能夠容忍的。另外乙個是分割槽傳遞的資料,必須是網路能夠容忍的。最後乙個是分割槽內部的資料是邏輯上能夠容忍的。前面2點很容易理解,第三個有點難理解,其實也簡單,如果乙個分割槽只有乙個桌子那麼大,那麼圍著桌子的6個人來往走動,將導致劇烈的網路傳輸。

單一世界架構初探之登入管理

現在我們進入實質性的 階段,首先是登入管理。單點登入,意味著,所有的請求都將被乙個ip處理。而海量請求,意味著所有的登入管理都會在乙個ip的完成,天啦,如果到了10m那是什麼概念。即 使1m s的處理速度,也要10s才能完成乙個登入管理,那我估計,這個應用早被人罵了體無完膚,當然,魔獸世界可能例外,...

單一世界架構初探之終端分布

在單一世界中,分布了眾多的終端,如果沒有利用終端計算能力,實在是浪費巨大的資源。有些人在 p2p模式,但我認為p2p仍然不是最好的利用方式。我們在前面曾經 過,在單一世界中,網路延時以及玩家眾多是很致命的影響因素,如果p2p的話,是很難保證客戶端之間的傳輸速度的,那麼在高實時的遊戲中,玩家體驗就比較...

單一世界架構初探之服務部署

單一世界的服務部署有很大的講究。我曾經在論壇上提到過大分布小集群的概念,就是跟伺服器部署有關係。我們知道,單一世界會遭遇很大的網路流量和使用者數,使用集群只能解決計算能力,卻解決不了網路流量。我們如果將所有的地圖集中放在中國某地的乙個集群中,那麼該集群將承受巨大的頻寬壓力。和http不同的是,單一世...