玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?

微软中国MSDN 点击上方 蓝字关注我们
1.31亿人 , 这是什么概念?
如果是个国家 , 那么这个“国家”的人口数刚好在全球排名第十 。
如果是个游戏的玩家数量呢?那就是:Minecraft《我的世界》!
玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?
文章图片

作为一款多年来风靡全球 , 月活用户数达1.31亿的爆款游戏 , 《我的世界》除了可以单机游玩 , 也包含了丰富的联机要素 。 为如此庞多的玩家群体提供联机服务 , 这游戏的后端该有多强大?
其实这也是不断探索追逐极限才能实现的壮举 。
Minecraft Realms的Azure迁移之旅
Minecraft《我的世界》这款游戏相信大家都不陌生 。 作为一款以建造为主题的沙盒类游戏 , 玩家可以用大量不同外观和功能的“方块”作为素材搭建奇妙有趣的世界 , 甚至在此基础上通过生存、创造、冒险、极限、旁观等模式体验更多乐趣 。
而Minecraft Realms是该游戏提供的一种在线平台 , 玩家可以在这个平台上创建个人服务器 , 并邀请好友一起游玩 。 可以说 , 《我的世界》这款游戏的大部分网络联机体验都是通过Minecraft Realms实现的 。
为了获得 更高成本效益 , 与 微软生态实现更好的互操作性 , 并进一步 降低游戏延迟改善游玩体验 ,游戏开发工作组Mojang打算将后台整体迁移至Azure 。 整个迁移过程分为两个阶段 。
阶段一:迁移云托管多玩家服务器
Minecraft Realms在云中托管了数以万计的多玩家服务器 。 这些服务器会在用户连接至自己的Realm时动态分配 。 特定时间内 , 每个Realm都运行在一台虚拟服务器中 , 这些服务器会随着需求的增加和减少而分配和回收 。
在第1阶段 , 需要将Realm从AWS迁移至Azure PlayFab多玩家托管服务中 。 Azure PlayFab提供了在大规模环境中构建和运维在线游戏所需的支持。 尤其是 , 这是一种针对游戏量身定制的服务 , 可提供全球低延迟多玩家托管服务和远程内容管理功能(用于更新游戏资源、管理在线支付 , 以及实现LiveOps) , 借此可将游戏作为一种服务来运行 , 并针对游戏性能进行实时分析 。 当成功迁移至PlayFab Multiplayer Servers后 , Realms团队几乎不需要 关注虚拟机的管理工作 , 可以将更多时间用于改善自己产品为玩家提供的游玩体验 。
此时整个后台的多玩家服务器部分已经运行在Azure中 , 而其余存储和数据库等系统还在AWS , 大致架构如下图所示:
玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?
文章图片

阶段二:迁移工作负载
随后 , Mojang按照规划将数据库、存储以及计算设备从AWS顺利迁移到Azure 。
数据库
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了!
所有数据库成功迁移后 , 后端系统的大致架构如下图所示:
玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?
文章图片

存储
Minecraft Realms丰富的游戏玩法 , 其精髓在于构建精美的虚拟世界 , 玩家可以聚集在私密的空间中一起游戏 。 Realms已经保存了约20PB以上的虚拟世界游戏数据 。
Mojang计划在尽可能避免对游玩过程产生影响的前提下将所有世界数据迁移至Azure Blob存储 。 这一过程会导致 游玩遭遇停机 , 因为在移动数据的过程中 , 玩家将无法访问自己的Realm 。 为避免停机 , Mojang采用了这样的策略:当现有的活跃Realm世界被首次访问时 , 从AWS读取现有的世界数据 , 随后将所有更新写入至Azure Blob存储 。 以后再访问这些数据时 , 将只通过Azure Blob来访问 。
因此所有活跃的Realms都会在运行的过程中完成迁移 。 玩家只有在通过Azure首次启动自己的Realm时会体验到难以察觉的(毫秒级)延迟 。 最终 , 只需要将剩下的不活跃世界数据(指最近一年内均未被激活过的数据 , 约300TB)进行批量复制即可 。
存储迁移的大致过程如下图所示:
玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?
文章图片

计算
Realms服务代码通过执行关键任务(如记录元数据更新、处理Realms内的购买行为、预配/撤销游戏服务器)处理了来自Minecraft客户端的所有Realms请求 。 整个Realms服务代码最初托管在AWS , 通过60多个虚拟机承载游戏的大部分核心服务 。
为确保玩家可以无缝更新 , Mojang采用了一种蓝绿部署策略(如下图所示) 。 其中会将一个版本同时部署到Azure和AWS , 并通过DNS更新的方式在这两个位置间切换用户流量 。 借此可以在将测试和客户流量完全指向Azure之前完整创建并测试每个环境 。 由于AWS和Azure上的部署在同时运行 , 用户流量遇到的任何问题都能快速撤销并修复 。 借此可以快速安全地回滚 , 最大限度避免停机 , 并能实现稳健的验证 。
玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?
文章图片

总结
至此 , Mojang就成功将整个Realms服务(包括前端服务器(计算)、虚拟世界数据(存储)、以及所有数据库和游戏服务器本身的管理工作)迁移至Azure 。 这不仅帮助他们提高了Realms核心业务的效率 , 同时也改善了Realms玩家的游玩体验 。
借助强大的Azure工具集 , Mojang还降低了服务维护成本 —— 代码规模更小 , 部署更简单 , 抽象程度更高 。 与此同时 , 还利用覆盖全球的Azure服务进一步改善了游玩体验 。
虽然大规模关键业务系统的迁移看起来似乎很难,但明确最终目标 ,建立可靠的迁移规划 , 并对相关组件进行拆解 , 这样做可以大幅简化整个过程 。 同时Azure也会为相关迁移项目提供必要的 技术支持和一系列 工具与服务支持 。
玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?
文章图片

【玩家|1.31亿月活的爆款游戏,它的后端架构是怎样的?】是否想要体验基于Azure搭建游戏后端系统 , 或者将其他平台上现有的系统迁移至Azure?, 立即注册Azure试用账户 , 感受不一般的游戏运维体验 。