云時代架構之游戲服務器的架構演進
云時代架構之游戲服務器的架構演進
現代電子游戲,基本上都會使用一定的網絡功能。從驗證正版,到多人交互等等,都需要架設一些專用的服務器,以及編寫在服務器上的程序。因此,游戲服務器端軟件的架構,本質上也是游戲服務器這個特定領域的軟件架構。
游戲服務器端,是一個會長期運行的程序,并且它還要服務于多個不定時,不定點的網絡請求。所以這類軟件的特點是要非常關注穩定性和性能。這類程序如果需要多個協作來提高承載能力,則還要關注部署和擴容的便利性;同時,還需要考慮如何實現某種程度容災需求。由于多進程協同工作,也帶來了開發的復雜度,這也是需要關注的問題。
一個萬能的架構,必定是無能的架構。一個優秀的架構,則是正好把握了對應業務領域的核心功能產生的。游戲領域的功能特征,于服務器端系統來說,非常明顯的表現為幾個功能的需求,是架構設計決定性因素。基于游戲領域的功能特征,對服務器端系統來說,有以下幾個特殊的需求:1,對于游戲數據和玩家數據的存儲2,對玩家數據進行數據廣播和同步3,把一部分游戲邏輯在服務器上運算,做好驗證,防止外掛。
針對以上的需求特征,在服務器端,我們往往會關注對電腦內存和CPU的使用,以求在特定業務代碼下,能盡量滿足承載量和響應延遲的需求。最基本的做法就是“空間換時間”,用各種緩存的方式來以求得CPU和內存空間上的平衡。在CPU和內存之上,是另外一個約束因素:網卡。網絡帶寬直接限制了服務器的處理能力,所以游戲服務器架構也必定要考慮這個因素。內存架構:主要決定服務器如何使用內存,以最大化利用服務器端內存來提高承載量,降低服務延遲。邏輯架構:設計如何使用進程、線程、協程這些對于CPU調度的方案。選擇同步、異步等不同的編程模型,以提高服務器的穩定性和承載量。可以分區分服,也可以采用世界服的方式,將相同功能模塊劃分到不同的服務器來處理。
最早的游戲服務器是比較簡單的,如UO《網絡創世紀》的服務端一張3.5寸軟盤就能存下。基本上只是一個廣播和存儲文件的服務器程序。后來由于國內的外掛、盜版流行,各游戲廠商開始以MUD為模型,建立主要運行邏輯在服務器端的架構。這種架構在MMORPG類產品的不斷更新中發揚光大,從而出現了以地圖、視野等分布要素設計的分布式游戲服務器。而在另外一個領域,休閑游戲,天然的需要集中超高的在線用戶,所以全區型架構開始出現。現代的游戲服務器架構,基本上都希望能結合承載量和擴展性的有點來設計,從而形成了更加豐富多樣的形態。【艾娜】