遊戲服務器的架構設計

遊戲服務器的架構設計

作者: xiaohyy

 

遊戲服務器的設計是一項頗有挑戰性的工作,遊戲服務器的發展也由以前的單服結構轉變爲多服機構,甚至出現了bigworld引擎的分佈式解決方案,最近瞭解到Unreal的服務器解決方案atlas也是基於集羣的方式。

負載均衡是一個很複雜的課題,這裏暫不談bigworld和atlas的這類服務器的設計,更多的是基於功能和場景劃分服務器結構。

首先說一下思路,服務器劃分基於以下原則:
1:分離遊戲中佔用系統資源(cpu,內存,IO等)較多的功能,獨立成服務器
2:在同一服務器架構下的不同遊戲,應儘可能的複用某些服務器(進程級別的複用)
3:以多線程併發的編程方式適應多核處理器。
4:寧可在服務器之間多複製數據,也要保持清晰的數據流向
5:主要按照場景劃分進程,若需按功能劃分,必須保持整個邏輯足夠的簡單,並滿足以上1,2點

服務器結構圖:

各個服務器的簡要說明:

Gateway:應用網關,主要用於保持和client的連接,該服務器需要2種IO,對client採用高併發連接,低吞吐量的網絡模型,如IOCP等,對服務器採用高吞吐量連接,如阻塞或異步IO。

網關主要有以下用途:
1:分擔了網絡IO資源
2:同時,也分擔了網絡消息包的加解密,壓縮解壓等cpu密集的操作。
3:隔離了client和內部服務器組,對client來說,它只需要知道網關的相關信息即可(ip和port)。
4:client由於一直和網關保持常連接,所以切換場景服務器等操作對client來說是透明的。
5:維護玩家登錄狀態

World Server 是一個控制中心,它負責把各種計算資源分佈到各個服務器
它具有以下職責:
1:管理和維護多個Scene Server
2:管理和維護多個功能服務器,主要是同步數據到功能服務器
3:複雜轉發其他服務器和Gateway之間的數據
4:實現其他需要跨場景的功能,如組隊,聊天,幫派等

Phys Server 主要用於玩家移動,碰撞等檢測
所有玩家的移動類操作都在該服務器上做檢查,所以該服務器本身具備所有地圖的地形等相關信息。具體檢查過程是這樣的:首先,Worldserver收到一個移動信息,WorldServer收到後向Phys Server請求檢查,Phys Server檢查成功後再返回給world Server,然後world server傳遞給相應的Scene Server.

Scene Server 場景服務器,按場景劃分,每個服務器負責的場景應該是可以配置的。理想情況下是可以動態調節的。

ItemMgr Server 物品管理服務器,負責所有物品的生產過程。在該服務器上存儲一個物品掉落數據庫,服務器初始化的時候載入到內存。任何需要產生物品的服務器均與該服務器直接通信

AIServer 又一個功能服務器,負責管理所有NPC的AI。AI服務器通常有2個輸入,一個是Scene Server發送過來的玩家相關操作信息,另一個時鐘Timer驅動,在這個設計中,對其他服務器來說,AIServer就是一個擁有很多個NPC的客戶端。AIserver需要同步所有與AI相關的數據,包括很多玩家數據。由於AIServer的Timer驅動特性,可在很大程度上使用TBB程序庫來發揮多核的性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章