轉自:https://my.oschina.net/u/3599144/blog/1305452
本文檔主要是調研分析新的手遊服務端架構,由於自研框架很難直接擴展到未來不同項目上,爲公司下幾款款手遊服務端研發提供可參考的方案。主要的參考點是數據持久化,併發效率,分佈式,沙盒機制,熱更新機制,研發維護成本。如果從頭根據需求開發一款新的服務器架構,需要大量的時間,而且可能會得不償失,一款新的架構穩定都需要時間的。我們應該嘗試使用開源的,成熟的,活躍度高的開源框架。正文將先從服務器設計需要考慮的因素進行需求分析,以至明確我們需要的服務器架構原型,然後再分析現有的開源架構方案。
能夠站在巨人的肩膀上,利用前人的研究成果,是最快最有效的方式。開源的遊戲服務器有很多,根據我們自身的因素,選擇合適的。這樣的服務器引擎目前比較活躍的有:KBEngine(c++ + python), scut(c#/python),pomelo(nodejs)。
從易用性和成本等綜合考慮,我們先採用2個項目選用KBEngine來開發,一個是IO遊戲,一個是MMORPG。
KBEngine綜合調查參數 :
發佈時間2012年6月,
開源地址:https://github.com/kbengine/kbengine
Fork次數1300
Issues 22
Pull requests 12
Star:2000
最新release版本:V0.9.17
代碼提交次數:> 5000
社區關注人數:論壇4000(http://bbs.kbengine.org/) + QQ羣5000, 交流比較活躍
持續維護:截止到現在仍然持久維護
從社區和網絡收集到的成功案例:創世Online(大型MMORPG端遊),酷跑大亂鬥(2D橫版),彈球大作戰(VR 實時房間對戰),Neurowake (VR fps對戰), 逆轉卡牌,坦克英雄,等等。
http://bbs.kbengine.org/forum.php?mod=viewthread&tid=4233&extra=page%3D1
招聘考察:百度搜索關鍵字 “熟悉kbengine優先”,可以發現數十家公司將其作爲考覈加分項,說明該技術具備一定影響範圍。
各種Demo:
Unity3d : https://github.com/kbengine/kbengine_unity3d_demo/releases/latest
Unity3d : https://github.com/kbengine/kbengine_unity3d_warring/releases/latest
UE4 : https://github.com/kbengine/kbengine_ue4_demo/releases/latest
Ogre : https://github.com/kbengine/kbengine_ogre_demo/releases/latest
Cocos2d_js : https://github.com/kbengine/kbengine_cocos2d_js_demo/releases/latest
其他:
http://bbs.kbengine.org/forum.php?mod=viewthread&tid=1940&extra=page%3D1
http://bbs.kbengine.org/forum.php?mod=viewthread&tid=4187&extra=page%3D1
各種文檔:
http://bbs.kbengine.org/forum.php?mod=viewthread&tid=1&extra=page%3D1
http://kbengine.org/cn/docs
https://github.com/kbengine/kbengine/tree/master/docs
服務端組成
|----------|
| client | x N
|----------|
------------------------|-----|-------------------------------
|----------| |----------| |----------|
| loginsrv | x N | basesrv | x N |basesrvmgr| x 1
|----------| |----------| |----------|
------------------------|-----|-------------------------------
|----------| |----------|
| cellsrv | x N |cellsrvmgr| x 1
|----------| |----------|
------------------------|-----|-------------------------------
|----------| |----------|
| dbmgr | x 1 |interfaces| x 1
|----------| |----------|
------------------------|-----|-------------------------------
|-------------------------|
| mysql | redis | mongodb | x N
|-------------------------|
穩定性測試:
https://www.youtube.com/watch?v=sWtk3CfxyGY
http://v.youku.com/v_show/id_XMjgyMjM0MTYwNA==.html?spm=a2h3j.8428770.3416059.1
服務端組件描述
· loginapp:
登錄驗證、註冊、接入口。
可在多臺機器部署多個loginapp進程來負載。
· dbmgr:
高性能多線程的數據存取。
默認使用Mysql作爲數據庫。
· baseappmgr:
協調所有baseapp的工作,包括baseapp負載均衡處理等。
· baseapp:
客戶端與服務端的交互只能通過loginapp分配的baseapp來完成。
定時寫entity的數據到數據庫、baseapp數據相互備份、災難恢復。
可在多臺機器部署多個baseapp進程來均衡負載。
腳本層通常會選擇在baseapp上實現如:社交系統、廣播聊天、排行、遊戲大廳、等等邏輯系統。
· cellappmgr:
負責協調所有cellapp的工作,包括負載均衡處理等。
· cellapp:
處理遊戲與空間和位置有關的邏輯,如:AOI、Navigate、AI、戰鬥等等。
可在多臺機器部署多個cellapp進程來動態均衡負載。
· client:
客戶端我們將提供基礎框架,這個框架不包括渲染部分和輸入輸出部分的具體實現,
我們將提供一個lib文件和一套API接口,開發者可以選擇使用自己比較適合的圖形渲染引擎與輸入輸出控制部分。
Unity3D, HTML5, Cocos2d等技術我們提供了相關插件,能夠快速的和服務端對接。
· machine:
抽象出一個服務端硬件節點(一臺硬件服務器只能存在一個這樣的進程)。主要用途是接收遠程指令處理本機上的組件啓動與關閉,
提供本機上運行組件的接入口以及收集當前機器上的一些信息,
如:CPU、內存等。 這些信息會提供給一些對此比較感興趣的組件。
· interfaces:
支持快速接入第三方計費、第三方賬號、第三方數據, 快速與運營系統耦合。
· guiconsole:
這是一個可視化的圖形界面控制檯工具,可以實時的觀察服務端運行狀態,實時觀測不同Space中Entity的動態,
並支持動態調試服務端Python邏輯層以及查看各個組件的日誌,啓動服務端與關閉等。
· logger:
收集和備份各個組件的運行日誌。
簡介
一款開源的MMOG遊戲服務端引擎,
僅Python腳本即可簡單高效的完成任何遊戲邏輯(支持熱更新),
使用配套客戶端插件能夠快速與(Unity3D、UE4、OGRE、HTML5、等等)結合形成一個完整的客戶端。
引擎使用C++編寫,開發者無需重複的實現遊戲服務端通用的底層技術,
將精力真正集中到遊戲開發層面上來,穩定可靠並且快速的打造各種網絡遊戲。
(經常被問到承載上限,KBEngine底層架構被設計爲多進程分佈式動態負載均衡方案,
理論上只需要不斷擴展硬件就能夠不斷增加承載上限,單臺機器的承載上限取決於遊戲邏輯本身的複雜度。)