我们有一些魔兽世界怀旧服的开发者的评论此次安其拉开门事件的压力测试,他们从中学到了什么。 首先非常感谢所有支持经验的测试人员了。 有很多的改进,特别是在游戏代码优化处理如此多的玩家在同一地区。想了解请阅读进入下面的更多细节。




嘿,大家好!


我想亲自感谢昨天出来帮助我们进行压力测试的每一个人。我们整个魔兽世界怀旧服团队真的很享受与你们所有人的互动。


这里有一些关于测试的更多细节。


我们看到的


在测试过程中,很多人会问在游戏现场的表现是否会那么糟糕,而一些人则开玩笑说他们认为它已经准备好了,我们应该发布它。或者他们不是在开玩笑?毕竟,我们昨天的压力测试与2006年安其拉开门事件开启时的经历非常相似。我们有大量的延迟,一些服务器崩溃,当玩家放弃和人口减少,事件最终完成。我们计划做得更好,但我们不可能完全消除卡顿。


我特别想感谢所有被困在飞行路径尽头的玩家,因为我们发现并解决了这个问题。与许多问题一样,一旦我们找到了根本原因,就很容易修复,而且也导致了其他问题。所有在飞行结束时看到几何沙拉的人:谢谢;你让大家都过得更好。


如果你一直停留到下午5点,我们的测试条件就会改变到你所看到的延迟接近于我们在现场游戏中所期望看到的延迟。我们别无选择,只能在服务器延迟和人口密度之间进行权衡。人越多,延迟就越大,最终,当同一区域有太多玩家时,延迟就会变得非常严重,以至于服务器认为它已经死锁了(这是一个花哨的计算机科学词汇,意思是“卡住了,无法恢复”),它就会重新启动。


因为服务器认为它已死锁而重新启动是崩溃,但这是一个特殊的挑战。其他类型的崩溃是在程序试图做一些非常糟糕的事情时发生的,所以我们找到错误的事情,并修复它,仅此而已。死锁更具挑战性,因为不是单一的问题,而是很多工作越来越落后。我们还可以做一些改进来解决这个问题。


人口密度


我们的第一个问题是指数缩放。想象一下,一个暴风雪击中10个玩家,每个人身上都有光环,减缓他们的移动速度(你的天赋提高了暴风雪的速度,对吧?)对于每一个获得慢速光环的玩家,我们还必须向附近的所有玩家发送消息,通知他们该光环已经生效。这意味着总共有100条消息。10个受影响的玩家每人发送10条信息(一条给施放暴风雪的人,九条给其他受暴风雪影响的玩家。


如果有20个玩家在场等待暴雪的袭击,那么会有4倍的信息。如果它到达40个玩家,那就是1600条信息。玩家翻倍,功乘以4。从10个玩家到100个玩家,一个咒语的信息从100条增加到10000条。我们已经有了强大的硬件,所以这是一个理解我们可以支持多少玩家而不死锁的问题,这是压力测试的一个大目标,我们得到了一些非常好的数据,因为有很多人加入了我们。


优化代码


这是我们自2004年以来一直在做的事情,在过去的几个月里,我们一直在针对这个特定事件优化代码。下面是一些最近的例子。


首先,让我们考虑缓慢光环。如果我们没有立即发送所有光环更新消息怎么办?如果您用暴风雪击中100个人,您是否真的需要在确切的那一刻知道他们中的每个人都应用了减速光环?服务器当然知道,所以光环会起作用,并且会减慢它们的运动,但是如果您一两秒钟都没有看到光环,那还好吗?如果这表示服务器没有崩溃,我们的答案是肯定的,因此我们允许延迟光环消息。这还有一个额外的好处,因为如果在等待第一次发送光环时又发生了一次光环更新,我们可以合并这些消息并整体发送更少的消息。这样可以减少网络上的数据包,并减少服务器的工作量。


我们昨天测试的另一个代码优化与面向有关。这是有关每个玩家指向哪个方向的信息。如果人口达到一定阈值后我们放慢或停止更新面对的消息该怎么办?事实证明,成本很小:玩家在移动时似乎会突然弹出。当某个区域人满为患时,玩家已经在移动时突然弹出,因此这可能是巨大的性能胜利,而没有明显的效果。实际上,我认为与这种优化方法相比,如果没有这种优化方法,播放器的跳动现象不会那么严重。


我们还提高了决定向谁发送消息的性能。当成千上万的玩家聚集在一个区域中时,仅仅决定谁需要了解您的光环更新以及您朝哪个方向移动是一项繁重的工作,因此我们也对此进行了改进。


Mov