腾讯内部技术:《轩辕传奇》服务器架构演变

今天给大家分享一下腾讯游戏《轩辕传奇》的服务器架构,讲服务器架构如果只是得一个结果,把架构示意图展示一下,这种没有什么意义,今天我想从一个每个人都会写的最简单的架构模型,如何一步一步的演变成《轩辕传奇》分区分世界的架构。

功能扩展性切分与运维扩展性切分

最简单的游戏服务器,一个进程搞定所有的功能,比如支持500人同时在线,开一个服A对应的玩家称ClientA, Server一个进程,架构如下: ClientA------>Server。如果再开第二个服B,如何处理?

方案1: Server 一个进程同时支持两个服的玩家同时游戏,ClientA/B---->ServerA/B,这样的好处就是跨服通讯非常的方便,在一个进程里面,缺点就是ClientA服的玩家引起的宕机会影响B服的玩家。同一个进程来跑A区,B区,无法发挥服务器的多核优势。那么就会演变成方案2。

方案2:A服玩家由ServerA进程来提供服务,B服玩家由ServerB进程来提供服务,他们部署到一台机器上。这样的相比方案1的优点就是一台机器上实现了扩容,缺点仍然很明显就是如果物理机器坏了,两个服的玩家都不能正常的游戏。

ClientA------>ServerA

ClientB------>ServerB (ServerA,ServerB部署到一台机器上)

再接着演变和拆分,得到方案3。

方案3: 我们把不同的服放到不同的物理机器上,这样不同的服就真正的独立起来。

ClientA------>ServerA

ClientB------>ServerB (ServerA,ServerB部署到不同机器上)

总结一下,方案1到方案2叫做功能可扩展性切分,方案2到方案3叫做运维扩展性切分。

分离公共服

不同的服部署到不同的物理机器上,不同服之间有一些公共的服务,不用每个服的实现一个,每个服都架设一个,所以把这些公共的服务里单独分离出来,于是架构演变成如下:

这个时候公共服就是全局唯一的,多个服共用,它就变成了一个单点,公共服的单点故障怎么办?单点故障常用的解决方案就是主-备-从。

按功能分离每个服

上面轩辕里面所说的每个服都按照固定的功能来来分三层: 连接层(tconnd),逻辑层(logic srv), 存储层(torm svr)如下图

那么随之而来的问题又来了,逻辑处理与数据持久化在一台物理机器上,会到导致DB的文件IO拖慢整个系统(每个服百万级玩家,几百个G的数据)。进程运行中每日输出大量的日志,像轩辕每天日志量可达几个G的数据。更致命的是如果物理机器崩溃,数据库中的商业数据随时会丢失,商业数据丢失在长期运营的过程中已经可以算一个很严重的运营事故。所以每个服的架构又会做后面的演变。

按重要性分离:分离逻辑计算与持久化存储部署

游戏运行中的重要数据包括了日志与数据库数据,我们讲这些重要性的数据需要持久化存储部署的与逻辑计算分离开来,重要的数据采用主-备-从的方式,确保商业数据的稳定性。那么我们的服务器每个服务的架构演变如下:

分区多世界原型演变

总结上面的演变,我们把整个轩辕的架构图放出来给大家,存储与逻辑分离,每个服按功能分成3部分。Cluster级服,全局只有唯一的一个,World级服,每个世界一组,每个服,包含接入,逻辑,存储。存储做好分离,做好DB, DR。

公共服进一步分离

大体的架构定下来了,接下来就是分离一些轩辕里面功能部分,先来分离公共服。如下图

我们把公共服的一些固定功能,单独的拆分出来不同的服务进程,来提供对应的服务,比如目录服,

版本升级,账号服务等。这样把公共服拆分成了一套进程。运维的时候根据运维需求来把公共服部署一套机器。

切分轩辕逻辑进程

当前服的所有玩家都在一个进程上,好处就是可以方便的操作到所有玩家,风险也是有的,一个特性的bug会影响到当前进程上所有其它特性的玩家。接下来我们把逻辑进程来进行拆分,MMORPG里面拆分逻辑进程常用的方法是按照场景来拆,那么我们的架构演变如下,把逻辑拆分成世界+多个Scene,如下:

让多个Scene分别服务一些用户,World负责拉取数据,协调控制所有的Scene。游戏开发和其它应用用开发最大的不一样就是,一个产品上线了,结合玩家玩家运营,要经常改,上线了才刚刚开始,所有的功能和特性在一个进程里面,不断的更新特性会使得稳定性降低,所以我们把那些相对更新少的功能拆分独立出来,提升更新对系统稳定性造成的风险。

总结

最后总结一下,游戏框架如何切分,在轩辕中得到的一些总结经验,分享出来,供大家参考:

为可扩展性: 一组服,一套进程;

为可运维性: 一组服,一套机器;

为可靠性: 弱相关的功能分离;

提高更新的便利性: 将平凡更新的部分分离;

按服务的重要性切分: 支付系统独立;

按服务特点切分: 接入,存储, 逻辑分离;

切分稳定 (基础功能)的与不稳定(业务逻辑)的

好了,今天的《轩辕传奇》架构演变就分享到这里了,我详细的讲解了一节课程,除了分析演变以外,还分享了长线运营中的一些经验,分享给没有开发过大型玩家在线游戏的开发者。

附教学视频:

腾讯内部分享:《轩辕传奇》MMO服务器技术架构分享bycwedu.vipwan.cn/promotion_channels/987877417bycwedu.vipwan.cn/promotion_channels/987877417

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容