微软中国MSDN点击上方蓝色字关注我们
1.31亿人,这意味着什么?
如果它是一个国家的话,那么这个“国家”的人口数量在世界上正好排第十位。
如果它是游戏中玩家的数量呢?那就是:Minecraft!
作为一款风靡全球多年、月活跃用户高达1.31亿的热门游戏,《我的世界》除了可以单机游玩外,还包含了丰富的联机元素。这款游戏的后端该有多强大,才能为如此庞大的玩家群体提供联机服务?
事实上,这也是一项不断探索、追求极限才能实现的壮举。
Minecraft Realms 的 Azure 迁移之旅
相信大家都对《我的世界》这款游戏并不陌生,作为一款以建造为主题的沙盒游戏,玩家可以使用大量外观、功能各异的“方块”作为材料,搭建出一个个奇妙有趣的世界,甚至还可以通过生存、创造、冒险、极限、观战等模式体验到更多乐趣。
Minecraft Realms是游戏提供的一个联机平台,玩家可以在其中创建个人服务器,邀请好友一起游玩。可以说《我的世界》这款游戏的大部分联机体验都是通过Minecraft Realms实现的。
作为一款全球销量超过 2 亿份、月活跃用户达 1.31 亿的重磅游戏,其后端系统十分庞大。整个 Realms 系统包括数万台云托管的多人游戏服务器、运行服务代码的计算设备、订阅数据库以及游戏世界状态数据存储容器,而这些原本都托管在 AWS 上。
为了实现更高的性价比、与微软生态更好的互通,以及进一步降低游戏延迟提升游戏体验,游戏开发团队 Mojang 计划将整个后端迁移到 Azure,整个迁移过程分为两个阶段。
第 1 阶段:迁移到云托管的多人游戏服务器
Minecraft Realms 在云端托管数万台多人游戏服务器。当用户连接到他们的 Realms 时,这些服务器会动态分配。每个 Realm 在任何给定时间都在虚拟服务器上运行,并且这些服务器会随着需求的增加和减少而分配和回收。
在第 1 阶段,Realm 需要从 AWS 迁移到 Azure PlayFab 多人游戏托管。Azure PlayFab 提供大规模构建和运营在线游戏所需的支持。具体来说,它是一项为游戏量身定制的服务,提供全球低延迟多人游戏托管和远程内容管理功能(用于更新游戏资产、管理在线支付和实施 LiveOps),可用于将游戏作为服务运行并对游戏性能进行实时分析。成功迁移到 PlayFab 多人游戏服务器后,Realms 团队几乎无需关注虚拟机的管理,可以花更多时间改善其产品为玩家提供的游戏体验。
此时,整个后端多人服务器部分已经在 Azure 中运行,而其余的存储和数据库系统仍在 AWS 中。总体架构如下图所示:
第 2 阶段:迁移工作负载
随后,Mojang 按计划成功将数据库、存储和计算设备从 AWS 迁移到 Azure。
数据库
Minecraft Realms 服务涉及大量关键业务数据,包括游戏世界状态信息、订阅元数据和遥测数据。这涉及三个预生产环境和两个生产环境,每个环境最多包含三个数据库。此迁移需要以可靠的方式将分布在 13 个数据库中的总计 1TB 数据(最大的数据库包含 450GB 数据)从 AWS 移动到 Azure Database for MySQL。迁移期间将生成大约每秒 6,000 个服务请求 (RPS),这使此关键业务操作变得更加复杂。
Azure 提供了一系列有用的工具(例如 Azure 数据库迁移服务 (DMS),以及来自 Azure FastTrack 团队的专家支持),这些工具对于成功迁移至关重要。Mojang 还使用了 Azure 数据库迁移服务工具,该工具简化了将数据、架构和对象从源位置迁移到 Azure 的过程。Azure FastTrack 团队为 Mojang 量身定制了指导,以进一步加速、简化和优化 Azure 部署。
数据库的迁移和复制大约需要一周时间。最大数据库表(超过 10 亿行!)的初始数据加载仅花费了 2 天时间。尽管服务必须处理 6k RPS,但所有复制延迟都少于几秒钟。在此过程中,Mojang 每周都会将新环境从 AWS 迁移到 Azure MySQL,并为此安排一个短暂的停机时间(大多数环境大约 20 分钟),在此期间 Azure DMS 迁移将成功完成。部署后,当环境恢复在线时,数据库已成功托管在 Azure 中!
所有数据库迁移成功后,后端系统总体架构如下:
贮存
Minecraft Realms 丰富玩法的本质在于构建一个美丽的虚拟世界,玩家可以聚集在一个私密的空间里一起游戏。Realms 保存了超过 20PB 的虚拟世界游戏数据。
Mojang 计划将所有世界数据迁移到 Azure Blob 存储,同时尽量减少对游戏的干扰。此过程将导致游戏停机,因为在数据移动期间玩家将无法访问他们的 Realms。为了避免停机,Mojang 采用了一项策略,即首次访问现有的活跃 Realm 世界时,将从 AWS 读取现有世界数据,然后将所有更新写入 Azure Blob 存储。将来访问这些数据时,将仅通过 Azure Blob 访问。
因此,操作期间将迁移所有活跃的 Realm。玩家在首次通过 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 试用账号,感受非凡的游戏运维体验。