傳統MMORPG服務器架構
傳統MMORPG服務器組簡化示意
為便于理解,圖中未涉及登錄、充值、DB 緩存/存儲和跨服相關的服務器,是因為在無縫大世界的實現中這些服務要么已有已經成熟的解決方案( 如DB相關)、要么其技術復雜度完全和是否大世界正交(如登錄和充值服務),要么在大世界體系中它是不應該存在的服務器(如跨服服務器)。
為保持服務器名稱與其內涵統一,故對圖1中服務器的功能邊界說明如下
Gate Server : 網關服務器,它的主要功能為接受客戶端連接、客戶端/其它服務器之間的消息透傳及對外網隔離游戲功能服務器。客戶端只需要知道Gate Server的地址并和它進行通信,游戲功能服務器亦如是。
World Server: 世界服務器,它的主要功能分為兩部分,非游戲場景相關邏輯功能(如社交系統、聊天、部分社交任務等等)和游戲場景服務器的管理功能(場景服務器發現、健康檢查、啟動/關閉等)
Zone Server : 游戲場景服務器 ,它的主要功能為游戲除World Server負責外的所有功能,如角色移動與位置同步、技能戰斗、AI、尋路、大部分任務系統功能等。
這兒需要說明的是,Zone 0和 Zone N分管的是不同的游戲場景或游戲服務副本,這些場景之間有明確的邊界,游戲角色在地圖邊界的一邊完全不會感知到邊界另一邊的游戲角色和游戲內容,即不同Zone服務器上的玩家之間彼此之間的場景玩法及位置等信息完全隔離。
如下圖所示,游戲地圖共分為6個Zone (A~F),其中Zone A中有玩家a(標紅),它的熱區范圍(AOI)被藍色圓圈所覆蓋。
在經典MMORPG服務器架構中,因為Zone之間的隔離性,玩家a只看到了藍色圈中變藍的那些玩家,他看不到Zone A之外其它Zone中被AOI實際位置所覆蓋的玩家,如位于Zone C中的玩家b。當玩家從跨越Zone的邊界,他就會從原來Zone的玩家視野中消失,進而出現在新進入Zone的玩家視野,即一個玩家不可能同時出現在兩個Zone玩家的視野,故兩個Zone上的玩家之間也不可能發生戰斗。
當游戲存在M個區服的時候,簡化的服務器架構
拋開運營商業策略的原因,傳統MMORPG之所以在技術層面需要分區分服,其主要原因有:
AOI范圍內的計算和消息復雜度和該范圍內所覆蓋的Entity(包括玩家)的個數的平方成正比
單臺游戲服務器硬件所能提供的計算量、網絡帶寬、存取IO速率有限,故其只能容納有限數量的Entity仿真
故其策略是預估單個區服和單地圖可容納的人數上限,把玩家隔離在不同的區和不同的地圖服務器以保證游戲體驗的流暢性。
經典游戲服務器架構的優點:
部署簡單,進程數量少,按MMO的區服容納人數標準,上述服務器進程除了網關、付費、DB服外大多可以部署在一臺物理機上,容易做到一鍵發布。
開發門檻低,游戲場景服務器功能高度內聚,游戲主體邏輯可運行在單線程順序環境下,不需要考慮復雜異步通信和多線程的不確定性
部分無狀態服務器(Gate , Pay ,Login)或對延遲不敏感的服務器(World)雖然在架構上是單點,但擴展為高可用的分布式服務器的成本和難度很低。
獨立Zone用于跨服的功能易于實現——在Server Group之間加上跨服消息轉發的服務器即可以實現相關功能
配合游戲運營過程中的合區功能易于實現,在角色及道具ID生成和玩家可輸入的唯一標示(如角色名,公會名等)時候把區服信息納入考慮或做為標識頭的一部分即可解決運營中后期數據合區時DB表項沖突的絕大部分問題。