查看原文
其他

Minecraft《我的世界》带着1.3亿居民迁徙了!

微软科技 2022-07-21

(本文阅读时间:8分钟)

 1.31亿人,这是什么概念?如果是个国家,那么这个“国家”的人口数刚好在全球排名第十。如果是个游戏的玩家数量呢?那就是:Minecraft 《我的世界》!作为一款多年来风靡全球,月活用户数达1.31亿的爆款游戏,《我的世界》除了可以单机游玩,也包含了丰富的联机要素。为如此庞多的玩家群体提供联机服务,这游戏的后端该有多强大?其实这也是不断探索追逐极限才能实现的壮举。

Minecraft Realms

的 Azure 迁移之旅


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

而 Minecraft Realms 是该游戏提供的一种在线平台,玩家可以在这个平台上创建个人服务器,并邀请好友一起游玩。可以说,《我的世界》这款游戏的大部分网络联机体验都是通过 Minecraft Realms 实现的。
作为一款全球总销量超过2亿份,月活用户1.31亿人的爆款游戏 ,它的后台系统可谓规模庞大。Realms 整个系统包含数以万计的云托管多玩家游戏服务器,运行服务代码的计算设备,订阅数据库和游戏世界状态数据存储容器,所有这些东西原本都托管在 AWS 上。
为了获得更高成本效益,与微软生态实现更好的互操作性,并进一步降低游戏延迟改善游玩体验,游戏开发工作组 Mojang 打算将后台整体迁移至 Azure。整个迁移过程分为两个阶段。
01阶段一迁移云托管多玩家服务器

Minecraft Realms 在云中托管了数以万计的多玩家服务器。这些服务器会在用户连接至自己的 Realm 时动态分配。特定时间内,每个 Realm 都运行在一台虚拟服务器中,这些服务器会随着需求的增加和减少而分配和回收。

在第1阶段,需要将 Realm 从 AWS 迁移至 Azure PlayFab 多玩家托管服务中。Azure PlayFab 提供了在大规模环境中构建和运维在线游戏所需的支持 。尤其是,这是一种针对游戏量身定制的服务,可提供全球低延迟多玩家托管服务和远程内容管理功能(用于更新游戏资源、管理在线支付,以及实现 LiveOps),借此可将游戏作为一种服务来运行,并针对游戏性能进行实时分析。当成功迁移至 PlayFab Multiplayer Servers 后,Realms 团队几乎不需要 关注虚拟机的管理工作,可以将更多时间用于改善自己产品为玩家提供的游玩体验。

此时整个后台的多玩家服务器部分已经运行在 Azure 中,而其余存储和数据库等系统还在 AWS。

▲大致架构如图所示

02阶段二迁移工作负载

随后,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 也会为相关迁移项目提供必要的技术支持和一系列工具与服务支持。

推荐阅读


精彩活动

Microsoft Ignite China

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存