摘 要:網(wǎng)絡(luò)游戲由于需要為大量的玩家提供7*24小時(shí)的游戲服務(wù),對(duì)游戲服務(wù)器的穩(wěn)定性和高效性有較高要求。因此服務(wù)器架構(gòu)設(shè)計(jì)是網(wǎng)絡(luò)游戲開(kāi)發(fā)的關(guān)鍵之處,本文提出了一種高性能、可伸縮、易維護(hù)的服務(wù)器架構(gòu),經(jīng)過(guò)對(duì)架構(gòu)的實(shí)際測(cè)試取得了較為滿意的效果。
關(guān)鍵詞:網(wǎng)絡(luò)游戲服務(wù)器架構(gòu);高性能
中圖分類號(hào):TP368.5
網(wǎng)絡(luò)游戲的開(kāi)發(fā)可以分為客戶端、服務(wù)器端的開(kāi)發(fā),客戶端主要是負(fù)責(zé)游戲畫面的繪制,以及和玩家的交互[1]。服務(wù)器端主要處理游戲的具體邏輯,并對(duì)玩家的游戲信息進(jìn)行存儲(chǔ)。為了給玩家良好的用戶體驗(yàn),游戲服務(wù)器必須保持高效、穩(wěn)定,因此這對(duì)服務(wù)器開(kāi)發(fā)的技術(shù)要求帶來(lái)了更高的挑戰(zhàn)[2]。
1 傳統(tǒng)服務(wù)器架構(gòu)
傳統(tǒng)的服務(wù)器架構(gòu)如圖1所示,從圖中可以看出整個(gè)游戲服務(wù)器共用一個(gè)Battle(戰(zhàn)斗場(chǎng)景),整個(gè)架構(gòu)中有若干個(gè)Game(游戲邏輯服),由Center(全局服務(wù)器)負(fù)責(zé)調(diào)度、轉(zhuǎn)發(fā)游戲服務(wù)器之間的消息。這種結(jié)構(gòu)的服務(wù)器設(shè)計(jì)比較簡(jiǎn)單,雖然較易實(shí)現(xiàn),但是不能承載大量的用戶,而且可擴(kuò)展性不夠強(qiáng),需要進(jìn)一步改進(jìn)。
2 新服務(wù)器架構(gòu)設(shè)計(jì)
隨著對(duì)網(wǎng)絡(luò)游戲服務(wù)器的進(jìn)一步研究,設(shè)計(jì)出了一種新型服務(wù)器架構(gòu),如圖2所示。下面詳細(xì)介紹新架構(gòu)的功能設(shè)計(jì)。
Group服務(wù)器組:Group有別于傳統(tǒng)的服務(wù)器大區(qū)概念,1個(gè)服務(wù)器大區(qū)可以包括若干個(gè)Group。大區(qū)和大區(qū)之間的玩家ID不重復(fù),因此從技術(shù)上不再有劃分大區(qū)的意義,僅用運(yùn)營(yíng)需求劃分。在技術(shù)上按Core服務(wù)器的性能上限來(lái)劃分Group。
Game Server游戲服務(wù)器:每一個(gè)Game只保持一個(gè)與Core的連接,且在邏輯上獨(dú)立,單服結(jié)構(gòu),不搞多線按world切分Game。Game是玩家主要行為邏輯的所在,Game不直連DB,所有數(shù)據(jù)交互都通過(guò)Core轉(zhuǎn)發(fā)。對(duì)于Game來(lái)說(shuō),其角色及游戲內(nèi)數(shù)據(jù)都是互相獨(dú)立的,所以一般情況下每個(gè)Game單獨(dú)配備一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,以減輕數(shù)據(jù)庫(kù)的壓力。所以Game配置的id與DB的id一一對(duì)應(yīng)。
DB Server數(shù)據(jù)庫(kù)服務(wù)器:每一個(gè)DB只保持與一個(gè)與Core的連接。簡(jiǎn)單的數(shù)據(jù)網(wǎng)絡(luò)包讀寫邏輯,和與mysql的查詢、修改交互[3]。每個(gè)DB在邏輯上也獨(dú)立,容錯(cuò)性好,一臺(tái)DB宕機(jī),只有對(duì)應(yīng)的Game才受影響。如果是按數(shù)據(jù)表劃分DB的話,一臺(tái)DB宕機(jī)了,對(duì)應(yīng)的所有Game都會(huì)受影響。
Battle Server戰(zhàn)場(chǎng)服務(wù)器:Battle和Game在結(jié)構(gòu)上是基本等價(jià)的,在玩家感受上,玩家在Game和在Battle應(yīng)該是一樣的。不同的是一個(gè)Battle可以連接到多個(gè)Core上,這樣凡是被Battle所連接的Core,對(duì)應(yīng)的Game都可以一起跨服了。Battle和Core之間交互的協(xié)議與Game與Core之間交互的協(xié)議完全一致,Client通過(guò)Core從Game切換到Battle上來(lái)參加戰(zhàn)斗,角色切換到Battle上時(shí),也通過(guò)Core向DB要數(shù)據(jù)。
Core的邏輯相對(duì)簡(jiǎn)單,是其他服務(wù)器的網(wǎng)關(guān)服務(wù)器,主要工作還是轉(zhuǎn)發(fā)數(shù)據(jù),所謂轉(zhuǎn)發(fā)數(shù)據(jù)就是當(dāng)Core收到一個(gè)包時(shí),不需要管網(wǎng)絡(luò)包里的內(nèi)容,只需要從網(wǎng)絡(luò)包中讀出是發(fā)給哪個(gè)服務(wù)器,然后原封不動(dòng)的發(fā)出去。
Center Server中央服務(wù)器:中心服務(wù)器全服唯一,連接所有的Core,主要功能包括信息全服廣播。在實(shí)際運(yùn)營(yíng)中,需要權(quán)限會(huì)比普通玩家高所謂的GM,只需要做一個(gè)客戶端連接Center,在Center服務(wù)器上執(zhí)行GM命令,這樣可以有更高的安全性。維護(hù)時(shí),發(fā)送服務(wù)器關(guān)機(jī)命令也可以由Center發(fā)出,各個(gè)服務(wù)器走各自的關(guān)機(jī)流程。
3 新架構(gòu)的性能分析
新架構(gòu)中各個(gè)服務(wù)器的功能都相對(duì)比較單純,服務(wù)器間的連接關(guān)系也比較簡(jiǎn)單。而且跨服可以不用斷線,不用在game和battle之間傳遞玩家數(shù)據(jù)。Group的靈活性大,可以任意配置,最小粒度甚至可以做到1個(gè)game+1個(gè)db+1個(gè)core。
通過(guò)實(shí)際的架構(gòu)運(yùn)行發(fā)現(xiàn)新架構(gòu)極大程度減少了服務(wù)器的運(yùn)算開(kāi)銷,這是因?yàn)镃ore服務(wù)器它只是一臺(tái)管理連接的服務(wù)器,并不打算讓他承擔(dān)太多的游戲邏輯,而Core正好滿足這個(gè)需求,主要邏輯還在Game上。Core連接了各類服務(wù)器和客戶端,給其他服務(wù)器和客戶端充當(dāng)網(wǎng)關(guān)的作用,負(fù)責(zé)轉(zhuǎn)發(fā)他們之間交流數(shù)據(jù)的網(wǎng)絡(luò)包,同時(shí)也管理了客戶端的連接與斷開(kāi)。Core因而分擔(dān)了部分原屬于Game的邏輯,從而減輕了Game的性能開(kāi)銷。
4 新架構(gòu)的測(cè)試分析
一個(gè)游戲架構(gòu)無(wú)論涉及得多完美都必須經(jīng)過(guò)嚴(yán)格的功能測(cè)試才能正式使用,因此設(shè)計(jì)了一些具體的測(cè)試方案:
(1)對(duì)異常情況的測(cè)試:通過(guò)制造錯(cuò)誤情況測(cè)試服務(wù)器對(duì)出錯(cuò)的處理,因?yàn)橛行┏鲥e(cuò)條件的環(huán)境實(shí)際操作難以實(shí)現(xiàn),這就需要故意修改代碼來(lái)達(dá)到目的,以測(cè)試服務(wù)器的容錯(cuò)性,避免一旦出現(xiàn)錯(cuò)誤,服務(wù)器會(huì)宕掉的情況。并檢查錯(cuò)誤提示或者錯(cuò)誤日志是否正確;只有通過(guò)異常測(cè)試,才可以減少服務(wù)器掛的幾率。比如Core的主要功能是轉(zhuǎn)發(fā)包,那么當(dāng)發(fā)包的目的dpid不存在,Core是否會(huì)對(duì)這種情況做容錯(cuò)性處理[4]。
(2)對(duì)服務(wù)器的破壞性測(cè)試:偽造虛擬的客戶端封包,以及超大規(guī)模的網(wǎng)絡(luò)包流量,測(cè)試服務(wù)器端的容錯(cuò)性和并發(fā)性能。
(3)對(duì)性能的監(jiān)控:監(jiān)控服務(wù)器是否存在內(nèi)存泄露。以及完善的CPU、IO、帶寬的監(jiān)控和報(bào)警機(jī)制。
(4)服務(wù)器日志:監(jiān)控日志的異常情況,以及日志信息是否完善,以備差錯(cuò)和數(shù)據(jù)統(tǒng)計(jì)使用。
通過(guò)上述的測(cè)試分析,新架構(gòu)的設(shè)計(jì)達(dá)到了預(yù)想的目標(biāo)。
5 結(jié)束語(yǔ)
網(wǎng)絡(luò)游戲服務(wù)器性能已成為當(dāng)前網(wǎng)游領(lǐng)域的核心技術(shù)難點(diǎn)。本文從實(shí)際應(yīng)用出發(fā),提出了一種高性能、可伸縮、易維護(hù)的服務(wù)器架構(gòu),通過(guò)性能分析和具體架構(gòu)測(cè)試后發(fā)現(xiàn)新架構(gòu)取得了較好的效果。
參考文獻(xiàn):
[1]馬亞花.一種高性能的大型多人在線角色扮演游戲服務(wù)器架構(gòu)設(shè)計(jì)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012(09).
[2]栗芳凱,劉振宇,李敏.基于SmartFoxServer的網(wǎng)絡(luò)游戲服務(wù)器系統(tǒng)的研究與設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2012(13).
[3]樊建國(guó).網(wǎng)絡(luò)游戲服務(wù)器通信架構(gòu)與結(jié)構(gòu)設(shè)計(jì)[J].中國(guó)新技術(shù)新產(chǎn)品,2009(21).
[4]李虎雄,徐貫東,張燕姑.網(wǎng)絡(luò)游戲數(shù)據(jù)平臺(tái)數(shù)據(jù)通訊的實(shí)現(xiàn)方案[J].計(jì)算機(jī)工程與設(shè)計(jì),2005(11).
作者簡(jiǎn)介:江岸(1982.08-),男,湖南常德人,專職教師,助教,碩士研究生,研究方向:游戲開(kāi)發(fā)、RFID防沖突算法。
作者單位:廣東農(nóng)工商職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)系,廣州 510000