《王者榮耀游戲服務器架構演進(完整版)》讀后感


原文地址:https://mp.weixin.qq.com/s/l1pnVc_E-Nz6Z27iC0G6GA

1.游戲服務器特征

游戲服務器端,是一個會長期運行的程序,並且它還要服務於多個不定時,不定點的網絡請求。所以這類軟件的特點是要非常關注穩定性和性能。這類程序如果需要多個協作來提高承載能力,則還要關注部署和擴容的便利性;同時,還需要考慮如何實現某種程度容災需求。由於多進程協同工作,也帶來了開發的復雜度,這也是需要關注的問題。

功能約束,是架構設計決定性因素。基於游戲領域的功能特征,對服務器端系統來說,有以下幾個特殊的需求:

對於游戲數據和玩家數據的存儲

對玩家數據進行數據廣播和同步

把一部分游戲邏輯在服務器上運算,做好驗證,防止外掛。

針對以上的需求特征,在服務器端,我們往往會關注對電腦內存和CPU的使用,以求在特定業務代碼下,能盡量滿足承載量和響應延遲的需求。最基本的做法就是“空間換時間”,用各種緩存的方式來以求得CPU和內存空間上的平衡。

在CPU和內存之上,是另外一個約束因素:網卡。網絡帶寬直接限制了服務器的處理能力,所以游戲服務器架構也必定要考慮這個因素。

2.游戲服務器架構要素

對於游戲服務端架構,最重要的三個部分就是,如何使用CPU、內存、網卡的設計:

內存架構:主要決定服務器如何使用內存,以最大化利用服務器端內存來提高承載量,降低服務延遲。

邏輯架構:設計如何使用進程、線程、協程這些對於CPU調度的方案。選擇同步、異步等不同的編程模型,以提高服務器的穩定性和承載量。可以分區分服,也可以采用世界服的方式,將相同功能模塊划分到不同的服務器來處理。

通信模式:決定使用何種方式通訊。基於游戲類型不同采用不同的通信模式,比如http,tcp,udp等。

 

2.服務器演化進程

(1)卡牌等休閑游戲弱交互游戲

服務器基於游戲類型不同,所采用的架構也有所不同,我們先講一下簡單的模型,采用http通信模式架構的服務器:

 

 

這種服務器架構和我們常用的web服務器架構差不多,也是采用nginx負載集群支持服務器的水平擴展,memcache做緩存。

唯一不同的地點不同的在於通信層需要對協議再加工和加密,一般每個公司都有自己的一套基於http的協議層框架,很少采用開源框架。

(2)長鏈接游戲服務器

長鏈接游戲和弱聯網游戲不同的地方在於,長連接中,玩家是有狀態的,服務器可以時時和client交互,數據的傳送,不像弱聯網一般每次都需要重新創建一個連接,消息傳送的頻率以及速度上都快於弱聯網游戲。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM