暴风城拍卖师伯纳尔特每天要面对上千个顾客。这些顾客里,有人只是想卖掉几组矿石,有人在倒卖草药赚差价,还有开着扫描脚本的地精商人在毫秒级刷新商品列表。伯纳尔特不会抱怨,但他的服务器会。每个新版本上线后的第一周,拍卖行就像被塞进了扭曲虚空——点一下搜索,转圈,再点一下,还是转圈。插件作者们更新了一版又一版,把TradeskillMaster的扫描逻辑优化到极致,结果该卡还是卡。玩家开始骂暴雪,骂服务器垃圾,骂代码像意大利面条。但真正的问题比这更简单,也更残酷:人太多了。
数据洪流下的铁炉堡银行
一个服务器的拍卖行数据库里躺着多少条商品记录?美服Illidan这种人口大服,高峰时期AH表条目超过800万。每个商品有堆叠数量、单价、剩余时间、卖家名字、竞标记录。玩家每做一次全量扫描,就是在请求服务器把这800万行数据遍历一遍,再按你的过滤条件重新排序。TSM的“快速扫描”模式本质上是在偷偷缓存数据,把全量扫描拆成按页加载,再用本地机器做二次过滤。这个办法聪明,但治标不治本。时光服在去年12月那一波调整中试过给AH加读写分离,把查询请求直接打到只读副本,写入操作走主库。效果立竿见影,搜索延迟从平均4.2秒降到1.1秒。问题在于只读副本的数据同步延迟大概在8到15秒之间。你搜到的价格可能是15秒前的,而地精的取消上架操作已经把市场砸穿了。想抢个低价货?你看到的“最低价”早就没了。
怀旧服的滚动鬼服与PLUS的碎片化实验
硬核服务器的拍卖行反而最流畅。原因很简单,角色死了就没了,玩家不敢囤货,经济规模天然受限。暴雪在2024年1月的蓝帖里提过一组数据:硬核服的AH日均交易量大约是普通怀旧服的12%,商品条目数维持在40万左右。这个量级对任何数据库都谈不上压力。PLUS服(探索赛季)走了另一条路,他们把部分热门材料——比如魔化丝绸和灰烬布——做成了战网通行证绑定,彻底不让交易。这个改动直接砍掉了PLUS服拍卖行约35%的商品种类,交易量骤降,AH响应速度一度超过正式服。负面影响也明显,炼金专业做转化需要魔化丝绸,绑定了就意味着每个号必须自己刷。玩家社区的抱怨从“AH卡死了”变成“暴雪不让我买”。
正式服还在用最老实的办法扛着。跨服拍卖行统一后,商品池子变成了全美服共享,条目数直接爆到5000万量级。暴雪给AH加了动态限流,单个玩家每分钟的请求次数上限被压到60次。超过这个阈值,服务器会直接拒绝你的查询请求,返回一个“请稍后再试”的红色报错。高端地精开始用多账号并发查询来绕开限制,每个账号卡在59次请求的边缘,十几个账号同时跑,等效请求量能拉到每分钟700次以上。服务器感知到的总负载没降,只是从单线程暴力扫描变成了分布式游击战。

赛季轮回中的经济通胀与铜币陷阱
每个赛季末期的AH崩溃已经成为规律。巨龙时代第三赛季结束前一周,欧服Kazzak服务器的AH平均响应时间从正常状态的0.6秒飙升到23秒。玩家在疯狂甩卖制造业材料,把库存换成金币,备战新版本。这种集体行为在数据库层面表现为写操作的指数级增长。取消上架操作比单纯上架更消耗性能,因为要同时更新商品表和竞标历史表。暴雪的工程师在2023年的GDC分享上承认,AH系统的瓶颈不是CPU也不是内存,是InnoDB引擎的行锁竞争。多个人试图修改同一条商品记录时,只有一个事务能拿到锁,其余的全部排队。排队到一定程度,连接池就爆了。
正式服11.0“地心之战”的AH改动曾让不少人抱过希望。暴雪加入了批量上架功能,一次最多可以挂出100组同样的材料。这个功能减少了请求次数,但没有改变行锁的本质。测试服数据显示,批量上架时的行锁持有时间比单组上架长了4倍,因为需要一次性锁定商品模板表的更多范围。省了网络往返,苦了数据库事务。地下堡(Delves)玩法产出的高等级装备无法交易,也就不会进入拍卖行,这对AH生态是好事。但制造业材料依然需要流通,矿和草的数量没有减少。
插件作者圈子里流传着一句话:你没法用Lua修复一个后端容量问题。TSM的维护者之一在Discord上坦言,他们能做的只是让用户更少地触发全量扫描,用更聪明的方式欺骗大脑,让你觉得“不那么卡了”。真正的解法在暴雪的机房,或者更准确地说,在他们对AH经济模型的顶层设计上。把部分交易品改成绑定,或者引入更激进的交易税,再或者像某些私服那样直接限制单角色的AH上架总数。每一个方案都有代价,都会踩到某个玩家群体的尾巴。伯纳尔特还会继续站在暴风城贸易区,面前的拍卖师依然忙碌。服务器机房里的硬盘灯狂闪,数据库的redo log在疯狂写入。这个困局没有魔法能解,只有取舍,和取舍之后的下一轮卡顿。
