搜索

影视聚合站

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

发布时间:2022-01-17 07:04:55来源:微软科技

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

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

MinecraftRealms

的Azure迁移之旅

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

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

作为一款全球总销量超过2亿份,月活用户1.31亿人的爆款游戏,它的后台系统可谓规模庞大。Realms整个系统包含数以万计的云托管多玩家游戏服务器,运行服务代码的计算设备,订阅数据库和游戏世界状态数据存储容器,所有这些东西原本都托管在AWS上。

为了获得更高成本效益,与微软生态实现更好的互操作性,并进一步降低游戏延迟改善游玩体验,游戏开发工作组Mojang打算将后台整体迁移至Azure。整个迁移过程分为两个阶段。

01

阶段一

迁移云托管多玩家服务器

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

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

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

▲大致架构如图所示

02

阶段二

迁移工作负载

随后,Mojang按照规划将数据库、存储以及计算设备从AWS顺利迁移到Azure。

数据库

MinecraftRealms服务涉及大量关键业务数据,包括游戏世界状态信息、订阅元数据以及遥测数据。这方面共涉及三个预生产环境和两个生产环境,每个环境中包含最多3个数据库,而此次迁移需要将分布在13个数据库中,总量1TB的数据(最大的数据库包含450GB数据),以可靠的方式从AWS移至AzureDatabaseforMySQL。由于迁移期间会产生每秒约6千个服务请求(RPS),因此这个涉及关键业务的操作变得更加复杂。

Azure提供的一系列实用工具(如AzureDatabaseMigrationService(DMS),以及来自AzureFastTrack团队的专家支持)对成功迁移至关重要。Mojang还使用了AzureDatabaseMigrationService工具,它可以简化将数据、Schema和对象从源位置迁移至Azure的过程。AzureFastTrack团队则为Mojang量身定制了指南,进一步加速、简化并优化了Azure部署。

数据库的迁移复制持续了约一周。初始数据载入过程中,最大的一个数据库表(超过10亿行!)也只用了2天时间。尽管服务需要处理6k的RPS,但所有复制延迟均未超过几秒钟。在这一过程中,每周Mojang会从AWS将一个新环境迁移至AzureMySQL,为此会安排一个较小的停机时段(大部分环境约20分钟),在这期间顺利完成AzureDMS迁移。部署完毕后环境重新上线后,数据库就成功托管在Azure了!

▲所有数据库成功迁移后,后端系统的大致架构如下图所示

存储

MinecraftRealms丰富的游戏玩法,其精髓在于构建精美的虚拟世界,玩家可以聚集在私密的空间中一起游戏。Realms已经保存了约20PB以上的虚拟世界游戏数据。

Mojang计划在尽可能避免对游玩过程产生影响的前提下将所有世界数据迁移至AzureBlob存储。这一过程会导致游玩遭遇停机,因为在移动数据的过程中,玩家将无法访问自己的Realm。为避免停机,Mojang采用了这样的策略:当现有的活跃Realm世界被首次访问时,从AWS读取现有的世界数据,随后将所有更新写入至AzureBlob存储。以后再访问这些数据时,将只通过AzureBlob来访问。

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

推荐阅读

精彩活动