关于架构:131亿月活的爆款游戏它的后端架构是怎样的

1.31亿人,这是什么概念?

如果是个国家,那么这个“国家”的人口数刚好在全球排名第十。

如果是个游戏的玩家数量呢?那就是:Minecraft《我的世界》!

作为一款多年来风靡寰球,月活用户数达1.31亿的爆款游戏,《我的世界》除了能够单机玩耍,也蕴含了丰盛的联机因素。为如此庞多的玩家群体提供联机服务,这游戏的后端该有多弱小?

其实这也是一直摸索追赶极限能力实现的壮举。

Minecraft Realms的Azure迁徙之旅

Minecraft《我的世界》这款游戏置信大家都不生疏。作为一款以建造为主题的沙盒类游戏,玩家能够用大量不同外观和性能的“方块”作为素材搭建微妙乏味的世界,甚至在此基础上通过生存、发明、冒险、极限、旁观等模式体验更多乐趣。

而Minecraft Realms是该游戏提供的一种在线平台,玩家能够在这个平台上创立集体服务器,并邀请好友一起玩耍。能够说,《我的世界》这款游戏的大部分网络联机体验都是通过Minecraft Realms实现的。

作为一款寰球总销量超过2亿份,月活用户1.31亿人的爆款游戏 ,它的后盾零碎堪称规模宏大。Realms整个零碎蕴含数以万计的云托管多玩家游戏服务器,运行服务代码的计算设施,订阅数据库和游戏世界状态数据存储容器,所有这些货色本来都托管在AWS上。

为了取得更高老本效益,与微软生态实现更好的互操作性,并进一步升高游戏提早改善玩耍体验,游戏开发工作组Mojang打算将后盾整体迁徙至Azure。整个迁徙过程分为两个阶段。

阶段一:迁徙云托管多玩家服务器

Minecraft Realms在云中托管了数以万计的多玩家服务器。这些服务器会在用户连贯至本人的Realm时动态分配。特定工夫内,每个Realm都运行在一台虚构服务器中,这些服务器会随着需要的减少和缩小而调配和回收。

在第1阶段,须要将Realm从AWS迁徙至Azure PlayFab多玩家托管服务中。Azure PlayFab提供了在大规模环境中构建和运维在线游戏所需的反对 。尤其是,这是一种针对游戏量身定制的服务,可提供寰球低提早多玩家托管服务和近程内容治理性能(用于更新游戏资源、治理在线领取,以及实现LiveOps),借此可将游戏作为一种服务来运行,并针对游戏性能进行实时剖析。当胜利迁徙至PlayFab Multiplayer Servers后,Realms团队简直不须要 关注虚拟机的管理工作,能够将更多工夫用于改善本人产品为玩家提供的玩耍体验。

此时整个后盾的多玩家服务器局部曾经运行在Azure中,而其余存储和数据库等零碎还在AWS,大抵架构如下图所示:

阶段二:迁徙工作负载

随后,Mojang依照布局将数据库、存储以及计算设施从AWS顺利迁徙到Azure。

数据库

Minecraft Realms服务波及大量要害业务数据,包含游戏世界状态信息、订阅元数据以及遥测数据。这方面共波及三个预生产环境和两个生产环境,每个环境中蕴含最多3个数据库,而此次迁徙须要将散布在13个数据库中,总量1TB的数据(最大的数据库蕴含450GB数据),以牢靠的形式从AWS移至Azure Database for MySQL。因为迁徙期间会产生每秒约6千个服务申请(RPS),因而这个波及要害业务的操作变得更加简单。

Azure提供的一系列实用工具(如Azure Database Migration Service(DMS),以及来自Azure FastTrack团队的专家反对)对胜利迁徙至关重要。Mojang还应用了Azure Database Migration Service工具,它能够简化将数据、Schema和对象从源地位迁徙至Azure的过程。Azure FastTrack团队则为Mojang量身定制了指南,进一步减速、简化并优化了Azure部署。

数据库的迁徙复制继续了约一周。初始数据载入过程中,最大的一个数据库表(超过10亿行!)也只用了2天工夫。只管服务须要解决6k的RPS,但所有复制提早均未超过几秒钟。在这一过程中,每周Mojang会从AWS将一个新环境迁徙至Azure MySQL,为此会安顿一个较小的停机时段(大部分环境约20分钟),在这期间顺利完成Azure DMS迁徙。部署结束后环境从新上线后,数据库就胜利托管在Azure了!

所有数据库胜利迁徙后,后端系统的大抵架构如下图所示:

存储

Minecraft Realms丰盛的游戏玩法,其精华在于构建精美的虚拟世界,玩家能够汇集在私密的空间中一起游戏。Realms曾经保留了约20PB以上的虚拟世界游戏数据。

Mojang打算在尽可能防止对玩耍过程产生影响的前提下将所有世界数据迁徙至Azure Blob存储。这一过程会导致玩耍遭逢停机,因为在挪动数据的过程中,玩家将无法访问本人的Realm。为防止停机,Mojang采纳了这样的策略:当现有的沉闷Realm世界被首次拜访时,从AWS读取现有的世界数据,随后将所有更新写入至Azure Blob存储。当前再拜访这些数据时,将只通过Azure Blob来拜访。

因而所有沉闷的Realms都会在运行的过程中实现迁徙。玩家只有在通过Azure首次启动本人的Realm时会体验到难以觉察的(毫秒级)提早。最终,只须要将剩下的不沉闷世界数据(指最近一年内均未被激活过的数据,约300TB)进行批量复制即可。

存储迁徙的大抵过程如下图所示:

计算

Realms服务代码通过执行要害工作(如记录元数据更新、解决Realms内的购买行为、预配/撤销游戏服务器)解决了来自Minecraft客户端的所有Realms申请。整个Realms服务代码最后托管在AWS,通过60多个虚拟机承载游戏的大部分外围服务。

为确保玩家能够无缝更新,Mojang采纳了一种蓝绿部署策略(如下图所示)。其中会将一个版本同时部署到Azure和AWS,并通过DNS更新的形式在这两个地位间切换用户流量。借此能够在将测试和客户流量齐全指向Azure之前残缺创立并测试每个环境。因为AWS和Azure上的部署在同时运行,用户流量遇到的任何问题都能疾速撤销并修复。借此能够疾速平安地回滚,最大限度防止停机,并能实现持重的验证。

总结

至此,Mojang就胜利将整个Realms服务(包含前端服务器(计算)、虚拟世界数据(存储)、以及所有数据库和游戏服务器自身的管理工作)迁徙至Azure。这不仅帮忙他们进步了Realms外围业务的效率,同时也改善了Realms玩家的玩耍体验。

借助弱小的Azure工具集,Mojang还升高了服务保护老本 —— 代码规模更小,部署更简略,形象水平更高。与此同时,还利用笼罩寰球的Azure服务进一步改善了玩耍体验。

尽管大规模要害业务零碎的迁徙看起来仿佛很难 ,但明确最终目标,建设牢靠的迁徙布局,并对相干组件进行拆解,这样做能够大幅简化整个过程。同时Azure也会为相干迁徙我的项目提供必要的技术支持和一系列工具与服务反对

是否想要体验基于Azure搭建游戏后端系统,或者将其余平台上现有的零碎迁徙至Azure?欢迎扫描下方二维码,立刻注册Azure试用账户,感触不个别的游戏运维体验。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理