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