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