馬利麒
(西南交通大學電氣工程學院,成都 610031)
?
一種新型MMOG游戲服務器架構設計方案
馬利麒
(西南交通大學電氣工程學院,成都610031)
摘要:
關鍵詞:
在網絡游戲中,服務器是網絡游戲的大腦和心臟,是網游中最重要的部分,一方面,服務器和客戶端保持連接,負責大量玩家的同時接入。另一方面,服務器負責游戲的運行,包括游戲的同步和廣播,同時,要承擔起避免游戲玩家作弊的責任[1]。當游戲的受歡迎程度很高的時候,游戲玩家數量會激增,這時就會有很高的并發連接數,從而產生大量的數據運算和數據吞吐量,此時服務器的性能決定了玩家的用戶體驗,為了提供良好的服務品質,網絡游戲的服務端的設計顯得尤為重要,進行網絡游戲服務端架構的研究,對于游戲產業的蓬勃發展和現行游戲的開發都有積極的意義[2]。
在網絡游戲中,服務器端負責響應客戶端的連接請求和游戲內的邏輯處理,伴隨著網游的玩家越來越多,服務器端所承受的壓力也越來越大,面對海量的用戶,既要保證流暢的運行環境,又要盡最大可能地提供優質的用戶體驗,就需要依靠一個優秀的服務器架構去支撐,一般來說,服務器架構的設計原則主要包括以下[3]:
●安全。要充分考慮系統更新、異常對系統的沖擊,保證玩家數據的安全可靠性。
●穩定。對于一款MMOG游戲來說,穩定性是最基本也是最重要的指標。要求系統對于資源的消耗可控,有過載控制,能夠長期24小時不間斷運行。
●可擴展。游戲的變化日新月異,內容也會隨版本的更新周期性迭代,這就要求系統容納能力的可擴展與系統功能的可擴展。
●低耦合。各個主要功能均抽象為一個模塊,并且不依賴于具體實現,分別由獨立的服務器運行,盡量做到低耦合,以應對底層實現的變化。
●簡單。每一個模塊盡可能簡單、功能單一,能讓有一定技術經驗和行業背景的人士非常容易理解,不采用過于復雜的設計。
●性能。MMOG很多時候受到了CPU、網絡流量的限制,因此在重點函數(如:戰斗、移動、廣播)的消息處理中優化CPU和流量消耗,避免架構中的單點瓶頸。
若以游戲分區方式來劃分服務器的組織架構,目前可以大體劃分為兩大類[4]:一種是分區分服的方式,平行分成多個大區,單個大區的承載量是有上限限制的,各個大區之間完全獨立,不同大區之間的玩家不可見,也不可進行交互;另一種是全區全服的方式,即一個大區承載所有的玩家,沒有承載上限限制,玩家之間可以進行各種交互,好處就是單個大區玩家數量很多,不會出現鬼服的情況。之所以要做這樣的架構區分,歸納起來只要有以下幾點:
(1)游戲類型的不同,導致需要在DB層做區分:全區全服只有一個DB,而分區分服的每個服都有獨立的DB;
(2)游戲類型的不同,導致數據互通性不同:邏輯服務器網頁游戲必須要做區分,例如各個平臺需要獨立運營,獨立結算,開服活動只能針對制定服等。
(3)單服所能承載的玩家數量級不同,導致架構上調整:全區全服所有玩家在一個服,分區分服分攤在各個不同服,單服玩家數量不在一個級別,導致架構上的考量不同。
這樣架構上的區分,就會導致實際情況中后臺服務器所面臨的壓力也有所區別,主要表現在如下三個方面:
(1)DB層面。分區分服DB承載單服壓力,一般游戲單服PCU(同時在線玩家數)是千級,甚至是萬級,DB讀寫壓力小,采用傳統的MySQL基本可以滿足需求;而全區全服架構的DB承載所有的玩家,PCU可以達到百萬級別,讀寫壓力非常大,單一的MySQL不能滿足讀寫壓力,一般需要專門針對項目去做讀寫并發高的DB組件。
(2)平滑擴容層面。全區全服的擴容是針對整個游戲后臺,在外網不停機擴容中,需要考慮擴容對整個后臺服務器的影響,而分區分服因為面臨擴容的機會比較少,有開服情況,也是獨立的新建整個服,對其他服務器基本沒有影響。
(3)容災層面。全區全服在某個服務器進程出現問題時,該模塊的壓力可能會偏向同等功能的其他進程,需要處理血崩情況,避免影響全服。而分區分服因為天然的單服之間的個理性,在這一層面上壓力小很多。
上述兩種傳統服務器架構方式各有利弊,本文所設計的一種新型的服務器架構是對上述兩種架構融合改進,可以同時享有兩種架構的優點,即邏輯上還是劃分成多個大區,在表現上屬于分區分服的架構方式,但是各個大區之間又采用全區全服的架構方式,使不同大區的玩家可以相互可見并且進行各種交互,以下稱之為全區分服的服務器架構。
3.1設計思想
全區分服式的服務器架構設計思想主要遵循以下四個方面:
(1)邏輯上還是要分區的,邏輯層面各個區間是相互獨立的,在沒有跨服玩法的需求的時候,玩家只能在自己所在的區游戲,排行榜等展示性內容也只能在本區內進行,所以前端游戲服務器、排行榜服務器等邏輯服務器還是需要隔離開來,玩家剛登錄的時候是只能登錄自己所在的區,如果要登錄其他區,是需要重新創建角色的。
(2)不同區玩家之間可以進行交互,進行一些跨服的玩法,不同區間玩家數據可見,所以要求中間路由層以及后面存儲層要統一進行管理,不能隔離開來,以保證前端不同區的游戲服務器可以訪問任何一個區的玩家的數據。
(3)在路由層面和存儲層面可以直接根據玩家的UID(賬號ID)來進行統一管理,既能夠實現需求,有能夠滿足日后擴展性需求。
(4)要求目錄服務器維護所有區的信息,所以,目錄服務器也是統一管理的,而不是每個區都有一個目錄服務器。這樣一方面可以動態擴區,即不需要客戶端升級就可以擴新的區;另一方面也能夠滿足功能需求,客戶端不用再重新登錄一次區內的目錄服務器,減少與服務器交互次數。
3.2邏輯架構
從部署層次來看,服務器邏輯整體分為五層:
●客戶接入層:進行對客戶端連接的收斂與轉發,主要由Connectsvr負責。
●游戲邏輯層:進行業務邏輯運算,主要由Gamesvr負責
●消息中轉層:負責中轉內部消息,使通信各方的物理部署位置透明化。
●數據存儲層:提供數據緩存和持久化功能,包括Uidsvr、Dbsvr和MySQL等。
●服務支持層:提供各種服務器支持,包括與開放平臺、數據平臺等外部組件。
為了更好地介紹全區分服的邏輯架構,本文對架構圖進行了精簡,對于部分服務器是多臺部署的則只精簡為一臺,方便理解。全區分服式的邏輯架構如圖1所示。
從架構圖中我們可以清晰的看到:
(1)客戶端都是通過連接到Connectsvr與服務器進行通信的,Connectsvr負責對多個客戶端的連接進行收斂并轉發。
(2)Dirsvr和各個小區的Gamesvr互通,擁有各個小區的實時容量數據,玩家首先登錄到dirsvr,請求拉取當前小區列表以及各個小區實時狀態,客戶端直接選擇一個小區,并根據負載選擇一個相對壓力較小的Gamesvr直接登錄,并且客戶端本地緩存所登錄的Gamesvr,在此之后與服務器的交互都采取直連這臺Gamesvr,提高效率。
(3)每個小區就是獨立的集合,每個Gamesvr及其附屬進程獨占一臺機器,其他小區進程:Zoneproxysvr(小區路由服務器),Guildsvr(工會服務器),Toplistsvr(排行榜服務器),Bosssvr(世界boss服務器)等小區級的功能服務器一同部署在一臺機器,如果某小區需要部署N個Gamesvr時,實際這個集合的機器數就是N+1。
(4)玩家實際角色數據是緩存在Dbsvr上的,并通過Dbsvr回寫落地到DB,Dbsvr是屬于大區共享的,部署多臺Dbsvr時按照UID(玩家帳戶ID)哈希到對應機器上的,以此實現了玩家數據的大區級互通。
(5)進程直接都是通過Proxysvr路由訪問的,小區級的邏輯則均通過Zoneproxysvr進行轉發,涉及到大區之間的數據交互則連接到Proxysvr進行轉發,各個進程所在機器變動或者新增都只需要更新Proxysvr上配置即可,從而實現對應路由的轉發。
3.3優缺點分析
本文所設計的一種新型的全區分服的服務器架構如上所述,優點主要集中在以下幾個方面:
(1)擁有像全區全服架構的優勢,后端全區玩家得到打通,豐富了游戲內的社交玩法,獲取好友數據變得簡單和方便許多;
(2)存儲更加集中,整個大區存在同一塊DB中,有利于進行全區的縮容和擴容;
(3)同時保留了分區分服架構的特性,能夠滿足游戲對于商業化上面的需求,使游戲的玩法更加靈活,合服變得更加簡單。

