资深游戏制作人Tom Ellis在社媒发帖,详细说明了《魔兽世界:无限》Beta测试上线时遇到的问题。原定计划,在现场问答结束后,无限服就应开放,但技术故障导致了延期,其后又出现掉线、排队和高延迟情况。

打开网易新闻 查看精彩图片

原贴:

打开网易新闻 查看精彩图片

“这游戏都20年了,为啥你们技术还这么烂?有道理,简单来说,是我们测试服的环境架构不同,跟正式版不是一个量级,差了十万八千里。B测通常没有太多负载压力,所以我们的配置不高,这也导致了今天的第一个问题。”

“刚上线不久,好不容易通过了登陆验证,却遇掉线,这是所有问题中最难查的一个,找原因就花了大概半小时。我们这个小小的B测环境只用到一个区域级服务器。也许哪天我们该办个讲座,聊聊《魔兽世界》的基础架构,这样大家才能了解这些技术细节。”

“的确是个问题,排查花了不少时间。当时我们服务器的CPU和内存占用率都是正常,甚至可说闲得发慌,在出现各种连接超时,大家都很纳闷。不过,最终问题被发现,原因是触发了BGS的流量计量系统,虽然CPU负载远未达到上限,但仅凭两条连接试图处理海量用户登录请求的行为,就彻底打乱了该系统所依据的计算逻辑。于是,我们将连接数从2调到8,流量闸门瞬间重新打开。我们都意识到,系统介入需要更完善的日志记录和通知机制。这是大家第一次见到它在没有明显CPU负载问题的情况下触发,干了20年,啥怪事都会发生。”

“随后是物品拾取、接任务等涉及数据库交互的操作延迟极高的问题。当时B测所用的PTR数据库对查询请求的响应非常慢。我们的Oracle数据库工程师不得不手动分析各种表,并设置自动任务定期执行此操作。因为一些表是新建的,现有的表也面临海量插入操作和新的查询模式。因此在数据剧烈变动期间,必须更频繁地进行检查。这些措施一经实施,数据库性能便立即恢复正常。”

“我们重启了服务器,把大家都踢下线。但在运行了几个小时后,我们发现负责处理游戏模拟逻辑的世界服务CPU负载极高,且内存即将耗尽。随后,首批虚拟机开始触发OOM Killer(内存溢出杀手进程)机制,甚至威胁到了宿主机的稳定性。经工程师排查发现,我们未能正确关闭空闲地图,导致系统不断吞噬CPU和内存,且速度非常之快。一个快速修复方案通过了QA测试,但需重启服务才能生效。我们也借此增设了一些“世界服务”以备不时之需,并给那个“区域服务”增加了一个“伙伴”作为冗余备份。我们再次开启了实时测试,大家也都井然有序地涌入其中。怀旧服团队正密切关注并修复任何出现的阻碍性问题,除此之外,我们今晚的工作已基本收尾——祝大家玩得开心!”