转自: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底层架构被设计为多进程分布式动态负载均衡方案,
理论上只需要不断扩展硬件就能够不断增加承载上限,单台机器的承载上限取决于游戏逻辑本身的复杂度。)