原文:http://canremember.com/?p=8
過去一年中,花了很多時(shí)間在考慮服務(wù)器架構(gòu)設(shè)計(jì)方面的問題。看了大量文章、也研究了不少開源項(xiàng)目,眼界倒是開闊了不少,不過回過頭來看,對(duì)網(wǎng)游架構(gòu)設(shè)計(jì)方面的幫助卻是不多。老外還是玩兒console game的多,MMO Games方面涉及的還是不如國(guó)內(nèi)廣泛。看看 Massively Multiplayer Games Development 1 & 2 這兩本書吧,質(zhì)量說實(shí)話很一般,幫助自然也很有限。當(dāng)然這也是好事,對(duì)國(guó)內(nèi)的研發(fā)公司/團(tuán)隊(duì)來說,在網(wǎng)游服務(wù)器技術(shù)方面當(dāng)然就存在超越老外的可能性,而且在這方面技術(shù)超越的機(jī)會(huì)更大,當(dāng)然前提是要有積累、要舍得投入,研發(fā)人員更要耐得住寂寞、經(jīng)得起誘惑,在平均每天收到超過3個(gè)獵頭電話的時(shí)候——依然不動(dòng)心。
上面有點(diǎn)兒扯遠(yuǎn)了,下面聊聊無縫世界架構(gòu)(Seamless world server architecture)設(shè)計(jì)方面的一點(diǎn)兒看法。
先說架構(gòu)設(shè)計(jì)的目標(biāo)——我的看法,服務(wù)器組架構(gòu)設(shè)計(jì)的目標(biāo)就是確定各服務(wù)器拓補(bǔ)關(guān)系和主要的業(yè)務(wù)邏輯處理方法。主要要解決的問題就是在滿足游戲內(nèi)容設(shè)計(jì)需要的前提下,如何提高帶負(fù)載能力的問題。
最簡(jiǎn)單的架構(gòu)就是基本的C/S架構(gòu),一臺(tái)Server直接構(gòu)成一個(gè)Cluster,所有Client直接連接這個(gè)Server,這個(gè)Server完成所有邏輯和數(shù)據(jù)處理。這架構(gòu)其實(shí)很好,最大的好處就是它架構(gòu)上的 Simplicity ,Cluster內(nèi)部的跨進(jìn)程交互完全被排除,復(fù)雜度立刻就降下來了,而且——完全可以實(shí)現(xiàn)一個(gè)無縫(Seamless world)的游戲世界。但是即使我不說,大家也知道這種單Server架構(gòu)會(huì)有什么問題。不過我們不妨以另外一個(gè)角度來看這個(gè)Server——一個(gè)黑盒子。從系統(tǒng)外部的角度來看,什么樣的系統(tǒng)都可以看成一個(gè)整體、一個(gè)黑盒,而不管系統(tǒng)內(nèi)部的拓補(bǔ)關(guān)系和實(shí)現(xiàn)復(fù)雜度方面的問題。在不考慮這個(gè)系統(tǒng)的實(shí)現(xiàn)的前提下,理論上Cluster的處理能力就是由硬件的數(shù)量和能力決定的,也就是說一個(gè)Server Cluster內(nèi)包含越多的服務(wù)器、服務(wù)器越‘快’,那么這個(gè)Cluster的處理能力越好、帶負(fù)載能力越好。那么我們要面對(duì)的帶負(fù)載能力的問題,就是如何高效的利用這些Server的問題,基本上也可以理解為如何提高玩家請(qǐng)求的并發(fā)處理能力的問題。
CPU廠商在很久以前就在考慮這方面的問題了,CPU其實(shí)也可以看成個(gè)黑盒。看看他們用過的技術(shù)——流水線(pipeline)技術(shù)、多CPU/多核(multicore)技術(shù),以及這些技術(shù)的衍生技術(shù)。我想了很久讓 Server Cluster 內(nèi)部處理并行的方法、并且有了比較清晰的思路之后,才發(fā)現(xiàn)其實(shí)早就可以參照CPU廠商的方法。流水線的方法就是把一個(gè)指令處理拆分成很多個(gè)步驟,這樣指令的處理被分解之后就可以部分重疊(相當(dāng)于變成并發(fā)的了)執(zhí)行。我們的Server Cluster一樣可以用這種方法來拆分,我想了個(gè)名字——
Services-based Architecture——基于服務(wù)的架構(gòu)。在這種架構(gòu)內(nèi)部,我們根據(jù)處理數(shù)據(jù)、邏輯的相關(guān)性來劃分組內(nèi)各個(gè)服務(wù)器的工作任務(wù)。例如:位置服務(wù)提供物體可見性信息、物品服務(wù)處理所有物品相關(guān)的邏輯、社會(huì)關(guān)系服務(wù)提供行會(huì)家族等等方面的邏輯、戰(zhàn)斗服務(wù)器只處理戰(zhàn)斗相關(guān)的邏輯,等等。這樣劃分的話、邏輯處理的并發(fā)就有了可能性。舉例來說:A砍B一刀這件事情與C從奸商手里買到一件武器這個(gè)事情是完全不相干的,而且這2個(gè)請(qǐng)求本來就在不同的服務(wù)器上被處理,他們是被不同的Service Server并發(fā)處理的。這就是 Services-based Architecture 的并發(fā)方法。
基本上,把游戲邏輯的處理拆分成一個(gè)個(gè)的service,就和設(shè)計(jì)cpu的時(shí)候把機(jī)器指令的具體處理拆分,然后設(shè)計(jì)出一個(gè)個(gè)流水線單元是一個(gè)道理。
Cells-based Architecture——基于cell的架構(gòu)。每個(gè)cell都在不同的物理server上面運(yùn)行著完全一樣的應(yīng)用程序服務(wù)器,但是他們負(fù)責(zé)承載不同的游戲場(chǎng)景區(qū)域的游戲邏輯。和 services-based arch. 明顯不同的就是,每個(gè)cell都是個(gè)‘在邏輯上完整的’服務(wù)器。它得處理物品操作、人物移動(dòng)、戰(zhàn)斗計(jì)算等等幾乎所有的游戲邏輯。盡管這么做會(huì)帶來一些(可能是很復(fù)雜)的問題,但是它完全是可行的。舉例來說:在吳國(guó)A砍B一刀顯然地和千里之外在越國(guó)的C砍D一刀不搭界,他們完全可以被不同的Cell并發(fā)地處理。
基本上,這就相當(dāng)于一個(gè)主板上面插多個(gè)CPU或者一個(gè)CPU但是有多個(gè)內(nèi)核,每個(gè)CPU能做的事情都是一樣的,而且能一起做。
關(guān)于這兩種 seamless world 架構(gòu)的基本分析和需要解決的一些主要問題,下次再寫。
Related posts
posted on 2009-11-18 08:20
小王 閱讀(1303)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
游戲服務(wù)器端開發(fā)