3DM游戏网|《魔兽世界》工程师座谈:重现安其拉战争捐献 为游戏体验保驾护航


今日(8月27日) , 《魔兽世界》官方公开了一篇工程师座谈 , 讲述了《魔兽世界》经典怀旧服重大事件“安其拉战争捐献”的相关历程 , 官方通过自动化玩家测试与压力测试确定了人数节点 , 并定制了优化解决方案 。 我们凭借软件解决方案攻克了硬件无法逾越的障碍 。 我们组织了遍及全球的大型事件 , 而服务器几乎没有崩溃 , 这一切都是在为《魔兽世界》经典怀旧服的游戏体验保驾护航 。
官博截图:
3DM游戏网|《魔兽世界》工程师座谈:重现安其拉战争捐献 为游戏体验保驾护航
本文插图
官方原文:重现第二次流沙战争
在考虑如何设计这个事件时 , 我们确立了三个明确的目标:避免连锁奔溃 , 提高区域中的预期玩家限额 , 以及确定可以接受的最大延迟时间 , 并在超出延迟限制后将玩家送出希利苏斯 。 在详细介绍提升服务器性能的方式之前 , 我们需要先明确约束条件:《魔兽世界》经典怀旧服代码库的限制、人数管理解决方案的原理 , 以及对游戏体验的影响 。
突破边界
如今的《魔兽世界》建立在15年前发布的原始代码库之上 。 从这款游戏发布开始 , 我们已经开发出了许多更为现代的方式 , 能在“争霸艾泽拉斯”中承载大量玩家 。 其中最主要的技术就是分流 。 分流技术使《魔兽世界》服务器能比2006年时容纳更多玩家 。 在“争霸艾泽拉斯”中 , 我们使用这种技术来管理服务器的玩家负荷 。 当玩家数量超过特定限额后 , 我们就会对当前区域(例如祖达萨)进行复制 。 玩家间的互动会不断地向服务器发送海量数据包 , 以此准确地判断自己的移动和施法状态 , 所以会极大地占用CPU性能 。 分流技术将玩家分散到了同一地区的不同版本中 , 从而解决了延迟问题 。 玩家进入一个人数超过限额的新区域时可能产生延迟问题 , 而分流技术同样避免了此类问题的发生 。 这听起来很简单 , 但是问题来了——《魔兽世界》经典怀旧服忠实地还原了1.12版本的游戏数据 , 甚至包括各种古怪之处 。 在极少数情况下 , 你在进入一个新区域时 , 分流会导致你的目标(如敌方玩家或某个NPC)消失 。 如果我们继续使用分流技术 , 许多记忆中的游戏时刻都将无法重现 , 比如追逐敌方玩家或NPC穿过地图边界 。 所以我们需要找到一种解决方案 , 它不能影响到原本的游戏体验 , 必须能让服务器承载更多玩家 , 而且不能让玩家在过高的延迟中受尽煎熬 。
为了解决这个问题 , 我们决定使用分层技术 。 该技术可以复制整个大陆(例如东部王国) , 使我们得以控制玩家数量 , 解决延迟问题 , 并且保留了原版游戏发布时的魅力 。 玩家可以和以前一样 , 拖着世界首领穿过整个地区、追逐敌方玩家跨越边界 , 无须担心自己会被分配到另一个位面去了 。 然而 , 分层并非长久之计 。 因为1.12版本的游戏并没有使用分层或分流技术 , 而我们曾经向玩家承诺 , 我们只会在《魔兽世界》经典怀旧服发布时使用分层技术 , 并且随着玩家逐渐分散到世界各地 , 我们将逐步停用这一技术 。 我们还是会在少数情况下使用分层技术 , 因为活跃玩家的人数太多了(比如北美地区的法琳娜服务器) 。 但是从游戏发布以来 , 我们一直在减少服务器中激活的分层数量 。 经过了15年的口口相传 , 安其拉战争成为了《魔兽世界》经典怀旧服最受玩家期待的事件 。 在希利苏斯聚集的玩家数量可能会创下纪录 , 仅次于游戏刚发布时的新手区 , 而我们又不能使用分层技术来控制人数 。 没有分流与分层技术的帮助 , 我们必须发挥创造力 , 而且要快 。
3DM游戏网|《魔兽世界》工程师座谈:重现安其拉战争捐献 为游戏体验保驾护航
本文插图
创造难以忘怀的体验
我们开始寻找一种无需分层或分流的人数管理解决方案 。 我们生成了无头的客户端——自动化玩家——指示它们模仿真实玩家的活动 , 例如施法、和NPC战斗 , 以及四处闲逛 。 通过这种方式 , 我们大致了解了数千名玩家挤在同一个区域中互动时的游戏性能 。 在多次模拟后 , 我们开始邀请志愿者进行压力测试 , 这样就能收集真实玩家的行为并进行比较 。 这让我们确定了人数节点 , 找到了在玩家人数过多时最容易出错的服务器代码 。 我们仔细检查了服务器的帧周期 , 以了解它们是否可能导致服务器停止响应(又被称为“死锁”) 。


推荐阅读