最近參加了一個(gè)大服務(wù)器架構(gòu)討論活動(dòng), 記錄下心得
概述
游戲客戶(hù)端采用Cocos2dx-Lua的純Lua編寫(xiě)邏輯, 服務(wù)器采用Golang作為開(kāi)發(fā)語(yǔ)言
游戲類(lèi)型類(lèi)似于COC,因此無(wú)需選服. 需要使用大服務(wù)器架構(gòu)進(jìn)行處理
數(shù)據(jù)庫(kù)
采用Mongodb做持久存儲(chǔ), redis做跨服通信數(shù)據(jù)交換
使用UCloud的云技術(shù), 省去了煩人的運(yùn)維工作
通信及協(xié)議
客戶(hù)端和服務(wù)器通訊使用HTTP短連接, 基于json的數(shù)據(jù)封包協(xié)議
服務(wù)器間大量使用Golang自帶的json+rpc進(jìn)行通信
服務(wù)器類(lèi)型
服務(wù)器類(lèi)型大致分為邏輯服務(wù)器,戰(zhàn)斗服務(wù)器, 中心服務(wù)器
邏輯服務(wù)器
邏輯服務(wù)器負(fù)責(zé)日常邏輯及公共邏輯處理(好友, 公會(huì))
1個(gè)邏輯服務(wù)器對(duì)應(yīng)一個(gè)區(qū), n個(gè)區(qū)均使用Ucloud云Mongodb進(jìn)行數(shù)據(jù)存儲(chǔ)
戰(zhàn)斗服務(wù)器
戰(zhàn)斗服務(wù)器是一個(gè)集群, 集群會(huì)返回一個(gè)負(fù)載最低的服務(wù)器返回使用
戰(zhàn)斗服務(wù)器通過(guò)cgo技術(shù)與客戶(hù)端C++/lua的戰(zhàn)斗邏輯進(jìn)行邏輯復(fù)用, 在此技術(shù)上進(jìn)行
戰(zhàn)斗邏輯的校驗(yàn)
中心服務(wù)器
客戶(hù)端登陸前, 在中心服務(wù)器這里獲得可登陸的邏輯服務(wù)器地址, 同時(shí)做一個(gè)負(fù)載均衡
短連接
評(píng)價(jià)
由于操作系統(tǒng)的技術(shù)趨于穩(wěn)定, 同時(shí), 手游的弱交互型導(dǎo)致的游戲架構(gòu)趨于簡(jiǎn)單. 因此網(wǎng)絡(luò)負(fù)載不再是游戲服務(wù)器技術(shù)的瓶頸. 從經(jīng)驗(yàn)看來(lái), 游戲服務(wù)器技術(shù), 更重要的是還是看數(shù)據(jù)庫(kù)的選型及處理方式.
雖然Mongodb的性能上不如內(nèi)存數(shù)據(jù)庫(kù). 但是從存儲(chǔ)安全性上要比個(gè)人搭建的內(nèi)存數(shù)據(jù)庫(kù)簡(jiǎn)單, 安全
外加上云技術(shù)的引用, 性能的瓶頸和運(yùn)維的技術(shù)復(fù)雜度迎刃而解
Redis用于跨服數(shù)據(jù)交互那是再好不過(guò)的數(shù)據(jù)中介了, 保證速度和穩(wěn)定性, 絕對(duì)不是造輪子能比擬的
短連接在手游上處理起來(lái)比長(zhǎng)連接簡(jiǎn)單一些, 無(wú)需做斷線重連. 服務(wù)器的底層也是由Golang的框架庫(kù)保證質(zhì)量的. 因此負(fù)載毫無(wú)問(wèn)題. 服務(wù)器對(duì)內(nèi)及對(duì)外均使用json進(jìn)行數(shù)據(jù)交換, 簡(jiǎn)化了協(xié)議處理. 也方便了調(diào)試
json rpc的性能損耗對(duì)于整個(gè)邏輯的處理來(lái)說(shuō)均可以忽略不計(jì)