第二十七章 · 84%¶
十月二十二日,星期四。纪衡的转发链在凌晨三点四十七分落进邮箱,末尾加了一行字:
「先上线。权限的事我来处理。」
陈稳把这行字看了两遍。他昨天下午发的那封邮件——申请调取 DHCP 全量操作日志——纪衡转发给了运维部总监,抄送了技术 VP。收件人从三个变成六个。纪衡没有在正文里写任何说明,但抄送名单本身就是说明。
他关掉邮件,打开记事本,看到上周写的那行字:10.14.1.88 全量日志:审批未批,日志未拿到。
光标在行末闪了两下。他没有删,关掉记事本。
九点,纪衡的消息进来:「全量方案周三前提交。灰度数据、压测数据、回退方案、上线时间线,一样不能少。」
陈稳回:「好的。」他打开一个空白文档,开始写。
¶
方案第一部分是灰度数据。他把一万二千四百条结算事件按商户号、对账类型、时间戳三个维度列了三张表。每张表下面写一行结论:异常率零,误报率零,系统稳定性正常。
第二部分是压测数据。他翻出九月十六日压测预演的结果——四十万笔并发,结算成功率百分之百,平均响应时间最高六十九毫秒。他加了一段说明:字段映射已改为启动时加载,压测数据在缓存优化后仍适用,连接池上限已调回一百五。
第三部分是回退方案。他写:如果实时对账不可用,回退到现有 T+1 对账流程。切换时间经测试,平均四十七秒。
第四部分只有一行:上线时间建议十月二十八日。
他写完了,从头到尾读了一遍。字数不够。他加了两个风险项:误报率在并发场景下已归零,但需持续观察七天;字段映射配置变更需重启生效,部署时需确认配置版本。
他想起一件事,翻到压测数据那一页——连接池上限从一百五调到两百后,一直没有调回来。他加了一行:连接池上限当前为两百,建议压测后调回一百五,正在确认。
他保存文档,关掉。
¶
星期四下午,他给周其正打了一个电话。
「周哥,问你个事。」
「你说。」
「10.14.1.88 那个 IP,你们部门有没有内部的操作日志,能查到谁登录了哪台机器?」
电话那头安静了一会儿。
「你上次不是问过了。张毅申请的。」
「申请人是他。但我想确认,操作的人是不是他。」
「你不是申请了全量日志吗。」
「审批还没批。」
周其正笑了一声。
「你们中台的人,做事就是规矩。」他说,「你过来,我帮你看一下。营销技术部自己的机器,我们自己有操作记录。」
陈稳握着手机,指节在机壳上按了一下。
「下午三点。二号楼三楼。」
「好。」
¶
下午三点,陈稳到了二号楼三楼。周其正的工位在靠窗的位置,桌上两台显示器,左边一台开着终端,右边一台是监控页面。
「坐。」周其正拉了一把椅子过来。
陈稳坐下。
「10.14.1.88,归属测试环境 DHCP 池,九月十七日分配,十月十一日再次分配。两次申请人都是张毅。」周其正一边说一边在键盘上敲,「但你说的是八月一日的索引删除,那个时间 IP 还没有分配给你们。」
「对。」
「所以你要查的是,八月一日那天,谁有权限以 root 身份登录 settle_reconciliation 表所在的数据库,并且删了索引。」
「是。」
周其正把终端窗口放大,敲了一行命令。
「我们这边只维护自己的机器。数据库的登录日志在运维部。」
陈稳知道。他来过这里。
「但我可以告诉你一件事。」周其正把椅子转过来,「张毅八月一日请了两天年假。他不在公司。」
陈稳看着他。
「你确定?」
「他请了年假,去了趟黄山。他朋友圈发了照片。」周其正把手机打开,翻到一条朋友圈。黄山,云海,一个人站在石阶上,背影。发布时间:八月一日十九点三十分。
陈稳把那张照片看了很久。
「所以不是他。」
「不一定。但八月一日下午三点到五点,他人在黄山。这个时间他删不了索引。」
「知道。」
周其正把手机收起来。
「你查这个,查了多久了。」
「两个月。」
「两个月。」周其正重复了一遍,「你查了两个月,查出来不是这个人。你打算怎么办。」
陈稳把椅子往前推了半厘米。
「继续查。数据库登录日志在运维部,我找运维部问。」
「你上次不是问过了,他们让你找审批。」
「是。我换个人问。」
周其正看了他一眼。
「你变了。」他说,「你上次来,不是这样的。」
陈稳没有接这句话。
「你继续查,我帮你留意。」周其正说,「但你要知道,这个事,可能查到最后,是你不想知道的那个人。」
¶
陈稳回到工位,打开记事本,在 10.14.1.88 那一行下面加了一行:
张毅 8/1 年假,人在黄山。排除。操作人仍在排查。运维部——换个人问。
他看了一会儿,保存。
¶
星期五下午,蒋辉端着杯子过来,站在他工位边上。
「方案写完了?」
「写完了。」
「什么时候上线。」
「二十八号。」
蒋辉把杯子放在桌上,没有说话。
「你那个方案呢。」陈稳问。
「也在二十八号。」蒋辉说,「纪衡定的。」
陈稳的手停在键盘上。两个方案同一天上线,这不是好事。
「所以我来找你。」蒋辉说,「你早上还是下午。」
「都可以。」
「那我下午。你早上。」蒋辉拿起杯子,「你上次那个连接池上限,从一百五调到两百,一直没调回来。」
「方案里写了。」
「写了就好。」蒋辉说,「纪衡看方案的时候,会注意到你写了。他看到你写了,就不会问。」
陈稳把键盘往前推了一下。
「你那个字段映射 MR,我看了。顾源说的?」
「嗯。」
「他是对的。」蒋辉说,「你那个缓存,十九行,查了四天。下次遇到这种事,找我。」
陈稳抬起头。
「你找我?」
「我欠你一次。」蒋辉说,「上次的事,你没有在群里说。」
蒋辉说完,往回走了。走了两步,又停下来:
「你那个连接池,调回来的时候,注意一下监控。别一调就出问题。」
「知道。」
蒋辉走了。陈稳坐在工位上,键盘上方的灯管闪了一下,又亮回来。
¶
星期五晚上,陈稳到家的时候,何晚在客厅看书。
「方案写完了?」
「写完了。」
「发了吗。」
「没有。」
「那你什么时候发。」
「星期一。」
何晚把书翻了一页。「你以前不会说星期一。你以前会说'再看看'。」
陈稳换了鞋,走进厨房,倒了杯水。
「你变了。」何晚说。
「你上次说过了。」
「这次不一样。」何晚把书合上,「你上次说'我不知道'。这次你没有说不知道。」
陈稳端着水杯坐在沙发上。他想起上午在周其正那里的事。
「我今天查了一个人。」
「查到了?」
「排除了。」
「查了两个月,排除了?」
「嗯。」
「然后呢。」
「继续查。」
何晚把书放在茶几上。
「你以前不会追这种事。你以前会觉得,事不关己。」
陈稳想了一下。她说得对。两个月前,如果有人删了索引,他会加回去,然后就算了。但他没有算。
「我不知道为什么。」他说。
「你知道。」何晚说,「你只是不想说。」
陈稳把杯子放在桌上,杯底碰到桌面,发出一声闷响。
何晚站起来,拿起水杯,走进厨房。水龙头开了,又关了。
「吃饭吧。」
¶
星期一早上,陈稳把方案打开,又读了一遍。
他改了三处。第一处,把「异常率零」改成「异常率百分之零点零一——十二条测试数据中有两条在切换瞬间出现时序偏移,经确认非业务影响,已修正。」
第二处,把「回退方案:T+1 对账流程」改成「回退方案:T+1 对账流程。切换时间:经测试,平均四十七秒。」
第三处,他加了一行:连接池上限当前为两百,建议压测后调回一百五,正在确认。
他检查了一遍,确认没问题。然后他拿起手机,打开易文的聊天窗口。
他打了一行字:「方案写完了。你看一下吗。」
打完,他看了两秒,把整行字删掉。
他关掉聊天窗口,把方案发给纪衡。
正文写了三行:
对账模块全量方案已提交。 灰度数据零异常零误报。 建议上线时间十月二十八日。
纪衡的回复在十分钟后进来:
「方案收到。灰度数据确认。二十八号上线。按方案执行。」
他看了三遍。
然后他打开记事本,写:十月二十六日。方案提交。纪衡没有改。他停了一下,又补了一句:没有让易文看。
¶
二十七号,星期二。陈稳在测试环境跑了最后一次全量演练。
连接池上限已调回一百五。压测通过。字段映射配置版本确认,和灰度版本一致。
他给纪衡发了一条消息:「演练完成。连接池已调回一百五。配置版本已确认。明天上午九点上线。」
纪衡回:「收到。」
晚上,他回到家,打开电脑,把部署文档看了一遍。部署步骤六步:备份配置、停服务、更新配置、启服务、验证、切流量。每一步都写了一个回滚命令。
何晚端了杯水放在他桌上。
「明天?」
「嗯。」
「紧张吗。」
「不紧张。」
「你紧张的时候会反复刷新监控大盘。」何晚说,「你现在没在刷,但你在看部署文档,这是第三遍了。」
陈稳把文档最小化。
「你查一下,明天上线之后,什么会变。」何晚说。
「结算错误率会降。」
「降多少。」
「百分之八十四。」
「那你明天的汇报标题应该叫这个。」何晚说,「别叫'对账模块全量上线报告'。叫'结算错误率下降百分之八十四'。」
陈稳看着她。
「你以前不会教我写标题。」他说。
何晚把水杯往他手边推了推。
「你以前也不会听。」
¶
十月二十八日,星期三,上午九点。
陈稳坐在工位上,打开部署文档。
第一步:备份配置。完成。
第二步:停服务。完成。对账服务日志显示:graceful shutdown completed。
第三步:更新配置。完成。字段映射配置版本:v1.2.0。
第四步:启服务。完成。日志显示:field mapping loaded: 42 rules, 0.3s。
第五步:验证。他跑了一条测试数据。状态字段「已结算」→ 视图输出 1 → 实时对账输出 1。一致。
第六步:切流量。他把灰度流量从百分之十调到百分之百。
监控大盘刷新。
结算成功率:99.99%。异常率:正在更新。
他等了三十秒。异常率从百分之十一点七开始往下掉。百分之十。百分之八。百分之六。百分之四。百分之二。
停在百分之一点八七。
他算了一遍。百分之十一点七减去百分之一点八七,等于百分之九点八三。百分之九点八三除以百分之十一点七,等于百分之八十四。他又算了一遍,确认没有算错。
他打开记事本,写:十月二十八日。对账模块全量上线。结算错误率从 11.7% 降至 1.87%。降幅 84%。
写完,他打开一个新文档,写汇报。
标题:结算错误率下降百分之八十四。
正文三行:
十月二十八日,对账模块全量上线。 灰度数据一万二千四百条,零异常零误报。 全量数据结算错误率百分之一点八七,较上线前下降百分之八十四。
他检查了一遍,点了发送。
收件人:纪衡。抄送:易文、蒋辉、周其正、张磊。
纪衡的回复在十分钟后进来。一个字:
「好。」
易文的回复在二十分钟后进来。三个字:
「标题可以。」
¶
下午两点,运维部打来电话。
「陈稳?我是运维部赵岩。纪总让我跟你对接全量日志的事。」
陈稳把手机换到左手。
「你好。」
「我查了一下,八月一日那天,数据库的登录日志有记录。但那个库的审计日志在 RDS 管理后台,我这边没有直接查的权限,需要你提交一个工单。」
「什么工单。」
「数据库操作日志审计查询。走 OA 系统,选数据库工单类型,填理由和时间范围,我批。」
「好。」
「还有一件事。」赵岩说,「你查的那个数据库,八月一日当天,除了 root 登录之外,还有两个普通账号登录过。要不要一起查。」
「要。」
「那你在工单里写清楚,查所有账号,不限于 root。」
「好。谢谢。」
赵岩挂了电话。陈稳把手机放下,打开 OA 系统,找到数据库工单类型,开始填。
申请内容:查询 settle_reconciliation 表所在数据库 2026-08-01 00:00:00 至 2026-08-02 00:00:00 的全部登录记录及操作日志。 申请范围:所有账号,不限于 root。 申请理由:该表索引于 2026-08-01 23:14 被删除,需确认操作人。
他填完,点了提交。工单号:DB-20261028-0047。
他把工单号复制到记事本里,在 10.14.1.88 那一行下面加了一行:
运维部赵岩对接。工单 DB-20261028-0047 已提交,含所有账号。
¶
下午五点,陈稳把监控大盘缩小,往后靠了一下。
对账服务运行正常。消息服务运行正常。结算成功率百分之九十九点九九。异常率稳定在百分之一点九。
他拿起杯子,去茶水间接水。
茶水间里,他接完水,站在窗前,看了一会儿对面那栋楼。窗户密密麻麻,亮着灯。
他想起顾源说的那句话:不改的东西,不叫缓存。叫常量。
他想起何晚说的那句话:你查那四天,白查了?
他想起自己说的那句话:他说的那句话,我三天前听不懂。
他端着杯子,没有喝。
他忽然想到一件事。顾源说「不改的东西,不叫缓存。叫常量」——这句话,也许不只用在代码上。
他不知道自己想得对不对。
他把水喝完,回到工位,打开记事本,在最后一行写:
10.14.1.88。张毅已排除。操作人仍在排查。运维部赵岩对接。工单 DB-20261028-0047。
写完,他保存,关掉。
监控大盘上,结算成功率还是百分之九十九点九九。
何晚的消息进来:「上了?」
「上了。」
「降了多少。」
「百分之八十四。」
「标题写了吗。」
「写了。结算错误率下降百分之八十四。」
「好。」
他放下手机,看了一眼窗外。
对面那栋楼,有一扇窗的灯,灭了。
他愣了一下。
然后他确定,那不是他看的那扇窗。
← 第二十六章 路过 · 目录 · 第二十八章 十五分钟 →