暴雪正在从技术角度深入研究如何创建第二次安其拉开门系列活动。 他们研究了一些历史,第一个是从以前的香草版本中学到了什么,他们如何使用自动工具和压力测试来使第二个版本(重现)尽可能地正常工作,这是经典/原始代码本身的局限性, 大门的最初打开,以及GM如何跟随他们生活并即时实施解决方案,还有更多!


如果你对幕后工作有点兴趣的话,那你就可以看看魔兽世界历史上最大的事件之一,以及它是如何改进和处理的。




优化服务器性能


我们的服务器经过精心设计,可以在遇到卡死时崩溃并重新启动,因此我们知道,尽一切力量来帮助最大程度地缩短处理时间是至关重要的。经过一些测试,很明显,角色的移动是对服务器施加巨大压力的第一道处理能力。我们首先删除面向的更新(显示角色模型面对的方向),当一个玩家开始,停止,或使用键盘动作才发送更新。由于过多的播放器的延迟已经受到影响,因此花费CPU时间发送次要的面向更新会使保真度变差。因此,最好停止发送它们。我们决定取消发送运动更新的频率,以支持在区域中拥有更多玩家。请记住,我们正在尝试在服务器崩溃之前找到突破点,同时允许尽可能多的玩家进入希利苏斯。毕竟,最好错过一些动作更新,而不是根本无法登录到角色。我们还开始限制标记为优先级较低的数据。做某事被认为是“不太重要”的动作,其发送速度不应与“更重要”的动作相同。我们看到许多消息都是一次发送的,而不管它们有多重要,并且优化了代码以仅向您批量发送不太重要的信息,并减少了发送频率。


Buff和Debuff是对我们性能的另一个很大的影响。在世界各地,尤其是在与怪物战斗时,所有的单位都会受到增益和减益效果的影响。尽管这似乎没什么大不了,但由于周围都是高度集中的玩家,因此需要传递这些信息。类似于限制低优先级数据,我们现在对buff和debuff进行批处理,以避免连续向玩家发送多个数据包。


管理玩家人数


除了优化服务器以在每个区域中容纳更多玩家之外,我们并没有逃避不可能容纳整个服务器的人口(超过希利苏斯的原始1.12魔兽世界怀旧服的两倍)。必须做出艰难的决定,通过控制允许谁进入和允许多少玩家来限制进入该区域。我们决定只允许希利苏斯内允许60级角色,如果已满则停止允许符合条件的角色进入。设置此限制是正确的选择,因为众所周知,希利苏斯事件是游戏的终极内容,并且较低级别的角色仍然可以参与其他地区的战争,例如杀死在贫瘠之地中游荡的野怪。适用于20级到30级的玩家。第二个关键点是,我们知道在不使服务器崩溃的情况下可以处理的区域中有多少玩家的上限。然后,问题就变成了该数字应减少到多少,以达到最佳的玩家比率。经过测试,我们发现这个数字大约是1,500,如果他们叠放在一起的话。但是,由于偶数占据了整个区域,因此一旦玩家分散,我们看到的性能问题很小。


该活动计划在所有地区举行,因此我们必须确保该活动可以跨多个分层进行。这意味着在一层上敲锣的持权者应该在与该服务器相关的所有其他分层上开始活动。由于事件的触发是基于玩家互动的,所以我们希望确保权杖承载者在多层中可见,以便同一服务器中的所有玩家都能看到它们。这引起了一个有趣的问题,因为服务器现在必须中继此信息,而这些信息通常不需要相互通信。当我们编译并通过服务器发送更新以确保我们跨多个层镜像数据时,可能会给成千上万的玩家带来很多麻烦。


我们从引入荆棘谷钓鱼比赛开始开发这项技术,然后将其应用于奥妮克希亚,奈法利安,祖尔格拉布和世界BUFF。一旦我们认为它能够按预期工作,我们就可以与其他技术一起对安其拉战争事件进行测试。


在艾泽拉斯推广服务器解决方案


最初,优化计划只在安其拉战争期间对希利苏斯有效。在我们确定它们可以安全地在全地图推广之后,我们在1.13.5中将它们应用到了整个世界。一旦战争开始,玩家们就开始上缴物资,集体收割虫子尸体。我们看到了大量的球员不仅在西利休斯,而且在我们的主城和外围地区。这些优化有助于提高这些体验的性能,允许大规模的PvP战斗在艾泽拉斯发生。有些玩家甚至创造了世界boss来帮助清除蜂巢中其他阵营的玩家。


即使大门开启事件还没有发生,一些服务器遇到了奇怪的问题,因为他们的战争努力没有进展。每一天都有一个很快的时间来阻止他们的服务器在这场比赛中的速度。由于这种边缘情况发生的可能性非常小,我们能够手动修复这些服务器,然后解决这个问题,以便将来的服务器完成他们的工作。


当物资完成后五天来打开大门,我们开始监视第一个敲锣的中国服务器—奥罗,当我们监控我们的分层人口时,我们发现每层的大多数玩家都在希利苏斯。这次活动跨越了数千名玩家的多个极限分层,这是我们以前从未做过的事情。虽然有明显的延迟卡顿,但是我们的服务器在第一个中国服务器开放期间并未发生任何崩溃。


砰的一声锣!


2020年8月4日,有人指出,在服务器重启后不久,北美将有几个服务器准备敲锣。我们一个接一个地在游戏主帐户上监控这些服务器,并通过我们的观察工具来监控和解决可能遇到的任何问题。每一个服务器都打开了,毫无疑问地开始了活动。权杖持有者得到了他们著名的黑色其拉作战坦克坐骑,玩家可以与更大的BUG战斗,我们很高兴这种稳定性。当我们等待第一台重置后的服务器完成五天的等待期时,我们注意到一个重要问题:服务器重新启动后事件不会持续。这意味着,如果服务器崩溃或重新启动,我们将失去所有进程。虽然这个问题在魔兽世界怀旧服开发之初就已经存在了,但是在服务器重启期间使用事件持久化的应用并不多。我们的团队能够很快地解决这个问题,但是我们需要确保在我们能够部署一个修复程序并正确地将所有现有的战争状态编目到我们的数据库中而不会对玩家造成干扰之前,不会再重新启动。


一些人可能会争辩说,让服务器崩溃是导致最初的安其拉事件混乱的原因,这反过来又让它难忘。相反,我们努力培养同样的热情,通过策划一个更稳定的体验,可以在每台服务器上同时与大约1500名玩家分享。我们希望经典的安其拉事件的记忆是尽可能多的玩家玩通过10小时事件没有中断。当我们经历了一些服务器崩溃,我们能够很快让他们重新上线。这些服务器在几分钟内完全恢复,重新上线,没有后续的事故发生。


全世界有超过4000名玩家成为了甲虫之王,而且随着每台服务器的战争努力,这个数字还在不断攀升。自从安其拉开始以来,对怀旧服的兴奋和投入是令人难以置信的,我们感谢所有加入我们的流沙第二次战争!