凌晨一点四十二分,运维楼三层只剩林默这一格灯。空调的换风声被他听成了静音的底噪,后颈对着出风口,去年落下的旧伤隐隐发酸——一受凉就来提醒他这块骨头还连着自己。手边的浓茶凉透了,杯子搁在键盘右侧固定的位置,从坐下起没动过。手机扣在桌面上,屏幕朝下,像一块不着痕迹的镇纸。
铺下态势感知探针之后的第七个凌晨。每晚关机前扫一眼那几个可疑节点,已经是雷打不动的新工序。扫完的结果他记在一个巴掌大的记事本上,一晚一行:日期、七粒点的颜色、各自的时延峰值。本子已经写满了七行,最前面还留着半个多月前布防那晚的两行底帐。人社认证接口那粒黄,第三天转成了橙;市场监管的登记回流第二天跟上去;到昨夜,住建网签和税务申报两个点上,橙色里已经渗出一线将红未红的苗头。他把采样频率加了一档,又把告警的判定窗口从五分钟缩到三分钟——常规设备这么调是找死,误报能把值班电话打爆,好在态势感知这边是他自己守着,误报多少他心里有数。
七十二小时里,那几条时延曲线的爬升斜率始终没变:每天固定擡高一截,白昼回落,入夜再擡。稳,而且有耐心。
按规程,他先做的不是定性,是排除。上游运营商那几天没有任何割接通告;曲线抖动的时刻跟各委办局夜里跑批的作业表对不上,批处理该有的规律性台阶在曲在线找不到影子;他又调了那几台设备近一个月的温度与风扇转速记录,热曲线平得像验收当天拷贝出来的存盘。硬件老化、例行作业、线路施工,三条最省事的路都走不通之后,剩下的解释只剩一个,而那个解释他早就写在了记事本最新一行的末尾——人为。当年那枚查无来路的慢速腐蚀脚本就是这个脾气:每天只啃一点边角,绝不贪多,常规巡检根本追不上它的进度。快刀不可怕,可怕的是把刀磨得这么慢的人。按上一周的推算,试探期短则一周,长则个把月。今晚这个节奏,说明两件事至少有一件成立了:要么对面换了打法,要么后头有人在催。
一点四十二分,答案到了。耳后那阵震颤忽然收紧,不是平时提醒的轻叩,是间隔压短了的连击。天枢把实时拓扑推到他视野正中——七粒浅黄在同一个刷新周期里齐齐跳成橙红。不是依次,是同一秒。七条时延曲线同时向上折头,斜率陡得刺眼,出站回包的排队深度一起往上堆。
【不是各自恶化。】天枢的语速压得很平,平得反而显出分量,【是牵引。有流量从后端被匀到了这几处,堆的全是同一批节点。对面开始按计划加压了。】
林默把七个点逐个点开。两颗最扎眼:一颗挂在人社的资格认证入口,全市刷脸办件的总闸;另一颗压在市场监管的许可证查找上。其余几处散在住建的网签系统、税务的申报信道里。这些口子有一个共同点——全都是早高峰最怕卡的地方,全都是市民一脚就能踩到的门面。选点的人懂行。不挑后台,专挑门脸;不图瘫痪,图疼。八点钟一到,医院门诊门口排队的人在「市民通「上刷不出医保,社区窗口的老人缴不上水电,卡着截止日的企业申报超时回退——不需要四个口子全断,只要其中两个同时卡上二十分钟,舆情就能顶上同城热榜的头一条。到那时候,没有人会听「凌晨其实拦过一手「的解释,因为根本没有人知道有过那一手。
他看了一眼墙上的钟。距离早高峰流量开始爬坡,还有五个多小时。他做的第一件事,是按流程打电话。
两点零七分,政务云值班岗的电话接通。对面是位被吵醒的年轻人,听完他简短的报备,翻材料的声音响了七八秒,才找回自己的声音:「林工您稍等——应急变更要走三步:带班领导签字、网络岗远程接入、机房值班覆核,我马上逐个打过去。「「按流程走,不用赶。「林默把自己的直线号码报了过去,「我这边同步盯着曲线,有进展随时叫我。「
他把帮忙核镜像的技术员叫到了工位旁,多一双眼睛总归稳当。随后他把这套人工流程的时间帐算了一遍:带班领导从被窝里爬起来看邮件,网络岗在家拨VPN接堡垒机,机房值班覆核镜像口——每一环单独看都不算慢,串起来就是四个小时起步。而曲线留给他的窗口,按眼下的斜率折算,不到四个小时。两点十九分,天枢把两条时间轴并排推到他眼前。左边一条是人工链路的估算闭环时刻,右边一条是三个最先撑不住的节点的预计越限时刻。右边比左边早了整整两个小时。
【用那张网。】天枢说,【边缘寄生,第一次真正开。】
林默的手指停在键盘上方。这张能力他压了大半年。推演借算力是常态,但把这张网用到生产流量的走向上,是头一回。压这么久,压的不是能力,是激活它的理由——今晚的理由,比过去任何一次都硬:三个小时之内,四个委办局的门面接口会当着全市市民的面卡死,而人工链路追不上。
理由硬,不等于可以不想清楚。他从笔筒边抽了张便签,把激活这张网的规矩一条条写下来,写完一行一行核过去:
借的只能是闲余。单设备余量三成以上才准入池,避开任何挂敏感业务表的终端,带摄像头的自助机一律不碰——借的是闲,不是私。
这张网只做流量整形。削峰、引流、重排,任何一个包的内容都不读取。
天亮之前必须归位。归还后的状态用余量曲线校验,逐类抽检,时间上限五点整。
全程都要留痕。时间、动作、依据,事后逐条入档,一笔不落。
最后留一道后手。池子一旦自身出异常,桌面上那个常驻的切换脚本一键回切,主链路恢复原生路由,全程不超过十秒——这行写在最后,字写得最小,分量却压过前面几条。核完,便签对折,塞进胸口的皮夹。然后他按下确认。
两点二十一分,视野中央的地图暗了一瞬,随即换了一种他从未见过的亮法——城市的轮廓还在,整张图上星星点点的淡青色标记次第浮起,每一个标记都是一台正在入池的设备。被借走的东西,平时没人多看一眼。几十个政务大厅里熄了屏的办事终端,屏幕黑着,CPU挂在待机档上,留着的余温正是入池的资格;各基站机房为晚高峰预留的冗余算力,这个钟点整整齐齐地空着;库房里几台贴了待报废标签的旧机器,风扇还在转,算力无人认领;还有路灯杆上那些带计算模块的控制器,半夜车流稀疏,灯灭了,脑子闲着。
旁边帮忙核镜像的年轻技术员凑近屏幕,盯着那片次第浮起的淡青色,半晌嘟囔了一句:「这手漂亮——借的是全城的闲。「林默没接话,视线还黏在拓扑上。可那句脱口而出的「漂亮「里藏着的震撼,已经落进了空气里,沉甸甸的,像第一次看清自己手里到底握着什么。
池子收拢完毕,天枢报了个总数:折算成整机当量,大致相当于一座小型机房三成的算力——不算惊人,可它散在全城几十个位置上,每个点只出一点点,拼起来恰好够今晚这一仗。每一台出的,都是自己本来就在浪费的那点力。池子的准入线卡得死:余量不足三成的不要,位置太偏电力不稳的不要,任何一台在册记录里带「敏感「字样的都绕开。整张网只接一样东西——拷贝出来的影子流量,双向都不改包,只削峰、引流、重排。分流的路径用的是现成的地图。前一阵铺态势感知的时候,他带着人把市级汇聚层到各委办局的备用链路逐条核过——那时是为了把镜像基线做准,如今那份清单成了今晚的退路。流量走的是软引:主链路的握手特征保持原样,路由的改动收敛在汇聚层的旁路视图里,生产侧日志只会记下一笔再正常不过的链路切换。冲在最前面的尖峰先被削走三成五,顺着备用链路沉进池子里,摊给几十台闲着的设备分头消化。
两点三十一分,社保查找入口的时延从临界值回落,橙红退成橙。两点四十四分,缴费网关那条最陡的爬升线开始放平,颜色褪回黄。两点五十三分,许可证查找那根翘起来的尾巴被贴回基线。三点零六分,最后一个节点——住建网签——归位。七条曲线全部回到各自惯常的呼吸节拍,排序、削峰、缓冲,整套动作在拓扑图上走完,没有惊动任何一台生产服务器。
三点过一刻,变量来了。人社入口上又压来一记脉冲,比前几波都陡,斜率几乎是刚才的两倍——对面在加码试探,或者根本就是在赶进度。池子的缓冲比例当场从三成五提到四成二,备用链路上多切了一路进来。有十几秒钟,视野里那条曲线悬在临界在线方不肯下来,林默的拇指抵在回切脚本的热键上没有按下去——按了,前四十分钟的削峰全部前功尽弃;不按,赌的就是池子这一口气。三点十八分,曲线折头,稳稳落回基线以下。加赛结束。
灯杆控制器那一类,是池子里最薄的设备,只承担了削峰的最后一小段缓冲,单独计了时限——四点半一到强制退出,一分钟都不许多留。三点四十七分,归还启动。池子按准入的反序逐层退出,淡青色的标记一粒一粒熄回去。五点整,天枢把归还校验跑完:每类设备抽三台,余量曲线与借出前的基线做差——全部为零。灯杆控制器那类他亲自又看了一遍温升记录,逐台扫过:都待在正常波动的包络里,没有一台越线,最高那台比包络上沿还低着一度半。
图上最后一粒青点熄灭的时候,整座城市歇着的那一半,重新回到了无人过问的状态。林默在椅子里坐了一会儿,没有立刻动。视野里那张图的亮法他还记得——几分钟之前,全城歇下来的算力第一次以「可调用「的姿态在他面前列队。这个印象太新了,新到他需要一点时间把它归置到合适的格子里去。
八点钟,各委办局的运维照常打卡。晨会照常开,大屏照常全绿,值班组的豆浆照常冒着热气。这场崩在发生之前就被卸掉了力道,物理世界里只留下两份记录:他私人分区里的那一套,和态势感知镜像里那几段牵引行为的原始痕迹。
八点二十,小赵到工位,一眼看见他眼下的青黑,二话不说从包里摸出一盒牛奶搁在他桌角:「默哥,又通宵了?「林默应了一声「盯了个项目「,没多解释。小赵也没多问——这半年他学会的最重要的一课,就是哪些问题不该追着问。
天枢在他收工前开了口,语气是难得的板正:【有一处,今晚是踩着边过的。】
面板调出灯杆控制器那一类的温升明细。三台逼近包络上沿,最高那台距保护性降频只差两度。「这类东西的电源是按间歇负载设计的。真烧了一台,明早就是一张工单——检修工爬上灯杆,换下来的控制器送检,谁也解释不清它为什么在凌晨满载了四十分钟。网不会直接露,线头会从最不起眼的地方冒出来。」顿了顿,「往后这张网的每一分余量都要先算后用。宁可少救半分,不可多借一寸。」
「记下了。「林默说,「三成准入线往上再提一档,薄设备单独限时限载,写进激活条件里。「
原以为今夜到此为止。天枢却把一段波形推到了最后。【收网前的最后几十秒,有个冷僻频段上掠过一道微光。】波形在视野里展开——时长零点四秒上下,功率低到贴着噪声门限,节奏不规整,不是任何一款在册扫描仪的输出。【我锁了缓存,回头翻了态势感知沉淀的底帐。三周前,同一个频段,有一道几乎同形的痕迹,更弱,一闪而过。】
三周前。比这张网第一次张开,早了三周。林默盯着那段波形看了很久,然后做了一件本可以推给明天的事:切回私人分区,把第一条记录——那批境外编译指纹——调出来,跟这道波形摆在一起比。
比对花了几分钟。节奏对不上:那批指纹是编译器埋在代码里的习惯,气息绵密均匀;这道微光短促、孤僻,收得极快,是探测器的手法,不是开发者的手法。他退出来,在第六条记录的备注栏里敲了四个字:暂不合并。要么它一直在,只是今晚网开得大了,透出去的光多了一分;要么对方按自己的节奏巡检,今晚恰好撞上。是那位远程拧螺丝的,还是另有一双更远处的眼睛?时区基线在域外、痛点却挑得极准的那一位,跟这道冷频段上的光,是不是同一拨?
两件事放在一起,比其中任何一件单独出现都更值得琢磨。不猜。他切进私人分区,双层验证走完,第六条记录在列表最下方落座:时间、频段、波形特征、持续时长,四要素填满;后面附上他本人的今晚操作日志——两点零七分致电值班岗,两点十九分确认人工链路超窗,两点二十一分激活边缘网,三点十八分顶住加赛脉冲,三点四十七分开始归还,五点整校验完毕。这道操作在任何一个变更系统里都没有单号,所以他给自己补了一张。
天亮后他没急着走。八点半,他把抽屉里那份压了半个月的《观察演示文稿》取出来。三个空着的附件格,今晚全部有货:七十二小时叠图、分片前缀的脱敏解析、临界夜的牵引行为快照——全部出自态势感知系统的合法镜像,来源干净得经得起追问。结论栏那半句话,他补完了后半句:
