引言:使用Go語言開發(fā)游戲已經(jīng)有5年了允睹,做了三款上線手游棉圈,一直采用的都是我們自研的分布式游戲服務(wù)器架構(gòu)榕酒。最近我們想把它分享一下胚膊,總結(jié)一下這幾年的經(jīng)驗。
一想鹰、 架構(gòu)圖
1. CDN:負(fù)責(zé)游戲客戶端的代碼熱更新紊婉、游戲內(nèi)的廣告圖
2. 版控服務(wù)器:負(fù)責(zé)版本更新控制、區(qū)服狀態(tài)辑舷、登錄歷史
3. 中心服務(wù)器:用于控制所有服務(wù)器喻犁,提供服務(wù)注冊與發(fā)現(xiàn),服務(wù)配置與控制
4. 網(wǎng)關(guān)服務(wù)器:用于客戶端連接與通信何缓,所有消息都會通過網(wǎng)關(guān)進行轉(zhuǎn)發(fā)
5. 單區(qū)服務(wù)器:用于處理單區(qū)的相關(guān)業(yè)務(wù)
6. 跨區(qū)服務(wù)器:用于處理跨區(qū)的相關(guān)業(yè)務(wù)
7. 鏡像服務(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ù)存儲
1. 游戲數(shù)據(jù)存儲:單區(qū)服務(wù)器路召、跨區(qū)服務(wù)器都是采用MySQL進行游戲數(shù)據(jù)存儲
2. 緩存數(shù)據(jù)存儲:單區(qū)服務(wù)器為了提高效率,會采用Memcache進行數(shù)據(jù)緩存
3. 文件數(shù)據(jù)存儲:單區(qū)服務(wù)器波材、跨服服務(wù)器都會用文件存儲來備份一些臨時數(shù)據(jù)股淡;戰(zhàn)斗服務(wù)器會將戰(zhàn)報存儲到文件中。
四廷区、 中心服務(wù)器
中心服務(wù)器是個單點唯灵,維護著區(qū)服信息、節(jié)點信息隙轻、配置信息埠帕,用于其他服務(wù)器來進行讀取。
1. 只有當(dāng)中心服務(wù)器啟動后玖绿,其他服務(wù)器才能啟動并注冊上去敛瓷;
2. 中心服務(wù)器在運行過程中,會與其他服務(wù)器進行PING斑匪,來保持連接呐籽,并且收集運行狀態(tài);
3. 中心服務(wù)器掛了后,其他服務(wù)器不會掛狡蝶,只是不能支持新服務(wù)器啟動與配置庶橱;
4. 中心服務(wù)器配套一個可視化的控制臺,用于架構(gòu)全面監(jiān)控與控制贪惹。
五苏章、 網(wǎng)關(guān)服務(wù)器
1. 每個網(wǎng)關(guān)服務(wù)器可以支持多個區(qū)的連接,但一個區(qū)只能在一個網(wǎng)關(guān)服務(wù)器上馍乙;
2. 網(wǎng)關(guān)服務(wù)器不做業(yè)務(wù)處理,只做鑒權(quán)處理與消息轉(zhuǎn)發(fā)垫释;
3. 網(wǎng)關(guān)服務(wù)器進行了簡單的限流處理丝格。
六、 單區(qū)服務(wù)
1. 單區(qū)服務(wù)包括多個單區(qū)業(yè)務(wù)服務(wù)器棵譬,用于分散業(yè)務(wù)處理壓力显蝌,降低單點風(fēng)險;
2. 單區(qū)服務(wù)會將玩家狀態(tài)保持在內(nèi)存中订咸,以加速業(yè)務(wù)處理曼尊;
3. 單區(qū)服務(wù)會定時保存玩家的狀態(tài)到單區(qū)數(shù)據(jù)庫中;
4. 單區(qū)服務(wù)會將部分玩家下線后的狀態(tài)緩存在Memcache中脏嚷,用于加速玩家登錄骆撇。
七、 跨區(qū)服務(wù)
1. 跨區(qū)服務(wù)也包括多個跨區(qū)業(yè)務(wù)服務(wù)器父叙,用于分散業(yè)務(wù)處理壓力神郊,降低單點風(fēng)險;
2. 跨區(qū)服務(wù)也會將玩法狀態(tài)保持在內(nèi)存中趾唱,以加速業(yè)務(wù)處理涌乳,同樣會定時存儲到跨區(qū)數(shù)據(jù)庫中;
3. 跨區(qū)服務(wù)的跨區(qū)規(guī)則甜癞,是通過中心服務(wù)器采用設(shè)定規(guī)則自動分配夕晓;
八、 鏡像服務(wù)
1. 鏡像服務(wù)包括多個鏡像業(yè)務(wù)服務(wù)器悠咱,例如:戰(zhàn)斗服務(wù)器蒸辆、匹配服務(wù)器、聊天服務(wù)器等析既;
2. 鏡像服務(wù)器的特點是無狀態(tài)吁朦,可以部署多個,玩家請求哪一個都能得到結(jié)果渡贾,避免單點出問題逗宜;
總結(jié):以上便是我們的分布式游戲服務(wù)器架構(gòu),簡單的介紹了一下。后期纺讲,我們會針對架構(gòu)中的不同服務(wù)器角色的框架代碼進行單獨介紹擂仍,包括其中用到的技術(shù)與實現(xiàn)方式,并且和其他的框架進行比較學(xué)習(xí)熬甚。