藏拙失败后的第一个工作日,林默在电梯里就被招呼了两回。刷卡进楼,轿厢门刚合拢,别组两个运维的话头停了半截。到六层,其中一个朝他点了点头,笑容比平时客气三分;另一个盯着楼层显示屏,把那个「6「字一直看到底。搁在上周,这两位见了他连头都懒得点。
茶水间的变化更具体。他接水的时候,隔壁组一个刚来半年的年轻人先一步替他按下了饮水机开关,然后才想起自己也是来接水的,讪讪让开半步。杯子递过来的时候,那双眼睛在他脸上和杯子上之间来回了两趟。林默道了声谢,接水,走人,步子和平时一样快慢。
上午十点,陈志远转来两份「技术交流邀请「:一份来自压测当天在场的厂商,指名想请「贵司参与现场处置的技术负责人「去做一次内部分享;另一份来自一家没打过交道的集成商,措辞更客气,说想「探讨联合服务模式「。同一天下午,他的微信多了两个好友申请,头衔一个写着「云架构师「,一个写着「售前总监「,验证消息都只有一句话:久仰。
他一条都没通过。邀请函倒是没拒——陈志远来问他的时候,他的答复是:「挑一家正经的,去讲公开数据里能讲的部分。别的,不讲。「
处置报告的余波当天也到了。局里那边把它在群里转开还不到两小时,小吴就@了他一句:往后排查组的演示文稿,每期抄送一份给他,处长点的名。他把这条看了两遍,回了个「收到「。名头这种东西,来得比他预想的还快。
下午四点,陈志远叫他进了办公室,回身把门关上,又把自己的手机扣在桌面上,这才开口。
「默子,那天……到底是怎么弄的?「声音压得很低,「我让人查了那晚的变更记录,你名下只有一条接管授权,别的什么都没有。中间那七分钟,日志里只有脚本在跑。「
林默端起杯子喝了一口。茶是早上泡的,还温着。「预置编排。「他说,「压测前我带人把备用链路和应急策略都备好了,脚本里写了裁决逻辑。那天就是把它调了出来。「
「七分钟写完一套裁决逻辑?「
「不是七分钟写的。是写了大半年,那天用上了。「
这话半真半假。真的一半是:那套东西确实备了大半年;假的一半是:裁决不在脚本里,在他脑子里。可这话没法说全,说全了,陈志远今晚就得跟着他一起睡不着。
陈志远盯着他看了很久,最后点点头,把手机翻回正面。「行。我不问了。「他顿了顿,又说,「就一条——往后这种事,能提前跟我说一声的,提前说一声。我不是要管你,我是想知道,什么时候该替你把门看住。「
「有数了。「林默说。从办公室出来,他在走廊里站了一小会儿。门里那句话,比预想的好接——陈志远要的不是答案,是一个「有动静时带上他「的承诺。这不难给。难的是他自己在心里过的那一道坎:连发小都开始重新掂量他的分量了,外头那些只见过七分钟的人会怎么想,他不敢往下算。
白天照旧过。晨会他坐末位,报表照交,巡检照跑。被人盯着的时候,最先乱掉的往往是当事人自己——习惯一变,心虚就露在节奏里。他把自己钉在老位置上,六点五十到,那个座位,那只磕过边的杯子。
变化全收在心里。两个晚上,他要给自己盘一笔帐。
第一晚盘的是能耐。出租屋里只开着台灯,老笔记本的风扇声很低。他先在纸上列了几行,一行一类,然后逐行往细里过。
头一类是推演。天枢把一套系统的调用链、依赖关系、故障传播路径在视野里舖开,哪儿要堵、哪儿能绕,一眼见底。压测那晚的七分钟里,最先给出的就是这个:三十七台设备的余量、十一条备用链路的实时负载、内核集群的震荡相位,全都摊在一处。这套东西替他省下的,是整支队伍一个通宵的排查。
代价也有,记在他自己身上。每次大范围推演,耳后的震颤收紧,思维被强行提速,事后是熬了通宵的反应:指尖发凉,看什么都慢半拍。压测当晚他在主控台后坐了十分钟才起身,不是拖,是腿有点软。回家睡到第二天下午,才把那口亏空补回来。
他把这代价记成了一条使用守则:大范围推演,两周之内不超过一次;小范围的,也要挑不影响第二天状态的日子。这条守则没人给他定,是他从教训里自己攒出来的——前一阵替交通排卡口优化,连着两天推演,第二天在会上把两个数字报反了,虽然没人看出来,他自己记到今天。
再一类是调度。借池子的余量,削峰、引流、重排。这一类的帐不记在他身上,记在这座城市身上——天枢说过的话他记得很牢:网不会直接露,线头会从最不起眼的地方冒出来。灯杆控制器的温升、边缘设备的电表、换风机半夜的转速,每一样都是可查的痕迹。调度用得越狠,物理世界里欠下的帐越多。
池子的家底他也顺了一遍:四十一台在线,三十七台常备,准入线跟着设备负载浮动;薄设备单独一类,缓冲上限三成,入池有时限。这张网是他手里最硬的一张牌,也是最烫的一张——每一次激活,都会在这座城市留下一笔待查的帐。
最里层那类,天枢管它叫「预备额度「。能临时把推演的分辨率擡高一档,能把某次调度的并发上限翻倍,属于压箱底的东西。他动用过的次数,一只手数得下来;天枢主动提它的次数,零。早先的系统日志里,这一栏挂的是另一套叫法,他问过一次,天枢不肯说。
至于额度从哪来,天枢只回了两个字:「能用。「隔了几秒,又补了一句:「不到万不得已,别动。「
问得再深,就没有下文了。他留意到一个细节:有些本可以借预备额度做得更漂亮的局面,天枢偏让他用笨办法硬扛。前一阵替人社排依赖图,明明有更省事的路径,天枢给的方案绕了三道弯。当时他以为是保守,现在盘完帐,他改了判断——那不是保守,是省。天枢在替谁省、省的是什么,它不说,他也问不出来。
守着这口井的是个什么脾气,他摸出了几分:给方案的时候大方,提额度的时候抠门。抠门的东西,一般都贵。三行列完,他把纸推到一边,在笔记本上敲下一段结论:三样能耐,三本帐。一本记在身体上,睡一觉能平;一本记在城市的状态上,做事之前先算痕迹;还有一本,记在谁也看不见的地方,连催债的方式都还没见过。
帐看不清,就更得省着花。这一条,他写进了第二天要建的那个库的扉页。第二晚盘的是漏。
白天的帐好算,晚上的难。他把压测那晚的调度过程重新过了一遍,一帧一帧地看。看到第三遍,他在屏幕前停住了。
三十七台设备,从第一台入池到最后一台就位,前后不到四秒。对人是快,快得漂亮。可要是有双眼睛盯着频谱,这四秒就是一面旗子:三十七台素不相识的设备,在同一毫秒窗口里改变了工作姿态,不是任何运维脚本会有的节奏,是同一根手指同时按下了三十七个琴键。这种「协调度「,正常流量里堆不出来。
省级平台那笔黄标,就是这么来的。前一阵他借光的那晚,二十几台设备的算力突起被流式计算抓了出来,标了黄,进了次日覆核的队列。当时他庆幸那笔黄标混在成百上千条记录里不起眼。现在想,庆幸错了地方——真正的问题不是这一次够不够小,而是每一次都有。
冷频段上那道微光,也是。三周前闪过一次,压测收网前又闪过一次。有人守在那段频率上。守了多久,守的是谁,他不知道。他只知道一件事:当初织这张网的时候,想的全是能用,没想过会被看见。残片教他织网,没教他藏网。这一课,得自己补。
补课的成果,是当晚建起来的一个库。库就藏在加密分区最深处,和那十条观察记录同一个屋檐下,分门别类。文档夹起名毫无破绽:机房值班日志备份(旧)。三层结构,一层比一层薄,一层比一层要紧。
最厚的一层叫常规打法。里头记的全是日常运维里「刚好够用「的分寸:把响应延迟压到人之常情的范围,把隐患在发作前抹平,每一步都配好现成的说法——延迟下来了,是「新上的缓存策略起效「;故障没扩散,是「监控告警够灵敏「;压测当场处置干净,是「预置编排加人工接管「。最后这条他写得最顺手,因为它已经进了正式文件,白纸黑字,查有实据。他最成功的一次藏拙,就是让真相换了个说法,自己走进了对帐单里。
薄一些的那层叫收力方案。记的是退路,一共七条。头三条是老规矩:告警先让监控系统「自然「触发,他再「响应「;借用的余量,事后拿一段例行巡检的日志盖过去;能走「设备自动编排「口径的,绝不走人工口径。后四条是压测那晚换来的新帐:入池改错峰,从同一毫秒拆到十几秒;入池顺序打乱,相邻设备不许连号;调度流量套上例行巡检的节拍当外套;每次公开亮相之前,先把退路的说法备好——这一条原本是天枢立的规矩,现在落成了条文,编号入册。
最薄的那层只有三页纸,写得很慢。标题是:若身份彻底曝光。第一页,不慌。一个能在崩盘夜里把系统拉回来的手艺人,到哪儿都有碗饭吃。怕的不是曝光,是露了怯、让人拿住了急。
第二页,留证。他把这条写成了一项长期工程:每个经手过的系统,都整理一份可交接的文档包——架构说明、参数依据、变更历史,齐到任何人拿着就能接手。不是要挟谁,是让自己任何时候走,都走得干净,也走得清白。文档每周更新一次,跟归档盘轮换同一个日子。
