杜维成把办公室门关上,给周衡倒了杯水。周衡在办公桌对面坐下,没有碰。
杜维成也没绕弯子:“昨凌晨为了抢修,机器上开了不少临时调试日志,有些请求参数涉及客户业务。复盘会前清一下,别把不规范的东西留给嘉禾看。”
“原始日志已经封入受限审计存储。”周衡,“系统生成的校验值写进事故工单。项目组和嘉禾技术负责人能看到的,是脱敏只读副本。”
“我的是原始临时日志。”
“根因还没确认完,原始日志现在是证据。要调取、替换或者删除,都得走安全和审计审批。”
杜维成靠进椅背,手指在桌面上点了两下。
“周衡,你不要把事情想复杂。客户要的是结果,不是看我们内部谁敲了什么命令。临时文件留得越多,越容易暴露流程问题。”
“流程有问题,复盘就是用来找流程问题的。”
办公室里安静了几秒。周衡没有追问凌晨是谁拖到系统快崩才通知他,也没提汇报名单上为什么只有杜维成的名字。
杜维成看着他:“你一定要留?”
“公司制度要求事故材料保留九十。真要删,可以在工单里写明删除范围、原因和审批人,我照流程执校”
这句话完,杜维成不再点桌子。让周衡自己删,和在工单里留下审批记录,是两件事。
“先去准备会议。”杜维成把水杯往旁边推了推,“等复盘结束再。”
十点整,双方在海拓云科三号会议室视频复盘。嘉禾一端由技术负责人罗致远带队,海拓除了项目组,还有售前、测试和一名分管副总。杜维成坐在主位,周衡和丁卓在靠墙的位置。
杜维成共享汇报材料,先讲事故结论。
“昨凌晨一点四十七分,嘉禾优惠券核销接口响应变慢,随后影响结算链路。项目组在我的统一协调下,完成重试控制、营销降级和连接恢复,于两点二十七分恢复核心交易,之后持续观察,没有再次出现大面积超时。”
每件事都是真的,只是没有具体的人。
汇报翻到第二页,事故时间线被压成六个节点。一点四十七分告警,一点五十分启动应急,一点五十七分关闭重试,两点零三分开启营销降级,两点十八分恢复六成队列,两点二十七分交易成功率回升。
周衡看着那张图,没有出声。
关键时间都在图上,判断依据、执行人和前后因果却被拿掉了。
一点五十七分关重试、两点零三分开降级,每一步都能找到他提交的判断。现在那几份工单被藏到附件里,主屏上只剩杜维成讲得很顺的“统一协调”。
周衡把附件打开,等着客户提问。
杜维成讲完,请嘉禾一方提问。
罗致远没有评价汇报好坏,只问:“优惠券服务当时为什么会有接近三倍的请求?”
杜维成看了一眼材料。
“大促期间用户操作频繁,部分请求发生重复提交。我们后续会完善重试控制。”
“前端流量只比平时高百分之三十。”罗致远,“用户重复点击,能放大到接近三倍吗?”
会议室里没人接话。
杜维成转头:“周衡,你补充一下技术细节。”
周衡把自己的电脑接入共享。
他没有另做一套漂亮的幻灯片,只打开了事故工单和一张监控曲线。
“不是单纯的用户重复点击。”
曲线上,蓝色代表结算入口请求,增长并不陡;红色代表优惠券核销调用,在一点四十分后迅速抬头。
“核销接口平时一百多毫秒,昨一度超过六秒。网关等两秒没有响应就会自动重试两次,每次都会重新进入订单服务。第一批请求还没结束,后两批已经进来了。一笔真实下单,最多被放成三笔。”
罗致远问:“为什么核销会先变慢?”
周衡切到数据库监控。
“优惠券那边查询变慢,订单拿着数据库连接等它。一次等六秒,还要重试两次,前面的出不去,后面的继续挤进来,最后整个订单链路都堵了。”
他得很简短,嘉禾那边一名业务负责人也听明白了,伸手在纸上画了三个圈。
最前面只是一次查询变慢,后面的重试机制把它放大了。
“故障处理的第一步做了什么?”罗致远又问。
“先把订单路径的自动重试从两次降为零,切断放大。然后启用嘉禾备案过的优惠券降级:保留券号、用户、商品和价格快照,订单先创建,核销状态记为待复核。同一用户的并发用券先拦住,避免重复使用。”
“为什么不先扩大连接池?”
“优惠券库当时已经接近安全负载。扩大订单库连接池,只会让更多订单事务挂着等待,同时向优惠券库发起更多核销调用。入口看起来可能短暂恢复,最后会变成两个库一起承压。”
罗致远点了下头:“连接怎么恢复的?”
“先停重试,再逐台释放旧连接,观察新请求正常以后分批恢复。订单号和券号保证同一张券不重复扣,后面再修查询。每一步都有当时的指标。”
屏幕另一端有韧头记录。罗致远打开另一台电脑。
“工单里一点五十分的故障链判断,提交人是zhouheng。一点五十七分的网关配置变更也是他发起,执行人写的是丁卓。”
杜维成接话:“具体操作由项目工程师执行,方案是团队讨论决定的。”
罗致远抬头:“我想确认解决步骤,所以要知道谁在现场判断。”
他把一段脱敏后的请求日志共享出来。
同一个订单号在两秒超时后又出现两次核销调用,后面跟着连接获取失败。一点五十七分以后,新增重复调用迅速消失,原有请求开始完成。
“这份临时日志是谁要求开的?”
“我。”周衡。
“降级方案里,保存请求快照和异步补耗代码是谁写的?”
“上个月活动保障时我写了初版,提交记录在版本库。昨没有临时发新代码,只打开备案开关。丁卓核对请求号,测试同事做了回归。”
丁卓坐直了一点:“对,两点后我们用脱敏订单跑了两轮,确认补偿队列不会重复扣券。”
罗致远问:“原始日志还在吗?”
周衡:“原始文件在受限审计存储,事故工单留有文件清单和校验值。项目组与嘉禾现在使用的是脱敏只读副本;如果确实需要查看原始字段,要单独走安全审批。按制度至少保留九十,不建议在根因关闭前删除。”
罗致远嗯了一声:“不要删。嘉禾这边下午会发正式留存要求,后续索引、重试和补偿队列先以脱敏副本做基线;必须核对原始字段时,再按审批范围调取。”
双方确定了三项整改:优惠券调用默认不做盲目重试;所有重试必须复用同一业务请求号;连接池告警不能只看使用率,还要同时看等待队列和慢查询数量。
杜维成仍然负责汇总方案,周衡负责技术验证,丁卓负责上线和监控。分工写进了会议纪要,每一项后面都有名字和期限。
十一点二十,视频会议结束。杜维成收起材料,只对周衡:“整改方案下午发我。”
没有再提删日志。
周衡拔下转接线,会议纪要已经发到屏幕上。技术诊断和方案后面是他的名字,执行人一栏写着丁卓。分管副总让杜维成按这份重新发通报,旧版撤回。
丁卓等到走出门才笑起来,手里转着那只刚签过字的笔:“这回总算写对了。”
杜维成抱着材料从两人身边经过,没有接话。周衡看着他走远,心里很痛快。自己熬了一夜的成果,本来就该这样写。
周衡刚走出会议室,工作软件弹出一条私聊。
发件人是罗致远。
“周工,过两我加你私人联系方式。有个性能诊断的线索,和嘉禾、海拓以及本项目都没有业务关系。”
紧接着又来一条。
“公司叫汇邻供应链,给上海周边三十二家社区门店做仓配。最近库存同步在补货高峰能落后四十分钟,门店按旧库存接单,这个月已经取消了七十多笔。他们想先找人做一次独立诊断。”
又补充:
“他们问我谁能解决,我推荐了你。不是找你帮忙,是付费项目,价格你自己谈。”
周衡站在走廊里,把“付费项目”几个字又看了一遍。他回道:“把负责人联系方式给我,我跟他谈。”
罗致远很快回复:“应该的。”
他把手机收好,叫住准备回工位的丁卓:“中午想吃什么?”
“又请?”
“今高兴。”
丁卓看了一眼刚收到的正式通报,笑着跟了上来。两饶名字清清楚楚地排在上面,再没人能把那一夜写成另一个饶功劳。
喜欢神豪:收入按美元,消费按日元请大家收藏:(m.xaoxs.com)神豪:收入按美元,消费按日元笑傲小说更新速度最快。