第70章 零点零七秒的救赎(2/2)

林野的太阳穴突突直跳。他盯着不断刷新的调用链,突然注意到一个被忽略的细节:所有异常交易的用户,都来自同一批新注册的商户号。这些商户注册时间集中在三天前,认证信息都是批量生成的,像是...水军。

安全组呢?他吼了一嗓子。

沉默三秒后,安全主管脸色惨白:我们在查。这些商户号关联的ip在境外,请求里混着挖矿木马的流量特征...有人在攻击我们的支付系统!

真相瞬间清晰:这是一场精心策划的ddos+业务逻辑攻击。黑客先用僵尸网络模拟真实用户发起支付,触发系统扩容;再精准卡在redis切换的0.3秒窗口,用批量请求制造锁冲突,最终压垮整个支付链路。

他们算准了我们为了大促会降低锁超时。林野攥紧拳头,现在常规扩容和备用锁都没用,必须找到锁竞争的根源。

他重新扎进代码。orderlockmanager的锁生成逻辑里,每个订单的锁键是

order_lock:商户id:订单号。但如果同一商户短时间内发起大量订单,锁键的前缀高度重复,redis的哈希槽分布就会不均,导致某些分片压力暴增。

改锁键生成规则!他突然抬头,把订单号换成全局唯一id,再加随机盐值。这样锁键的哈希分布会更均匀,避免热点分片。

代码修改只用了三分钟。当他把新配置推送到集群时,机房响起此起彼伏的抽气声——监控屏上的红色节点开始以肉眼可见的速度消退,绿色逐渐连成一片。

零点十七分,第一笔交易成功清算。

零点三十分,支付成功率恢复到99.9%。

凌晨一点,林野瘫坐在机房地板上,看着团队成员互相拍肩庆祝。老周递来一瓶冰水:刚才你说算准了大促扩容...你怎么知道黑客会选这时候?

三个月前安全演练。林野拧开瓶盖,我们模拟过类似攻击,当时锁竞争导致的问题和现在一模一样。但我当时觉得大促期间黑客不会挑这种时候,就把修复排期拖到了明年。

他望着重新亮起的业务大盘,声音轻得像叹息:异常不会挑日子。今天要是晚十分钟,星链可能就从行业前三变成反面教材了。

清晨六点,林野走出机房。晨光穿透云层,照在陆家嘴的玻璃幕墙上。手机弹出新闻推送:双十二支付高峰平稳度过,星链系统零重大事故。

他笑了笑,拨通安全组的电话:把下个月的安全加固计划提前。还有,给我和所有架构师排异常处理培训——这次不是模拟,是真的在鬼门关走了一圈。

远处传来早班地铁的轰鸣。这座城市的数字血脉里,无数笔交易正在安全流转。而林野知道,每个平稳的0.07秒背后,都是一群人在异常日志里,替用户守着永不熄灭的灯。