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