第四章 · 送别¶
周五,八点四十,邮箱里有一封抄送他的通告:规则引擎调度服务升级,本周日凌晨执行,发件人他不认识。
他翻到附件第三页那张架构图,五秒钟就看明白一个问题:这个调度服务和结算系统的定时任务用的是同一个资源池。
周日凌晨,结算有月中的对账批任务,二十三点五十启动,跑到凌晨一点半。
两边一起跑,资源池只有二十个线程。
通告里没有提这件事。窗口是谁定的,通告里也没写。抄送列表里有十四个人,结算这边只有他一个。
老梁的搪瓷杯还在桌上。键盘下面压着一张手写的纸。
今晚七点,单位对面那家湘菜馆,包间在二楼,叫“竹溪”。结算组都来,我请。
是老梁的字。笔画很重,第二行写歪了,最后三个字挤在纸边上。
陈稳把纸折好,放回键盘下面。
他给那个发件人回了一封邮件,四行:写了资源池的名字,写了批任务的启动时间和平均耗时,写了两边并行时线程数不够,建议升级窗口挪到凌晨两点后。抄送纪衡。
发送。
八点五十二分。
IDEA 里昨天那个 TODO 还在——跨天时间窗,二十二点到凌晨两点。顾源说要在校验器里处理。校验器已经提交了,拦截器也跑通了,那个 TODO 只是注释,不是代码。
他把光标放在 TODO 那行,敲了几行,写了一个新的时间解析器,支持跨天段。然后他发消息给 MR 的那个 reviewer:
时间窗配置类增加了跨天支持。单测新增 3 例。要不要合进来,还是单独提一个 MR。
那个人回得很快:单独提,合进来了就不好回了。
“为什么。”陈稳打了两个字,删了。他知道为什么:MR 越大,reviewer 越不敢批。
他回了一个“好”,新建分支,把跨天支持移过去,提交。空的 MR,先放着。
十点十五分。发件人还没回邮件。纪衡也没有。
监控大盘第三行第二格,99.98%,绿线,平的。刷新,还是。
下午三点,群里有消息。
是结算组做渠道对账的那个人发的:“老梁说七点,对面湘菜馆,包间竹溪,收到扣 1。”
陈稳打了“1”,发了。
蒋辉回了一个:“收到,今晚最后一个到的人买单。”
后面跟了三个表情,一个笑,一个抱拳,一个啤酒。
那封资源池的邮件还是没有回复。他把邮件线程重新打开,确认了一下抄送列表——纪衡在里面。发送时间八点五十二分,到现在六个小时。
十一点三十四分,易文发过一条消息,他刚才在编译,没看见:
你们组那个通告,规则引擎升级,是营销那边推的。
他回:“窗口是谁定的。”
不知道。我这边只看到审批流最后一个签字是他们组长。
你要是提了意见没人回,就别再提第二次。第二次就变成你事多。
他把这条读了两遍,没有回复。
何晚下午两点发过一条:“周六有什么安排?”
他回:“今晚部门聚餐,老梁请客。”
隔了很久没有回复。他把手机翻过来,屏幕朝下。
六点四十,锁屏。老梁那边搪瓷杯还在,手写的纸还在,键盘的位置一天没变过。
电梯里没有人。
大楼门口到湘菜馆隔一条斑马线。等红灯的时候,对面门口已经站了两个人,一个陈稳不认识,另一个是蒋辉。蒋辉朝他招了招手。
“你今天走挺早。”蒋辉说。
“嗯。”
“老梁还没到,先进去。”
二楼包间,一张大圆桌,能坐十二个人。桌上摆了一盘花生米和一盘凉拌黄瓜。空调开得很低,冷气从头顶的出风口往下吹,陈稳的肩膀凉了一下。
他挑了靠墙的位置,蒋辉在他右手边。对面那半圈还空着。
陆陆续续有人来。结算组六个人,加上做渠道对账的那个,做资金报表的那个,还有一个做营销结算的——陈稳不认识他,蒋辉认识,聊了两句,陈稳才知道这人是营销结算那边的,刚调过来,跟他们组有对接。
七点零三分,老梁推门进来,手里拎着一个塑料袋,里面装着两瓶白酒。短袖格子衬衫,领口有一块洗不掉的印子,头发比平时乱一点,像是刚睡醒。
“抱歉,来晚了。”他把酒放在桌上,“楼下超市买了点东西。”
有人起哄:“老梁你今天请客还迟到,自罚三杯。”
老梁笑了一下。主位正对着门,他把椅子拉出来,扫了一圈桌子,嘴唇动了动,是在数人头。
“都来了。”他说,“那就点菜。”
菜单传了一圈。陈稳翻了两页,点了一个蒜蓉空心菜,把菜单递出去。
老梁说:“加个剁椒鱼头,再来个辣椒炒肉。他们家的招牌。”
菜上得很快。剁椒鱼头端上来,热气散开,辣椒味冲了一下陈稳的鼻子。他吸了一下,没打喷嚏。
老梁给自己倒了一杯酒,端起来。
“来,先喝一杯。”
杯子碰了一圈。陈稳杯子里是茶。老梁那一眼扫过他的杯子,什么都没提。
“第一杯,感谢大家这十一年。”老梁说,“不对,是感谢大家在我的十一年里。”
他仰头喝了一半。
有人笑:“老梁你今天说话怎么这么文绉绉的。”
“我本来就文绉绉的,你们不知道而已。”
大家又笑。陈稳没笑。茶的苦味从舌尖蔓延到舌根。
老梁夹了一筷子鱼头,吃了一口,说:“还行,没变味。”
辣椒炒肉的辣味在后脑勺顶了一下。陈稳喝了一口水。
隔壁在划拳,声音闷闷地传过来。桌上的话题从最近的系统升级,到技术支持中心到底在哪栋楼,到老梁新带的团队有几个人。老梁边吃边答,说技术支持中心在 A 座三楼,他现在带六个人,比结算组还多一个,但大部分是新人,要重新带。
“那不就是重新带一拨人。”做渠道对账的那个人说。
“差不多。”老梁说,“但那边的东西不复杂,接入层的东西,逻辑比结算简单。”
蒋辉说:“那也不一定,接入层的坑多,数据量大了之后,什么幺蛾子都有。”
“那倒是。”老梁说。
陈稳低头吃菜。老梁说话的时候左手一直在摸杯沿,拇指沿着杯口转了一圈,又转了一圈。这个动作陈稳以前没见过。老梁十一年,喝水用搪瓷杯,从来是两只手端着,一口喝完就放下。
饭吃到一半,有人提了一个话题:老梁在恒澜十一年,最难忘的是什么。
老梁想了想,说:“最难忘?没想过。应该是某一次上线吧,三四年前,凌晨三点上线,上了四个小时,上完天都亮了。我下楼买包子,包子铺刚开门,第一笼包子还没蒸好,我等了十五分钟。那天的包子特别好吃。”
桌上安静了两秒,蒋辉说:“老梁,你这说了跟没说一样。”
“事实就是这样。”老梁说,“难忘的事情就是一些很小的事情,大的事情你记不住。”
陈稳把这句话在心里过了一遍。三四年前那次凌晨上线,日志他见过——那是结算核心链路上线的第一版,改动记录里最后一个提交人是梁栋,时间凌晨六点五十一分。他没有说出来。
老梁的第一杯喝完了,倒了第二杯。
蒋辉端着杯子过去,说:“老梁,我敬你一杯。”
两个人碰了一下杯。
蒋辉喝完,说:“老梁,我跟你说的那个事,你考虑一下。”
“什么事。”
“那个。”
蒋辉笑了一下,没说下去。老梁也没追问,把酒喝完。
陈稳不知道他们在说什么。蒋辉的表情跟刚才一样,笑着。
剁椒鱼头吃了一半,鱼骨头露出来,白森森的。辣椒油在盘底凝住了,因为空调太冷。
营销结算那个新人问了一句:“周日那个升级,你们结算那边要值守吗。”
“什么升级。”蒋辉说。
“规则引擎调度那个。通告上周就发了。”
“哦。那个跟我们没关系。”
陈稳把杯子往自己面前挪了两厘米。那个通告是今天早上八点四十七分发的,不是上周。他上午回的那封邮件里写了资源池冲突,抄送里有纪衡,六个小时没有人回。这两件事桌上没有人知道。他没有纠正“上周”,也没有提那封邮件。
老梁夹了一筷子空心菜,问:“同一个资源池?”
陈稳说:“同一个。”
“批任务几点。”
“二十三点五十。跑到一点半。”
老梁把筷子放下,嚼完了那口,说:“那你别管了。”
“为什么。”
“因为管了也是你的,出了事也是你的。”老梁重新拿起筷子,“你邮件发了?”
“发了。”
“那就够了。”
蒋辉在旁边笑了一下:“老梁你这话说的,跟你以前不一样啊。”
“我以前也这么说。”老梁说,“你们没听。”
八点四十,有人开始看手机。做渠道对账的那个人说家里小孩发烧,要先走。老梁说:“赶紧走,别耽误。”那个人说了几句客套话,走了。
又过了二十分钟,做资金报表的那个也走了,说周末要回老家。
剩下六个人。老梁,陈稳,蒋辉,营销结算那个新人,还有两个陈稳叫不出名字的——一个是结算组做测试的,一个是别的组过来串门的,陈稳不知道他为什么在。
墙上的钟九点零五分。
陈稳杯里的茶添了三次,已经淡了,颜色跟白水差不多。
老梁第二杯喝完,脸有一点红,说话还是很清楚。他靠在椅背上,点了一根烟,把烟灰缸拉到自己面前。烟雾在空调的风里被拉成一条线,然后散开。
陈稳不抽烟,但老梁抽烟的时候他从来不躲。
老梁抽了几口,把烟按灭。他提起酒瓶,晃了一下,空的。瓶底碰在桌面上,一声闷响。
“差不多了。”他说。
没有人反对。
前台报了一个数字,陈稳没听清,只听到老梁说“行”,然后是一声扫码提示音。
包间门口的走廊上,老梁从前台那边过来。
“陈稳。”
“你等一下。”
走廊里只有他们两个人,头顶的灯管有一根在闪,频率很慢。
“支援中心那边,我这边有个位置,你做不做。”
“什么位置。”
“技术岗。主要做接入层的问题排查和工具开发。不复杂,但稳定。”老梁停了停,“比结算组轻松。”
走廊尽头的窗户开着一条缝,路灯的光从缝隙里挤进来,在地上拉出一道窄窄的亮线。
“你什么时候走。”陈稳问。
“下周一正式过去。”老梁说,“但位置一直在,你什么时候想过来,跟我说一声就行。”
陈稳把折起来的那张纸从口袋里摸了一下,纸角已经被汗浸软了。他昨天在停车场听老梁说“别学我”。今天老梁在问他要不要过去,做一样的事。这两句是同一个人说的,隔了不到三十个小时。
“不急。”老梁说,“你想想。”
他拍了一下陈稳的肩膀,往楼梯口去了。
那根灯管还在闪。老梁下楼的脚步声一声一声变小,然后是一声开门,然后没有了。
楼下拐角,蒋辉站在门口刷手机。
“走了?”
“嗯。”
“你怎么回去。”
“地铁。”
“我也是。那一起。”
他们没有一起走。蒋辉接了一个电话,走在前面,声音压得很低。陈稳跟在后面,听到两个词,一个是“评估”,一个是“他那边”。到地铁站口,蒋辉挂了电话。
“那我先走了,十号线。”
“好。”
蒋辉背着双肩包,节奏很快,没有回头。
何晚七点发过一条:“好的,别喝太多。”
他回:“结束了。”
没有回复。他把手机放回口袋,进站。
站台上等车的人不多。轨道另一侧的广告牌是一个房地产广告,上面写着“首付三十万,安家上海”。效果图里窗台上放了花,阳台上有一个人在看书。三十万,他账上有十九万四,房贷月供九千八。
列车进站,刹车声刺了一下他的耳膜。车厢里一个小孩在哭,三四岁,脸上全是眼泪,母亲用纸巾给他擦,说“到了到了,快到了”。小孩扭了一下,哭得更大。
车窗玻璃上反射出车厢里的样子,那个小孩,那个女人,他自己。他的脸在玻璃上有些模糊,因为隧道里的灯光一直在变。
老梁那个位置:接入层问题排查和工具开发,不复杂,但稳定。比结算组轻松。
老梁昨天在停车场说的是“别学我”。
老梁的十一年,七个系统,最高绩效 B+ 一次。
老梁今天摸杯沿那个动作,一圈,又一圈。
播报声:下一站,到站请准备下车。
四站,换乘,再两站。
出站的时候手机震了一下。何晚:“到家了?”
他打了一个“刚到”,删了,重新打了一个“快了”,发送。
小区门口保安在岗亭里刷手机,屏幕的光在他脸上亮一下暗一下,没有抬头。
屋里灯是黑的。他没开灯。窗外的路灯透过窗帘的缝隙,在天花板上投出一道细长的光——那道光正好压在那条裂缝上,物业说不影响结构。
冰箱里的水是冰的,瓶身上凝了一层水珠。他喝了一口,凉度从喉咙一直往下走。水放在茶几上,没再喝。
备忘录里那条待办还在:“时间窗跨天校验。v2。”他没有划掉,也没有改。
通讯录里老梁的号码,点进去,退出来。
手机放在茶几上,屏幕朝上。路灯照在屏幕上,反射出一小块光,像一枚硬币。
那枚硬币一样的光在茶几上停了很久。
书房。跨天时间窗那个 MR 还是空的状态。
他改了校验器的逻辑,加了对跨天段的支持,改了配置类的注释,跑单测,全绿。二十六例。
提交 MR。commit message 一行:
feat: 窗口配置支持跨天时间窗(22:00-02:00)
推送。
键盘的声音在房间里响了两秒,然后安静下来。
电脑右下角二十三点四十七分。那封资源池冲突的邮件,仍然没有任何人回复。周日凌晨还有三十个小时。
对面那栋楼大部分窗户都是黑的。只有一扇窗还亮着灯,黄色的,窗帘半拉着,看不清里面是什么。那扇窗他看了十一个月。
他把窗帘的缝隙拉大了一点。
对面那扇窗的灯,灭了。
窗玻璃上只剩下他自己的脸,和身后书房里没关的屏幕。