引言:使用Go語(yǔ)言開(kāi)發(fā)游戲已經(jīng)有5年了,做了三款上線手游,一直采用的都是我們自研的分布式游戲服務(wù)器架構(gòu)。最近我們想把它分享一下,總結(jié)一下這幾年的經(jīng)驗(yàn)。
一、 架構(gòu)圖

1. CDN:負(fù)責(zé)游戲客戶端的代碼熱更新、游戲內(nèi)的廣告圖
2. 版控服務(wù)器:負(fù)責(zé)版本更新控制、區(qū)服狀態(tài)、登錄歷史
3. 中心服務(wù)器:用于控制所有服務(wù)器,提供服務(wù)注冊(cè)與發(fā)現(xiàn),服務(wù)配置與控制
4. 網(wǎng)關(guān)服務(wù)器:用于客戶端連接與通信,所有消息都會(huì)通過(guò)網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)
5. 單區(qū)服務(wù)器:用于處理單區(qū)的相關(guān)業(yè)務(wù)
6. 跨區(qū)服務(wù)器:用于處理跨區(qū)的相關(guān)業(yè)務(wù)
7. 鏡像服務(wù)器:用于處理無(wú)狀態(tài)的業(yè)務(wù),如:戰(zhàn)斗、匹配
二、 通信協(xié)議
1. 客戶端與版控服務(wù)器采用的是HTTP + Json通信協(xié)議
2. 客戶都與網(wǎng)關(guān)服務(wù)器采用的是Socket + Protobuf通信協(xié)議
3. 中心服務(wù)器、網(wǎng)關(guān)服務(wù)器、單區(qū)服務(wù)器等內(nèi)部都是采用Socket + Protobuf通信協(xié)議
三、 數(shù)據(jù)存儲(chǔ)
1. 游戲數(shù)據(jù)存儲(chǔ):?jiǎn)螀^(qū)服務(wù)器、跨區(qū)服務(wù)器都是采用MySQL進(jìn)行游戲數(shù)據(jù)存儲(chǔ)
2. 緩存數(shù)據(jù)存儲(chǔ):?jiǎn)螀^(qū)服務(wù)器為了提高效率,會(huì)采用Memcache進(jìn)行數(shù)據(jù)緩存
3. 文件數(shù)據(jù)存儲(chǔ):?jiǎn)螀^(qū)服務(wù)器、跨服服務(wù)器都會(huì)用文件存儲(chǔ)來(lái)備份一些臨時(shí)數(shù)據(jù);戰(zhàn)斗服務(wù)器會(huì)將戰(zhàn)報(bào)存儲(chǔ)到文件中。
四、 中心服務(wù)器
中心服務(wù)器是個(gè)單點(diǎn),維護(hù)著區(qū)服信息、節(jié)點(diǎn)信息、配置信息,用于其他服務(wù)器來(lái)進(jìn)行讀取。
1. 只有當(dāng)中心服務(wù)器啟動(dòng)后,其他服務(wù)器才能啟動(dòng)并注冊(cè)上去;
2. 中心服務(wù)器在運(yùn)行過(guò)程中,會(huì)與其他服務(wù)器進(jìn)行PING,來(lái)保持連接,并且收集運(yùn)行狀態(tài);
3. 中心服務(wù)器掛了后,其他服務(wù)器不會(huì)掛,只是不能支持新服務(wù)器啟動(dòng)與配置;
4. 中心服務(wù)器配套一個(gè)可視化的控制臺(tái),用于架構(gòu)全面監(jiān)控與控制。
五、 網(wǎng)關(guān)服務(wù)器
1. 每個(gè)網(wǎng)關(guān)服務(wù)器可以支持多個(gè)區(qū)的連接,但一個(gè)區(qū)只能在一個(gè)網(wǎng)關(guān)服務(wù)器上;
2. 網(wǎng)關(guān)服務(wù)器不做業(yè)務(wù)處理,只做鑒權(quán)處理與消息轉(zhuǎn)發(fā);
3. 網(wǎng)關(guān)服務(wù)器進(jìn)行了簡(jiǎn)單的限流處理。
六、 單區(qū)服務(wù)
1. 單區(qū)服務(wù)包括多個(gè)單區(qū)業(yè)務(wù)服務(wù)器,用于分散業(yè)務(wù)處理壓力,降低單點(diǎn)風(fēng)險(xiǎn);
2. 單區(qū)服務(wù)會(huì)將玩家狀態(tài)保持在內(nèi)存中,以加速業(yè)務(wù)處理;
3. 單區(qū)服務(wù)會(huì)定時(shí)保存玩家的狀態(tài)到單區(qū)數(shù)據(jù)庫(kù)中;
4. 單區(qū)服務(wù)會(huì)將部分玩家下線后的狀態(tài)緩存在Memcache中,用于加速玩家登錄。
七、 跨區(qū)服務(wù)
1. 跨區(qū)服務(wù)也包括多個(gè)跨區(qū)業(yè)務(wù)服務(wù)器,用于分散業(yè)務(wù)處理壓力,降低單點(diǎn)風(fēng)險(xiǎn);
2. 跨區(qū)服務(wù)也會(huì)將玩法狀態(tài)保持在內(nèi)存中,以加速業(yè)務(wù)處理,同樣會(huì)定時(shí)存儲(chǔ)到跨區(qū)數(shù)據(jù)庫(kù)中;
3. 跨區(qū)服務(wù)的跨區(qū)規(guī)則,是通過(guò)中心服務(wù)器采用設(shè)定規(guī)則自動(dòng)分配;
八、 鏡像服務(wù)
1. 鏡像服務(wù)包括多個(gè)鏡像業(yè)務(wù)服務(wù)器,例如:戰(zhàn)斗服務(wù)器、匹配服務(wù)器、聊天服務(wù)器等;
2. 鏡像服務(wù)器的特點(diǎn)是無(wú)狀態(tài),可以部署多個(gè),玩家請(qǐng)求哪一個(gè)都能得到結(jié)果,避免單點(diǎn)出問(wèn)題;
總結(jié):以上便是我們的分布式游戲服務(wù)器架構(gòu),簡(jiǎn)單的介紹了一下。后期,我們會(huì)針對(duì)架構(gòu)中的不同服務(wù)器角色的框架代碼進(jìn)行單獨(dú)介紹,包括其中用到的技術(shù)與實(shí)現(xiàn)方式,并且和其他的框架進(jìn)行比較學(xué)習(xí)。