第18章 四千人,服务器崩了
第18章 四千人,服务器崩了 (第2/2页)登录网关和维持在线的会话进程突然停止了响应。
“断了!”
伴随着工程师的一声惊呼,幕布上的在线人数计数器的数值开始不断下跌。
四千。
两千七。
一千一。
不到一分钟,那个代表着所有人努力的数字就彻底变成了灰色的‘零’。
“不要重启!”谭群钊几乎从椅子上弹了起来,大声喝止正准备敲击键盘的下属。
“所有人别动进程!先保存内存故障信息,立刻复制底层日志,再给数据库做绝对隔离的只读快照。”
几名高级工程师迅速按照指令操作起来。
紧张的十分钟过去后,现场所有的数据保存完毕,测试服务器这才重新启动。
为了确定这种异常崩溃会不会让掉线的角色数据受损,盛大通过后台切断了公用通道,只允许各家网吧登录指定的排查账号。
最让人担心的问题,还是出现了。
八十七个角色,发生了不同程度的数据回档。有的是刚打完怪获得的经验凭空消失,有的是在重连后回到了切换地图以前的位置。
最致命的问题是,交易逻辑出了问题。
一家上海网吧的督导紧急打来电话:两位参与测试的玩家在服务器崩溃前的一分钟面对面交易了一把铁剑,重新登录以后,不仅购买人的背包里有一把铁剑,售出者的背包里还有那把本该被扣除的铁剑。
督导已经让两名玩家退出游戏,彻底清空缓存再重新登录,两个玩家的背包里还是有那把属性一模一样的铁剑。
谭群钊只觉得一阵寒意窜上了背脊,厉声道:“拉后台!让人核对二十分钟内所有的交易记录!一笔一笔查!”
下午四点十分。
一份还带着打印机余温的排查结果表被送进了会议室。
在服务器崩溃前后,全服一共出现了十七笔异常交易。
由于并发极高,系统写入产生了微小的时间差。物品接收方的数据挤进了通道,被成功保存;而物品转出方却因为数据库写入超时,被系统保护机制强制回退到交易发生前的状态。
十七件物品就这么硬生生地被复制成了两份。
许进楷看完手里的数据表,提了一个最核心的问题:“如果是玩家自己网络不好导致掉线,会不会出现这种复制情况?”
“暂时还不能确定。”谭群钊神色凝重,“现在我们通过日志能确认的只有一点:交易双方的数据在底层逻辑上不是同时保存的。它是先写入接收方数据,再写入转出方数据。”
“服务器恰好在这两个步骤执行的间隙出现了异常,才造成了这次极其偶然的单边回档复制。”
“这种机制能不能被人故意利用?”任宇昕这句话直击要害。
“要重新搭建独立环境测试过后才能确定。”谭群钊不敢在老板面前轻易下结论,分析道:“如果必须要整个服务器的会话进程崩溃才能触发,那被玩家主动利用的概率很小。但是如果单个角色利用拔网线强制掉线来精准卡住这个时间差,从而触发复制机制,那问题就严重了。”
会议室顿时安静了下来。
服务器承载量不足,可以通过砸钱增加设备解决。
但复制物品就是网游的顽疾,只要有人在公测后找到了稳定的触发方法,游戏里所有的稀有武器、道具和金币,在几天内就会成为失去价值的废品,整个游戏经济系统就会迅速崩盘。
“今天的测试到此结束。”
许进楷放下手里的数据表:“把所有的崩溃日志、数据库快照以及全部操作过程整理成技术文档,马上联系韩国,让Actoz和wemade给我们一个合理的说法。”
下午五点四十分。
跨越黄海的越洋三方电话会议正式接通。
Actoz海外项目负责人以及wemade服务器架构工程师同时加入会议。盛大把下午的压力测试过程、监控数据以及那十七笔异常交易的记录都传真了过去。
面对这种严重事故,两家韩国公司也没有推卸责任,《传奇》的中国区授权合同是由Actoz、wemade和盛大三方共同签订的,服务器底层逻辑的程序修补和后续支持也属于韩方必须承担的责任范畴。
但在问题的成因上,中韩两边出现了意见分歧。
Actoz的工程师先检查了盛大这边的部署环境,他认为承载四千人以后出现的严重延迟和拥堵,很大可能是因为受到了数据库参数未优化、服务器连接方式以及中国机房网络配置的综合影响,需要拿到盛大完整的日志才能确定是不是韩方代码的问题。
而作为研发方的wemade工程师则更加直接,他看过那十七笔回退记录后指出:无论盛大的服务器是因为什么原因崩溃的,角色交易作为一个整体事件,在逻辑上就绝对不应该出现只保存一方数据的情况,这都是因为底层代码交易锁缺失。
两方对服务器性能瓶颈的判断虽然有不同意见,但好在很快协商好抢修的分工:
Actoz负责彻查盛大这边的部署程序、数据库配置和相关的技术文档。
wemade的核心团队则全权负责在韩国机房测试物品复制的漏洞,并连夜修改交易锁和角色数据保存的底层逻辑。
并约定第二天上午双方都必须提交第一份故障分析报告,并且在九月二十四日以前,wemade必须向盛大提供修复后的最新测试版本。同时安排两名原本负责项目交付验收的韩国工程师第二天直接飞上海来现场办公。
眼看韩方计划好了技术排期,任宇昕又严肃地问道:“九月二十八日,能不能正常进行公测?”
首尔那端的电话里,陷入了沉默。
过了好半晌,Actoz项目负责人的声音才传了过来:
“现在还不能保证。”
“在底层修复物品的复制问题以后,我们还要进行大量的回归测试,包括角色交易、仓库储存、物品丢弃和死亡数据回档等。只是改动一处代码,也许又会在其他地方产生新的问题。”
电话会议在压抑中结束,任宇昕挂掉了电话后,径直来到了白板面前。
那个预期“十万、三十万、五十万”的宏伟目标依旧没有变化,但任宇昕在旁边写下了今天的实测结果:
【单组在线四千三百一十二人,进程崩溃。】
【稳定承载量,暂计三千人。】
“各位,按照单组承载三千人准备吧,十万人我们需要三十四组服务器集群。”
任宇昕扔掉了手里的笔,看向采购部:“盛大租赁的设备加上已经到货的采购设备,预备的两台服务器不能动,现在满打满算也只有二十组,我们还需要十四组。”
“采购部门今晚就联系所有长期供应商,不惜一切代价,先满足九月二十八日承载量的需求。至于三十万和五十万的承载量具体需要多少设备,等拿到韩国补丁测试的结果以后,再决定最终的采购数量。”
交代好之后,任宇昕又拿起笔开始推演时间线。
9月24日,测试版本。
9月25日,第二次单组压力测试。
9月26日,多组服务器联合测试。
9月27日,最终数据核定。
“二十五日拿到韩国的新补丁后,仍旧使用今天这五千个账号进行测试,重新把今天全部的测试流程跑一遍。”任宇昕用手指敲了敲白板,“单组抗压通过以后,二十六日再测多组服务器的联合运行和网关并发。”
“如果二十七日上午,游戏中依然存在复制物品的漏洞,服务器依旧达不到单组稳定承载量的标准,”任宇昕咬了咬牙,“那九月二十八日,就延迟公测。”
这话一出,会议室里几位管理的心猛地一颤,同时望向了主位坐着的许进楷。
游戏前期的宣发造势早就把盛大架了起来,如果公测跳票,公司的士气和口碑都会受到很大的冲击。
许进楷看着技术总监,问了一句:“如果我们带着这个漏洞强行上线,多久才会被市面上的玩家发现?”
谭群钊苦笑了一下,摇头道:“这种事全看运气。也许一个月都不会有人发现,但也可能,公测第一天就被网吧偶然断网的玩家发现。”
“那就按任总的计划执行。”
许进楷定下了结论:“如果二十七日的结果达不到预期,公测直接延期。”
他很清醒,“今天服务器崩在了四千人,这只是压力测试结果,幸好我们发现了问题所在。但要是为了赶档期,二十八日那天在全国十万个玩家面前服务器崩了,那就是盛大万劫不复的事故。”
当天夜里,十一点零七分。
wemade发来了第一份技术补充说明。
邮件内容很简短:
韩方工程师已经在纯净的测试环境中,成功重现了物品复制。
最可怕的是,根本不需要整组服务器陷入拥堵瘫痪后崩溃,只要玩家找准时机,卡好面对面交易的时间点,人为制造客户端的角色会话异常(比如强行拔掉网线),就有很大概率将物品成功保留在双方的背包。
这意味着,只要有人在公测后掌握了这个物理断线的方法,就能无限量地利用这个漏洞掠夺游戏内的财富。
许进楷盯着邮件里的测试对比结果沉默了。
随后他拿出手机,给京城那边发了一条消息,学校那边请假,他国庆假日结束前都不回去了。
他抬头看向墙上的日历。
距离那个决定中国网游历史的命运之日的到来,只剩最后五天。