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 试用账户,感触不个别的游戏运维体验。