跳转至

第二十七章 · 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。

写完,他保存,关掉。

监控大盘上,结算成功率还是百分之九十九点九九。

何晚的消息进来:「上了?」

「上了。」

「降了多少。」

「百分之八十四。」

「标题写了吗。」

「写了。结算错误率下降百分之八十四。」

「好。」

他放下手机,看了一眼窗外。

对面那栋楼,有一扇窗的灯,灭了。

他愣了一下。

然后他确定,那不是他看的那扇窗。


← 第二十六章 路过 · 目录 · 第二十八章 十五分钟 →