圖1 系統框架與流程全區分服式服務器邏輯架構圖
參考文獻:
[1]中國網絡游戲行業報告. GameRes游戲開發論壇,http://www.gameres.com
[2]網絡游戲.百度百科.
[3]蔣臻甄.網絡游戲服務器集群的設計和實現.華東師范大學,2006.
[4]netprg.網游服務器通信架構的設計.程序員:游戲創造,2005.
[5]Gao Huang. Modeling System Performance in MMORPG. Global Telecommunications Conference Workshops,2004:512-518.
[6]Dante Treglia. Game Program Gems III[M],2003(7).
[7]馬亞花.一種高性能的大型多人在線角色扮演游戲服務器架構設計[J].計算機光盤軟件與應用,2012(09).
[8]賀馮政.網絡游戲服務器通信架構及關鍵技術研究[D].成都:電子科技大學,2008.
[9]樊建國.網絡游戲服務器通信架構與結構設計[J].中國新技術新產品,2009(21).
A New MMOG Game Server Architecture Design
MA Li-qi
(College of Electrical Engineer,Southwest Jiaotong University,Chengdu 610031)
Abstract:
Keywords:
MMOG游戲在項目開始階段對于后臺游戲邏輯不能夠完全給出需求,需要在開發過程中不斷地修正。因此對于后臺服務器開發比較合適采用原型的開發方式,即先給出服務器框架,然后在上面不斷地疊加或者變更功能。根據以往的開發經驗,結合傳統服務器架構的優點,規避其暴露出的缺點,設計出一種新型的服務器架構,并描述出設計思想、基本架構和工作流程,對游戲服務器架構的基本問題有著較好的工程參考價值。
MMOG;服務器架構;網絡游戲
文章編號:1007-1423(2016)13-0047-04
DOI:10.3969/j.issn.1007-1423.2016.13.013
作者簡介:
馬利麒(1991-),男,內蒙古包頭人,研究生,研究方向為計算機網絡、服務器技術
收稿日期:2016-03-15修稿日期:2016-04-18
MMOG game at the beginning of the project stage for the background game logic is not able to fully give the needs of the development process,the need to constantly revise. Therefore,for the development of the background server is more suitable for the development of the prototype,that is,the first server framework,and then constantly superimposed on the above or change the function. According to the past development experience,combined with the advantages of the traditional server architecture,exposes the shortcomings to avoid design a new server architecture,and describes the design idea,basic structure and the work flow,the basic problem of game server architecture has a good reference value to the project.
MMOG;Server Architecture;Network Game