此文并不是聚润堂所在公司当前运营的网游游戏服务器架构,而是在看过了近十个商业网游的架构,在现阶段心目中规划的简单实用的网游服务器架构。

网游的本质是人和人之间关系,人越多,关系越多,越能把人留住。开服头三天,人数是最多,为了保证一个月后,玩家等级达到一定的等级,策划的玩法都可以完全展开,单组服务器容纳人数越多越好,如果是PVE结构的游戏,最好能容纳1万人左右。这样在一个月后流失率50%的情况下,还有5000人左右在一组服务器内,已经产生比较强大的社会结构,各种高级玩法才有进行的基础。如果是PVP洗用户的游戏,容纳人数越高越好。两款较好的国战游戏,《征途》达到了每组4万人,《成吉思汗》,推测至少也达到了两万人。

采用完美常用的分线结构,运营到后期,就会出现每线人数较少,线内,线和线之间都互动不起来。但如果不分线,在开服一刹那,用户全部堆积在同一个新手村,基本玩不动。《天龙八部》提出了较好的解决方案,建立多个平行的新手村地图,一主多副,开服时尽可能多的同时容纳新用户的涌入,高等级玩家从其它地图回新手村只能到达主新手村。

下图中每个方框表示一个独立的进程APP组件,每个服务进程如果发生宕机会影响部分用户,整体服务但不会全部中断。在宕机进程重启后,又可以并入整体,全部服务得以继续。

图片附件



gls:game login server,游戏登录服务器,某种程序上,其不是核心组件,gls调用外部的接口,进行基本的用户名密码认证。此外需要实现很多附属的功能:登录排队(对开服非常有帮助),GM超级登录通道(GM可以不排队进入游戏),封测期间激活用户控制,限制用户登录,控制客户端版本等。

db:实质上是后台sql的大内存缓冲,隔离了数据库操作,比较内存中的数据,只把改变的数据定时批量写入sql。系统的算法,开发稳定性都要求非常高。

center:所有组件都要在这里注册,在线玩家的session状态都在这里集中存放,和各组件有心跳连接。所有对外的接口也全部通过这里。

角色入口:玩家登录游戏后的选择角色

gs:game server,最核心组件,同一地图,所有游戏逻辑相关的功能,都在这里完成。

gate:建立和用户的常链接,主要作sockt转发,屏蔽恶意包,对gs进行保护。协议加密解密功能,一个gate共享多个gs,降低跳转地图连接不上的风险。

IM,关系,寄售:表示其它组件,负责对应的跨地图发生全局的游戏逻辑。

细节是魔鬼。此架构简单、清晰、明了,和其它网游架构相比其实没有什么本质的区别。团队的代码开发能力,项目管理能力才是关键。一个gs承担能力有限,在现在硬件环境下,一个有经验的开发人员,一个gs应该能达到1500人的上限。整个架构的上限,瓶颈在center调度压力,db的读写压力。

引用一段深以为然的话做结束:
==========


4。游戏开发并没有什么高深的技术

首先需要明确的一点,游戏项目是工程项目,不是科研项目。

工程项目的目的是在有限的人力跟财力之下实现出既定的需求,而这个需求从前面的分析可以知道,要求并不高,所以,需求的实现过程也就并没有多么高深。

至少在我经历过的项目里,没有什么惊天地泣鬼神似的英雄人物,没有创造出多么伟大的算法,我们所做的,只是使用现在的技术,现有的方法,拼合成一个软件产品,一个融合了程序、美术、策划劳动力的软件产品。

游戏开发的过程里,没有,也不需要多厉害的技术高手,需要的仅仅只是有耐心,有责任心的普通技术人员。
===========
最后赞一句:Dia真是跨平台画流程图的好软件,聚润堂的日常使用中已经完全替代了Visio。

参考:

白云哥的blog