《燃烧的远征》周年纪念预更新停机维护说明
来源:暴雪(官方论坛/蓝帖)
大家好,
我想在这里和大家分享一下关于即将到来的《燃烧的远征》周年纪念24小时维护窗口期的一些“内情”,因为我们很少会进行这么长时间的停机维护。
警告!此帖不包含任何实用信息!我是认真的!这只是为那些对此类幕后故事感兴趣的人分享一些可能有趣的见解。
当经典旧世团队找到服务器和在线运营团队,准备推出这个叫做“周年纪念”的新项目时,有一个非常、非常巨大的“大象”和我们同处一室,那就是《魔兽世界》重返中国。让中国服务器重新上线运营是我们自……或许是有史以来面临的最大的基础设施挑战。经典旧世版本的发布规模更大,但在中国从头开始运营也带来了大量独特的挑战。为了满足经典旧世团队的需求,我们必须创造性地工作:我们没有像通常那样为这种项目搭建一个全新的《魔兽世界》环境,而是让周年纪念服务器作为一些新的服务器运行在我们现有的经典旧世(永恒)环境中,并且只用了一点代码来防止周年纪念服和经典永恒服发生冲突。这层薄薄的“墙”曾被突破过几次,最著名的大概就是一些“探索赛季”的玩家设法进入了周年纪念服的奥特兰克山谷战场,结果……不得不承认,还挺搞笑的。“探索赛季”的角色和永恒服角色之间可能存在着那么一点点实力差距……总之,通过这种方式,它让我们能够在那个非常疯狂的时期,以对所有人日程影响最小的方式推出了周年纪念服。
当我们这么做的时候,就知道这只是把问题往后推了。经典永恒服将永远是经典永恒服,但我们新的周年纪念服最终会推进到《燃烧的远征》。你不可能让两个不同版本的《魔兽世界》在同一个环境中运行,我们迟早需要采取行动,把这些服务器迁移到它们自己的环境中去,这样它们才能升级到《燃烧的远征》。
这就把我们带到了现在,我们终于追上了那个被踢出去的“罐头”,可以说现在是“付钱给吹笛人”的时候了。当我们研究可用的方案时,再次发现自己时间紧迫——我们当时正忙于发布我们制作过的最大规模的、以数据库为重点的功能之一:“玩家房屋”,而且周年纪念服的工作范围比预期的要大(周年纪念服非常受欢迎)。一个最可能的方案——类似于“互联服务器”风格的迁移——也被排除了,因为我们发现支持那个过程的代码和脚本已经非常过时,要复活它们所需的测试轮次超出了我们拥有的时间。
另一个方案是,我们可以直接执行几百万个角色转移,把所有人都复制到新环境的新服务器上,但这对玩家并不友好,因为公会会被解散,角色名冲突会非常普遍。一支精干的工程师团队聚集在一起,集思广益,希望在有限的时间内找到对玩家影响最小且仍然可行的解决方案。好消息是,他们找到了一个方案,对你们来说应该是完全透明的——你们的角色、邮件、公会……当你们在《燃烧的远征》预更新上线登录时,一切都将和你们离开经典永恒服时的最后一天一模一样。
我们实现这一目标的方式相当“非主流”,我们称之为“原地持久化”,这可能对任何人都没什么意义,但我们现在是完全的分享模式。《魔兽世界》的数据存在于三个数据库中:持久化数据库(你的角色、公会、物品等)、账号数据库(账号级别的东西,比如成就)以及最后是区域数据库(处理区域范围的事务,比如时光徽章、服务器列表上的角色数量)。在周二,我们将把所有账号和区域数据复制到新环境的数据库中,这将占用停机维护的大部分时间。至于你们的持久化数据,这就是我们开始打破一些关于《魔兽世界》基础设施的长期既定规则的地方。
新环境上的这些“新”服务器,将使用它们旧的持久化数据,这些数据存放在仍然在为经典永恒服服务的旧数据库上。这是全新的做法,我们以前从未做过这样的事情。当数据库工程师提出这个计划时,最初的反应是“等等,这真的能行吗?”但测试证明,是的,真的可以!对于任何懂数据库的朋友来说,我们谈论的是两个不同版本的《魔兽世界》对同一个数据库进行读写操作,而通常每个环境都应该有自己的数据库。幸运的是,我们所有玩家的数据都被标记了它们所属的正确环境,所以我们的所有查询都能愉快地继续工作。我们只需要更新几处地方,让它们知道只查找其特定环境的数据,而不是想当然地认为它们连接到的数据库只包含它们关心的东西。万岁!
这一切对你们来说意味着什么?归根结底,什么都没有改变。周二服务器上线时,你们会看到原来的服务器,同样的名字,找到你们同样的角色,所有东西都一样。所以提前感谢大家在这个特殊的停机维护事件期间给予的耐心。这是一次性的迁移,经典周年纪念服未来不需要再次重复。
希望你们能从这堆“文字汤”中找到一些价值。我们周二见!
/Fwoibles