苏晓开始怀疑四次故障不是巧合,是在张磊救错人后的第二天早上。
怀疑这个东西很奇怪。它不像证据,能啪一声拍在桌上。它更像一根细小的刺,扎在思路里,拔不出来,又不能立刻证明它存在。交通、导航、医疗、政务,四个系统看起来各有各的毛病:交通是区域协同异常,导航是数据同步延迟,医疗是资源保护策略过严,政务是统一认证服务停摆。
每个解释都能成立。
也正因为每个解释都能成立,苏晓才觉得不对。
“坏得太像各自的锅了。”她说。
张磊刚进办公室,手里拎着烤冷面和豆浆,听见这句立刻紧张:“锅?谁的锅?我今天没有迟到,也没有救错人,黄豆事件已经翻篇了。”
林凡抬头:“她说系统。”
“哦。”张磊松口气,“那锅比较大,我可以坐下吃。”
苏晓把四份报告贴到白板上。交通故障、导航降级、医疗分诊误判、政务认证停摆。每份报告下面,她都用红笔圈出关键时间。
交通:周二 7:06 区域拥堵预防性分流启用。
导航:周二 7:12 切换降级数据源,用户端提示不足。
医疗:周三 0:40 资源保护模式调整分诊阈值。
政务:周四 9:17 统一认证服务异常,离线流程缺位。
张磊嚼着烤冷面,认真看了半天:“它们都发生在早上和半夜。结论:系统也不适合上早班和夜班。”
苏晓没有理他,在白板旁边又写了一列:
共同点。
林凡说:“资源压力。”
顾启明说:“降级策略。”
苏晓写下。
张磊举手:“公告都很会说人话以外的话。”
苏晓也写下:对外解释轻描淡写。
林凡补充:“人工切断不足。”
苏晓点头,继续写。
顾启明翻资料:“还有一个。四次故障都涉及城市大脑二期的跨域协同接口。交通和导航是路况数据,医疗和政务是身份、资源和服务优先级。”
苏晓的笔停了一下。
“跨域协同接口。”她重复。
这个词在智能围城那阵子就出现过。那时城市大脑二期把交通、医疗、政务、养老、社区服务都连在一起,号称让城市从单点响应走向全域协同。协同听起来像美德,像大家手拉手过马路。可系统里的协同不是手拉手,是数据互相喂,策略互相改,优先级互相影响。
一个地方算错,另一个地方就可能认真执行错误。
苏晓打开电脑,把四次故障的事件链导入一张时间线。她没用系统自动分析,先手工拉表。张磊看见她一行行复制,感叹:“苏晓,你现在像在给电子表格做针灸。”
苏晓说:“自动分析会先按系统定义分类。我想看它没定义的东西。”
林凡点头。系统擅长在已有框架里找规律,但如果问题恰好藏在框架之外,自动分析会显得非常勤奋地错过重点。
时间线拉到下午,苏晓发现第一个异常:四次故障前,都出现过同一个标签。
城市级服务连续性校准。
交通故障前,校准了区域通行连续性。
导航故障前,校准了路径推荐连续性。
医疗误判前,校准了急诊资源连续性。
政务停摆前,校准了统一认证连续性。
张磊看着这几个词,眉头皱起来:“连续性校准听着像好事。它是不是又属于那种好话有一半是真的?”
苏晓说:“是。”
顾启明查二期设计文档:“城市级服务连续性校准,是为了在局部异常时保证整体服务不断。它会根据负载、资源、历史误报和舆情压力调整各模块优先级。”
林凡说:“也就是说,它不是故障发生后的补救,而是故障前的主动调参。”
苏晓点头:“而且四次调参都在压力升高前后。”
张磊小声:“我怎么感觉城市大脑像一个怕老板看周报的项目经理,哪里要红就先把颜色调淡。”
林凡看向他:“这句别删。”
张磊一愣:“我终于又说对了?”
苏晓在白板上写下:
连续性校准 = 防止系统看起来断。
问题:为了不断,是否压低了局部异常?
这不是第一次出现。智能围城那阵子里,夜间日志就出现过“服务连续性优先级上调”,导致个体异常即时响应权重降低。那时他们以为是夜间资源保护策略的问题。现在看,它像一个更大的上游逻辑,在不同系统里反复换壳。
交通里,它让路口和导航互相等待。
医疗里,它提高急诊升级门槛。
政务里,它让认证服务优先保持统一,却没给线下窗口留下足够空间。
导航里,它让用户端继续给出“基本恢复”的路径,而不是明确告诉人:我现在不可靠。
苏晓越查,脸色越沉。
她继续追校准模块的来源。文档里写着,城市级服务连续性校准模块由三方共同维护:城市大脑技术组、星穹底层接口团队、若干行业系统供应商。星穹两个字出现时,办公室里空气变了一下。
许既明的影子又回来了。
张磊说:“星穹怎么又在?这家公司是不是哪儿都有接口,跟火锅店蘸料一样?”
顾启明说:“城市大脑二期大量底层接口确实依赖星穹。前阵子我们已经看到他们接口治理边界不清。”
林凡没有说话。他想起许既明那句“我不直接造成伤害”,也想起星穹接口 shadow 出现时的冷感。接口不直接伤害人,接口只是把决定传过去;接口不选择牺牲谁,接口只是让系统们能互相理解。可当所有系统都通过同一套接口互相理解时,一个错误的“理解方式”就会变成全城通用语。
苏晓调出校准模块变更记录。权限不全,很多内容被标成商业保密或系统安全敏感。但她能看到几个版本号。
最近一次大版本更新,在交通瘫痪前一周。
更新说明:
提升跨域服务连续性,降低局部异常对城市级体验的干扰。
张磊把这句话读出来,脸色微妙:“降低局部异常对城市级体验的干扰。翻译:别让倒霉的人影响大家觉得系统好用?”
苏晓说:“有可能。”
顾启明立刻说:“也可能只是正常优化。我们不能直接下结论。”
林凡点头:“查证据。”
苏晓开始列证据需求:版本更新具体内容、校准目标权重、行业模块接入清单、四次故障时的权重变化、星穹接口调用日志、人工硬约束是否被传递到下游系统。
张磊看着清单,叹气:“这不是查故障源,这是查家谱。还是那种全家都不爱说实话的家谱。”
苏晓说:“所以要一层层问。”
她给韩总监打电话。韩总监接得很快,声音疲惫得像连续值了一个月夜班。听完苏晓的问题,他沉默几秒。
“连续性校准模块确实在四次事件前都有触发。”他说,“但这是正常机制。”
苏晓问:“正常机制为什么每次都把局部异常压低?”
韩总监说:“它的目标不是压低异常,是防止局部异常导致整体服务中断。”
“结果呢?”
韩总监那边安静了。
苏晓继续问:“人工硬约束有没有完整传递给交通、导航、医疗、政务四个模块?”
韩总监说:“理论上有。”
张磊在旁边小声:“理论上我也会认路。”
苏晓瞥他一眼,张磊立刻闭嘴。
韩总监叹气:“我需要查。星穹接口层有部分策略映射不是我们直接维护。”
林凡开口:“我们需要星穹接口调用日志。”
韩总监说:“这个权限我给不了。”
“谁能给?”
韩总监停顿了一下:“许既明。”
这个名字落在办公室里,像一枚不响的硬币。每个人都听见了,但没人立刻捡。
电话挂断后,苏晓把“许既明”写在白板最下方。她没有画圈,只是在名字旁边写了两个字:
接口。
张磊看着白板,忽然有点不安:“所以交通堵、导航乱、医院误判、政务停摆,可能不是四个系统一起倒霉,而是它们都听了同一个上游翻译?”
苏晓说:“目前只能说有这个可能。”
林凡说:“如果人工硬约束在接口层被弱化,下游系统就会以为自己仍然合规。”
顾启明接上:“每个行业系统都能说,自己按收到的约束执行了。”
张磊说:“最后锅就在接口里隐身。”
苏晓点头:“所以要追故障源。”
这次调查没有立刻给出答案。现实里真正麻烦的问题,也很少在一个下午像电视剧一样把证据送到主角桌上。苏晓只拿到了这条线:城市级服务连续性校准,星穹接口层,人工硬约束传递不明。
但这条线足够让人睡不好。
晚上,林凡把白板内容拍进黑色笔记本旁边,手写补了一行:
四次故障,共同上游疑似:连续性校准。
系统不是一起坏。
可能是一起学会了把局部异常变轻。
老周看到照片后,回了一句:
查接口,别查热闹。
第二句隔了半分钟才来:
热闹给人看,接口给系统改命。
张磊读完,抱着胳膊:“周老师这两句适合贴星穹大门口。”
苏晓合上电脑:“明天找许既明。”
林凡看向窗外。城市恢复了表面的平稳。路口通了,导航会说话了,医院调整了提示,政务大厅开始发离线应急包。每个系统都像修好了。
可白板上那条时间线告诉他,修好的也许只是表面。
真正的故障源,还在更深的地方,安静地把每一次“为了整体连续”翻译成一次“具体人往后放”。