第一章 空降
早上九点零四分,我站在工位前,手里那杯美式还烫着,隔着纸杯都能感觉到热度往掌心里钻。部门大群里跳出一条全员通知,只有短短两行字:经集团研究决定,任命周子昊为平台运营部总监,即日起生效。原技术负责人林哲的工作另行安排。
我盯着“另行安排”四个字看了很久,直到咖啡杯外壁凝出一层细密的水珠,顺着指缝滑下去,滴在键盘上。
周子昊。老板周建国的独子,上周刚落地上海浦东,此前在英国读了七年书,据说是学金融的。我最后一次见他,是五年前在集团年会上,他还在念大二,穿着件不太合身的西装,被周建国拉着挨桌敬酒,脸上带着点不耐烦的笑。
现在他要来管平台运营部了。一个管着四千万注册用户、日活三百多万的部门。
我还没来得及坐下,人事总监陈敏的消息就弹了出来:“林哲,十点整,三号会议室。”
我回了个“好”,把咖啡放在桌上,没有喝。桌角那张工牌还写着“技术负责人”,卡套边缘磨得发白。
十点整,我推开三号会议室的门。周子昊已经坐在主位上,穿一件浅蓝色牛津纺衬衫,没打领带,头发打理得齐整,看起来比五年前沉稳了些。周建国坐在他左手边,正低声说着什么。陈敏坐在右侧,面前摊着一份文件。
“林哲来了。”周建国抬头看我一眼,指了指对面的椅子,“坐。”
我拉开椅子坐下。周建国没绕弯子,开门见山:“子昊刚回来,对国内互联网环境不熟,需要一段时间上手。平台部这边,你带带他。”
“带”这个字用得很轻,但我知道它真正的分量。我没接话,只是看着周建国。他今年六十二了,两鬓白得厉害,可眼神还是那样,看人的时候带着一种自上而下的审视。
周子昊忽然开口:“林哥,我读过你们去年做的架构升级报告,写得很清楚。”他笑了一下,牙齿很白,“不过有些地方,我觉得可以再优化优化。英国那边现在都在做云原生改造,我们这套系统,是不是太老了点?”
会议室里安静了几秒。陈敏轻轻咳嗽一声,把文件往我这边推了推:“林哲,这是新的权限管理方案,你看一下。”
我低头扫了一眼。方案写得很清楚,平台运营部所有核心系统权限,从今天起统一归总监管理。我的名字出现在“技术顾问”一栏,后面跟着几个字:保留查询权限,不保留变更权限。
换句话说,我连生产环境登录的资格都没有了。
“周总,”我抬起头,看向周建国,“四千万用户的平台,核心系统权限收归一个人,风险太大。”
周建国端起茶杯,不紧不慢地吹了吹浮沫:“子昊又不是外人,他是我儿子,也是这个平台未来的负责人。早晚要接手的,现在不交,什么时候交?”
这话说得坦然,坦然到让我无话可说。我在这个部门待了九年,从最初十几人的小团队,做到现在一百多号人。平台从日均几千访问,做到峰值几百万并发。每一行核心代码,每一次凌晨三点的紧急修复,我都像熟悉自己掌纹一样熟悉。
可现在,一个刚落地不到一周的年轻人,要拿走我所有的权限。
“我明白了。”我站起身,“那我的工作,是不是就是带他熟悉系统?”
周建国点了点头:“对,三个月。三个月后,你如果愿意,集团另有安排。”
“如果不愿意呢?”
周建国放下茶杯,看着我的眼神里多了点东西:“林哲,你是我一手带出来的。有些事,别想太多。”
我走出会议室的时候,走廊里的中央空调嗡嗡地响。部门的人纷纷抬头,又飞快地低下头。他们应该都看到群里的通知了。
那天下午,我的企业邮箱里多了一封系统自动发送的邮件:您的生产环境访问权限已被管理员移除。紧接着,数据库主库的读写权限、核心服务的发布权限、监控平台的告警确认权限,一条接一条地消失。
我坐在工位上,像看着一个老朋友被一块一块地拆解掉。
第二章 架空
第二天,周子昊正式坐进了总监办公室。那是走廊尽头朝南的一间房,以前是周建国偶尔来部门视察时用的。现在桌上摆了两台显示器,一台苹果笔记本,还有一杯没喝完的拿铁。
他把我叫进去,说话倒是挺客气:“林哥,昨天会上我有些话没说完。其实我不太认同你之前定的一些东西,比如那个老旧的数据库中间件,早就该换了。还有你们自研的监控体系,太复杂了,不如直接用开源的。”
我站在办公桌前,看着眼前这个比我小将近十岁的年轻人。他的语气里没有恶意,也没有明显的不尊重,但那种笃定,比任何恶意都让我难受。
“周总监,”我说,“那个中间件虽然是五年前写的,但它支撑了平台百分之七十的核心交易链路。去年双十一,峰值每分钟四十二万笔订单,它没出过一次问题。自研监控虽然复杂,但能精确到每一笔交易的链路追踪。换成开源的,出了问题你根本定位不到。”
周子昊笑了一下,靠进椅背里:“林哥,你这些话说得也没错。但那是过去。现在云厂商什么都有,为什么要自己造轮子?维护成本多高,你算过吗?”
“我算过。”我看着他,“自研的维护成本,比云厂商的年度授权费低六成。”
周子昊愣了一下,显然没料到我会直接报数字。但他很快恢复过来,摆摆手:“行,这些以后再聊。对了,你那个数据库的root密码,我让运维改了一下。以后系统升级由我这边统一决策。”
“随你。”
我转身往外走,手碰到门把手的时候,听见他在背后说:“林哥,我没有针对你的意思。只是老东西,该淘汰就要淘汰。”
我拉开门,没回头。
接下来的两周,周子昊开始了一系列“优化”。他先叫停了原本规划好的核心服务模块重构,说成本太高,转而推进一个第三方云数据库迁移项目。然后解除了运维组组长赵海峰的管理权限,理由是“职责划分不清晰”。再然后,他把产研周会从固定时间改成了随时通知,有两次定在中午十二点半,大家一边吃饭一边听他说。
部门里的气氛一天比一天沉默。赵海峰四十多了,两个孩子,房贷压着,被拿下权限后什么也没说,只是每天照常来上班,盯着运维大盘发呆。他不能操作任何东西,只能看。有次我路过他工位,他正在看监控曲线,一只手放在鼠标上,指节发白,但始终没有点下去。
“算了。”他低声说,像是在对自己说话。
我们这些在互联网行业摸爬滚打多年的人,不是没有经历过权力更迭。可当它真的落到自己头上,那种无力感还是像潮水一样涌上来。你花了九年时间构建的东西,别人一句“优化”,就能把你挡在门外。
第三周,周子昊组织了一次全员会。投影上放着他的“百日革新计划”,一共十二条。其中第三条是:完成核心数据库云迁移,预计停服时间四小时。
我举手:“四小时?光数据校验就不止四小时。四千万用户,意味着什么?每一秒的停服,都会有海量请求失败。而且迁移后回滚方案做了吗?”
周子昊看了我一眼,语气有些不耐烦:“林哥,这是行业标准。我研究过很多案例,四小时足够。回滚方案也做了,云厂商有完整的备份机制。”
“备份机制和回滚方案是两码事。”我说,“一旦迁移过程中出现数据不一致,你怎么保证用户账户状态和订单状态不丢?你做过全量数据对账吗?”
会场上静得可怕。周子昊没回答我的问题,只是关掉了投影:“这些技术细节,会后单独讨论。我说过,我欢迎不同意见,但不能为了反对而反对。”
会后,我找到赵海峰,问他迁移方案到底是怎么定的。赵海峰沉默了半分钟,才说:“周总监让云厂商那边出的方案。我们运维组只负责执行。”
“执行?你也是技术人员,你看不出问题吗?”
“看出又怎么样?”赵海峰苦笑,“林哥,你在公司待了九年,我待了十一年。我们这种人,在老板眼里,始终是外人。他儿子就不同了,血浓于水。你做得多对,都比不上人家姓周。”
我站在那里,说不出话来。
第三章 休假
第四周刚开始,人事通知我去签一份文件。我一看,是《岗位调整确认书》。上面写着,我的岗位由技术负责人调整为技术顾问,汇报对象由平台运营部总监调整为集团技术委员会。薪资不变,但不再负责具体业务。
陈敏坐在对面,语气里带着点小心翼翼的试探:“林哲,老板特意交代,你这些年辛苦了。趁这个机会,不如休个假,陪陪家里人。你年假不是攒了四十多天吗?”
我盯着那份文件,很久没说话。我想起自己上一次休假,是三年前。那时候孩子才三岁,刚学会叫爸爸。我请了三天假,带她去了趟迪士尼。三天里接了几十个电话,最后一天下午,我一个人蹲在城堡后面处理线上故障,孩子被老婆抱在怀里,远远地看着我。
“是要把我彻底架空了。”我看向陈敏。
陈敏避开我的目光:“林哲,话不能这么说。老板也是为你好,技术顾问这个位置,清闲,待遇也不低。你先休息一段时间,等风头过去,说不定还能回来。”
我笑了一下,在文件上签了字。
签完字,我回到工位收拾东西。电脑要交回,工牌要换。抽屉里有一张女儿画的画,画上是三个人手拉手,最下面歪歪扭扭地写着:爸爸回家吃饭。我把那张画折好,放进包里。
同事们纷纷站起来,欲言又止。赵海峰走过来,用力拍了拍我的肩膀:“林哥,休息也好。你这个年假,早就该休了。”
我点了点头,又看了一眼这片我待了九年的地方。三十七岁,从青春熬到中年,最后换来一张休假通知。
回家的地铁上,我靠在车门边,看着窗外飞速后退的灯火。手机震了一下,是老婆发来的:“今天这么早下班?”
我回:“休假了。”
她没再发消息,直接打了电话过来。我接起来,她的声音里压着惊喜:“真的?休多久?”
“先休一个月。”
“那正好,婷婷下周有亲子运动会,你总算能去了。”她顿了顿,声音小了一点,“工作那边,没事吧?”
“没事。”我说,“就是想休息了。”
她没再追问。这个跟我结婚九年的女人,比谁都清楚我什么时候说的是真话,什么时候是在硬撑。
回到家,女儿已经睡了。我站在她床边,看着她那张圆乎乎的小脸,忽然觉得有些陌生。她长高了,眉眼也长开了,不再是我记忆中那个总哭着要抱的小婴儿。我错过了太多这样的变化。
第二天一早,我送她去了学校。她牵着我的手,蹦蹦跳跳,脸上满是骄傲。门口的老师笑着问我:“婷婷爸爸今天有空啦?”我点了点头,说不出话来。
日子忽然慢了下来。早晨七点起床,做早餐,送女儿,然后去菜市场买菜。回来洗衣服、拖地、浇阳台上那几盆半死不活的绿萝。中午自己随便煮点面,吃完坐在阳台上晒太阳。下午三点去接女儿,带她去公园,看她跟小朋友疯跑。晚上给老婆做饭,三个人围着桌子吃饭,有说有笑。
这样的日子过了一周,我发现自己原来一直活在一个高度紧绷的弦上。现在弦松了,整个人像散了架一样,哪里都累。
但我还是时不时会打开手机,看工作群里的消息。虽然权限没了,但群还在。我看到周子昊发了迁移排期通知,看到赵海峰发布割接演练计划,看到同事们深夜还在回复“收到”。
有几次,我下意识地要回复,打到一半又删掉。
我已经不是他们中的一员了。
第四章 警告
休假的第十三天,赵海峰给我打了个电话。他语气有些犹豫,像是在斟酌词句:“林哥,你方便说话吗?”
“方便,你说。”
“那个云数据库迁移的项目,昨天第一次全链路演练,失败了。”他压低声音,“数据校验一直过不了,有几个分片的同步延迟太高,云厂商说可能要把同步线程数再降下来。周总监挺生气的,说下周三必须完成割接。”
我站在阳台上,看着对面楼顶的太阳能热水器反射着刺眼的光:“老赵,这个项目你不能继续跟着走。出了问题,背锅的肯定是你。”
电话那头沉默了几秒。赵海峰的声音有些疲惫:“我知道。可周总监说,如果我执行不了,就换人来做。”
“让他换。”我说,“四千万用户,不是他拿来练手的。”
赵海峰叹了口气,没接话。又聊了几句家常,就挂了。
那天晚上,我打开电脑,登录了公司系统的只读账号。权限虽然没了,但查询通道还留着。我调出平台数据库的监控数据,一条条地看。同步延迟的问题确实很严重,某个核心分片的延迟峰值达到了三十七秒。这种情况如果直接割接,线上订单状态必然出现错乱。
我写了一封很长的邮件,详细分析了风险,给出了建议:取消原定割接计划,延长演练周期,增加数据校验环节。收件人写了周子昊,抄送周建国和集团技术委员会。
邮件发出去不到半小时,周子昊就回复了。只有一句话:“谢谢林哥的建议。但项目按原计划推进。你好好休假,不必操心。”
然后,我发现自己的只读权限也被收回了。
第二天上午,陈敏的电话追了过来:“林哲,你怎么回事?休假了还发那种邮件,老板很生气。”
“我只是尽技术顾问的职责。”
“林哲,你听我一句劝。”陈敏的声音压得很低,“别跟小老板对着干。老板就这么一个儿子,他不可能不向着自己孩子。你越是这样,你以后越难待下去。”
我看着电脑屏幕上已经无法登录的系统,笑了一声:“陈姐,你觉得我还能待下去吗?”
陈敏没说话。电话里只有沙沙的电流声。
那天傍晚,我去接女儿放学。她拉着我的手,仰着头问:“爸爸,你为什么不开心?”
我愣了一下:“没有啊,爸爸很开心。”
“你刚才都没笑。”她认真地说,“妈妈说你工作很辛苦,所以你要好好休息。可是你休息了,为什么还不开心?”
我蹲下来,把她被风吹乱的头发别到耳后:“因为爸爸在想一些工作上的事。不过没关系,那些事跟爸爸已经没关系了。”
她似懂非懂地点了点头,从口袋里掏出一颗草莓糖,塞到我手心:“给你吃。吃了就开心了。”
我剥开糖纸,放进嘴里。糖很甜,甜到有点发苦。
第五章 崩盘
休假的第二十七天,是个周日。我记得很清楚,因为那天是婷婷的生日。我们订了一个小蛋糕,粉色的,上面插了六根蜡烛。婷婷戴着一顶纸做的王冠,笑得眼睛弯成了月牙。老婆举着手机录像,我坐在旁边,负责切蛋糕。
就在这时候,我的手机忽然开始震动。一下,两下,三下,像一只被惊扰的蚂蚱。我低头看了一眼,是赵海峰。紧接着,陈敏的电话也打了进来。
我按了静音,把最后一块蛋糕放到婷婷盘子里,才起身走到阳台上接电话。
赵海峰的声音哑得几乎听不出是人声:“林哥,平台崩了。”
我闭上眼睛,心里那根一直悬着的弦,终于断了。
“怎么回事?”
“今天晚上八点开始割接,计划四小时。结果到了十一点,数据同步一直完不成。周总监让强制切换。切换过去之后,主库连接直接被打满,订单服务全线崩溃。现在已经是全面停服状态。所有用户都登不上。”
“所有?”
“所有。”赵海峰的声音在发抖,“我这边监控显示,活跃连接已经突破了上限,数据库锁表,死锁队列超过两百万。用户请求积压,网关超时,登录态全部失效。”
我深吸一口气,看了看手表:晚上九点四十七分。也就是说,平台已经停服一个多小时了。
“为什么不回滚?”
“周总监不让。他说再等等,云厂商那边在处理。但已经处理了一个小时,越处理越糟。”
“等着,我马上看。”
我回到房间,打开电脑。我的权限已经被收得干干净净,连只读入口都没了。我只能通过赵海峰给我截图的监控数据,一点点拼凑现场的情况。
越看越心惊。数据同步中断后,切流动作只完成了一半,一部分请求被导向新库,一部分还在旧库。新旧库数据不一致,导致用户登录后账户状态出现错乱。更要命的是,平台的核心用户中心服务有一个自保护机制,数据不一致率超过百分之三时,会自动触发全局限流。但这个机制被周子昊在“优化”时当成冗余逻辑给关了。
于是,积压越来越多,连接池被打爆,数据库锁死。
我拿起手机,给周子昊拨过去。电话响了很久才被接起来。他的声音有些急促,背景音里一片嘈杂,像是在某个会议室里。
“林哥,我这边在忙。”
“周总监,现在必须马上回滚。停服每多一分钟,就有上百万的请求在堆积。如果在流量高峰期不能恢复,明天早晨用户投诉会炸掉整个客服系统。”
“回滚方案我看了,操作太复杂,而且可能丢数据。”周子昊的声音里透着一丝烦躁,“云厂商那边说,再给他们半小时,肯定能恢复。”
“半小时?你知不知道,每一次用户登录失败,他们的信任就在流失。再等下去,很多用户可能直接卸载应用,永远不会回来。”
电话那头沉默了一瞬。然后我听到另一个声音,像是在旁边说了句什么。周子昊回了一句,然后对着话筒说:“林哥,公司的事我来安排。你在休假,就不要管了。”
电话被挂断了。
我站在书房里,窗外的夜色很静。远处的万家灯火,和往常没什么两样。可我知道,在那些我看不见的城市角落,成千上万的人正拿着手机,看着屏幕上那个转个不停的登录按钮,一遍遍地点击,然后失望地退出。
他们不会管你背后有多少勾心斗角,不会管谁是谁的儿子。他们只知道,这个软件打不开了。
我回到客厅,婷婷正捧着蛋糕上的草莓,吃得满脸奶油。她冲我招手:“爸爸快来,这个草莓好甜!”
我走过去,在她身边坐下,笑着摸了摸她的头。可我的余光,一直放在手机上。
凌晨两点,平台依然没有恢复。
第六章 回归
第二天早上,我送婷婷去了学校。一路上,手机不停地震动。我低头看了一眼,工作群里已经炸了。客服团队发了长长的投诉统计,从昨晚到现在,已经接到了超过十九万条投诉。微博上,“某平台崩了”的话题冲上了热搜,阅读量过亿。
赵海峰在群里说了一句话:“我们还在处理,大家稳住。”然后立刻被铺天盖地的追问淹没。
陈敏给我发了条消息,只有三个字:“怎么办。”
我没回。
中午十一点,平台开始缓慢恢复。但恢复后的系统极其不稳定,大约有三分之一的用户无法正常登录,一部分人登录后账户余额显示为零,还有人发现订单记录缺失。恐慌情绪像病毒一样蔓延开来,许多用户开始尝试提现、转出、卸载。
赵海峰给我打电话,声音沙哑得厉害:“林哥,数据不一致的问题还在扩大。我们已经做了三次全量对账,但每次都有新的不一致产生。周总监说让我们做全量回滚,但回滚脚本执行到一半就报错,因为新库已经有新增数据写入了。”
“老赵,你听我说。”我站在学校门口的梧桐树下,看着来来往往的家长和孩子,“把你们现在能做的全停下来。不要继续写入了,把所有入口切到静态页。先把数据库稳定下来,再做离线对账。”
“可是周总监……”
“跟他说,这是唯一正确的选择。如果不停写入,数据不一致会越来越大,到时候神仙都救不回来。”
赵海峰沉默了一下:“林哥,你能来一趟吗?我实在顶不住了。”
我叹了口气:“我现在没有操作权限,去了也做不了什么。”
“那我去找周总监要。”
“他不一定给。”
“我试试。”
挂了电话,我在原地站了一会儿。风吹过来,梧桐叶沙沙地响。我想起九年前,这个平台还是一个名不见经传的小应用。当时的团队只有九个人,挤在一间不大的办公室里。第一次版本上线那天,周建国亲自买了啤酒和烧烤,跟我们一起熬夜庆祝。他拍着我的肩膀说,林哲,这个平台以后就靠你了。
靠我了。可现在,四千万用户登不上,我连看一眼服务器的机会都没有。
下午两点,赵海峰又打来了。这次他的声音里带着点解脱:“林哥,周总监松口了,说请你回来临时支援。老板也批了,让你先以技术顾问身份,恢复生产。”
我顿了顿:“好。”
挂掉电话,我拦了一辆出租车,报出了公司的地址。车子驶入熟悉的园区,我透过车窗看着那栋楼,竟有些恍惚。
到了公司,很多人围了上来,脸上写满了疲惫和焦虑。赵海峰一把抓住我的胳膊:“林哥,你终于来了。现在情况还是不稳,你赶紧看看。”
我走到赵海峰的工位前坐下,他的电脑屏幕上全是红红绿绿的监控面板。我扫了几眼,心里有了底。
“先把订单服务全部停掉。现在开始,只允许查看,不允许下单。”
“好。”赵海峰立刻照做。
“再做一个离线对账脚本,把所有写入全部暂停,只拉数据。新旧库逐条比对,能救多少救多少。”
赵海峰点了点头,手指在键盘上飞快地敲击。
我打开自己的邮箱,发现只读权限已经恢复了一部分。我用这个权限进入后台,导出几份关键的监控数据,开始在纸上画恢复方案。
时间一分一秒地过去。下午四点,订单服务被安全降级。五点,对账脚本完成第一轮运行。七点,开始批量修复用户账户状态。八点,平台恢复核心页面访问。
赵海峰在旁边一直没走,眼睛布满了红血丝。他递给我一瓶水:“林哥,先喝点。”
我接过来灌了两口,眼睛还在盯着屏幕:“通知客服,可以开始安抚用户了。就说系统临时维护,已恢复。”
“好。”
我抬头看了一眼四周。部门里的人来来去去,没有人说话,但所有人都在忙碌。周子昊在总监办公室里,隔着玻璃墙,我看见他站在窗前,背对着这边。
那天晚上,我在公司待到凌晨四点半。平台终于稳定下来,核心链路基本恢复。四千万用户陆续可以重新登录。但数据修复还需要时间,一部分受损数据需要人工介入。
我靠在椅背上,眼睛又干又痛。赵海峰已经在旁边的椅子上睡着了,鼾声细微。窗外天边泛起鱼肚白,新的一天开始了。
我拿起手机,看到老婆发来的消息:“婷婷问你怎么没回家。”
我回:“处理紧急事情。跟她说爸爸忙完就回。”
她发来一个“注意身体”的表情,再没多说。
我关掉手机,正准备收拾东西离开,办公室的门开了。周建国站在那里,看着我的眼神有些复杂。他身后跟着陈敏。
“林哲,”周建国的声音低而沉,“你到我办公室来一趟。”
第七章 对质
我跟着周建国走进他的办公室。他指了指沙发,示意我坐。自己走到茶台前,倒了两杯水。一杯推到我面前,一杯握在手里。
“昨晚的事,我都知道了。”他坐下来,目光落在我身上,“你处理得不错。”
“平台还没完全恢复,部分数据还有问题。”我说,“大概需要一周左右,才能全部修复。”
周建国点点头,沉默了一会儿,忽然问:“你觉得子昊怎么样?”
我看着他,没有回答。这个问题像是一个陷阱。说真话,会得罪他;说假话,没意义。
周建国似乎看出了我的想法,苦笑了一下:“我知道你对他有意见。这个项目,他太急了。年轻人,没吃过亏,总以为自己在外面学的那套东西能包打天下。”
我依然沉默。
“林哲,我老了。”周建国的语气里难得地透出一丝疲惫,“平台迟早是要交给他的。我不可能一直在。只是我没想到,他第一仗就打成这样。”
“周总,”我开口了,“我理解你的心情。但平台不是试验田,四千万用户,不是拿来给任何人练手的。”
周建国看着我,忽然问了一句:“如果换作你在他那个位置,你会怎么做?”
“我会先学三个月,再动半年,最后改一年。”我说,“而不是一上来就掀桌子。”
周建国笑了一声,靠在沙发背上。办公室里安静下来,只听见墙上的挂钟滴答滴答地走。
过了很久,他缓缓开口:“这次事故,集团内部肯定要追责。子昊刚来就出了这么大的事,对他在集团的威信有很大影响。我想请你回来,继续负责平台的技术团队。”
“以什么身份?”
“CTO。集团技术副总裁。”周建国说,“薪资翻一倍,汇报直接给我。子昊负责运营管理,技术线归你。”
我看着他,忽然明白了。他是在用我,给他儿子搭台阶。技术线归我,意味着以后出了技术问题,责任在我。运营管理归他儿子,出成绩是运营做得好。
“周总,”我缓缓地说,“如果是以前,我可能就答应了。但现在,我想问你一句话。”
“你说。”
“我在这个平台九年,有没有做错过什么?”
周建国愣了一下:“没有。你的能力,集团上下都认。”
“那我为什么会被拿掉权限,被逼着休假?”
周建国沉默了。他看向窗外的车水马龙,目光里有些我看不懂的东西。
“林哲,有些事,不是对错的问题。子昊是我儿子,我必须给他铺路。我知道对不起你,但我没有别的选择。”
我点了点头,站起身:“我明白了。CTO的事,我考虑一下。”
我走出办公室,正好在走廊里碰见了周子昊。他站在电梯口,手里拿着一杯咖啡,看到我愣了一下。然后他走过来,脸上的表情很复杂,有疲惫,也有隐隐的敌意。
“林哥,”他叫住我,“今天的事,谢谢你。”
我转过身看着他。
“但我不会因为这次事故就放弃我的方向。”他说,“迁移思路是对的,只是执行出了问题。”
我笑了一下:“周总监,你知道昨晚的数据不一致,影响了多少用户的资产安全吗?如果今天早上不能及时修复,整个平台可能面临系统性风险。一个只读缺陷,就能让所有用户恐慌性提现,那就是挤兑。四千万用户,你赔得起吗?”
周子昊的脸色变了变,嘴唇动了一下,没说出话来。
我拍了拍他的肩膀:“你想证明自己,可以理解。但不该拿用户的信任当赌注。下次想清楚了再做。”
说完,我转身离开。
第八章 纠缠
我没有回家,而是去了公司天台。天已经全亮了,风很大。我站在栏杆边,看着下面的人来人往,像蚂蚁一样微小而忙碌。
我掏出手机,翻出昨晚的监控数据。平台恢复了,但数据不一致的修复进度只有百分之六十多。这意味着,接下来一段时间,还会有用户发现账户异常。每一条投诉,都是一根扎在平台信誉上的刺。
我拨通了赵海峰的电话:“老赵,醒了没?”
电话那头传来一声含糊的咳嗽:“没,刚醒。怎么了?”
“你回公司来,我需要你继续盯着修复。我不能一直操作,有些事得你来。”
赵海峰沉默了一下,说:“林哥,我昨天想了一夜。我想辞职。”
“为什么?”
“太累了。这种日子,我过够了。”他的声音沙哑而低沉,“他儿子拍拍屁股就没事了,背锅的是我们。这次你救回来了,下次呢?下一次他再折腾,我们还能救吗?”
我一时不知道该怎么回答。赵海峰的话,像一把刀,割开了我一直不愿意面对的那个真相。
在这个地方,做得再多、再好,只要不是姓周,就永远是个打工的。
“先别急着走。”我说,“等这次修复完。你要真决定走,我不拦你。”
赵海峰没有说话,过了好一会儿,才轻轻叹了口气:“行吧。”
挂了电话,我在天台上站了很久。手机又震了,是老婆打来的。
“你还在公司?”她的声音里带着一点心疼,“婷婷说想你了。”
“我中午回去。”我尽量让声音听起来轻松一些,“上午还有些收尾工作。”
她沉默了一瞬:“林哲,如果做得不开心,就换一份工作。我不在乎你赚多少钱。”
我愣了一下。这些年,我们很少聊这些。我知道她一直在背后支持我,但这份支持,也让我忘了她同样在承受压力。
“好。我处理完就回家。”
下了天台,我又回了运营部。部门里的人看到我,眼神里都有种复杂的东西。那种感激里带着同情,同情里又有点疏远。我坐回原来那个工位,发现工牌已经被收走了,但桌上多了一瓶酸奶。
是行政的小姑娘放的。她冲我点了点头,没说话。
我打开电脑,继续处理修复工作。到中午十二点,数据修复进度到了百分之八十七。剩下的都是些零散的不一致,需要人工逐条比对。我把赵海峰叫了过来,交代了接下来的步骤。
“我得先回家一趟。”我站起来,“婷婷还在等我吃饭。下午我再过来。”
赵海峰挥了挥手:“你去吧,这边我盯着。”
走出公司大门,阳光很刺眼。我招手拦车,手机又响了。是陈敏。
“林哲,集团董事会想请你明天下午参加一个闭门会。”她语气公事公办,“关于这次事故的复盘。”
“复什么盘?追责?”我拉开车门坐进去。
“都有。老板让我通知你,说你会作为技术顾问列席。”
“知道了。”
挂了电话,我靠在后座上。车子驶过熟悉的高架桥,眼前是灰蒙蒙的城市天际线。我闭上眼睛,脑子里却全是昨晚那些红色的告警曲线。
到了家,婷婷正趴在客厅茶几上画画。看到我回来,她欢呼着扑过来,抱住我的腿:“爸爸,你去哪儿了?我等你好久。”
我蹲下来亲了她一下:“爸爸去工作了,对不起。”
“没关系啦。”她笑得没心没肺,又跑回去拿起她的画,“你看,我画了一条大船,我们一起坐船去玩好不好?”
我看着那幅歪歪扭扭的画,画上的三个人笑得灿烂。那一刻,赵海峰的话忽然又响了起来。
我到底在坚持什么?
第九章 反扑
下午四点,我回到公司。赵海峰告诉我,数据修复已经完成百分之九十三,但有一批用户的状态修复出现了二次错误。原因是周子昊让运营团队在修复过程中上线了一个新的用户召回活动,活动代码直接写入了用户中心的一个公共字段。
“他在这个时候上线新活动?”我几乎是吼出来的。
赵海峰无奈地摊了摊手:“他说修复期间用户活跃度低,正好做活动拉回来。”
我只觉得太阳穴突突地跳。这个人是真的不知道“稳定压倒一切”这几个字怎么写。
“把活动链接直接停掉。”我立刻说,“用户中心的写入,除了修复脚本,一律不给权限。提工单也不行。”
“我已经提了变更,但需要总监审批。”赵海峰说。
“他在吗?”
赵海峰指了指总监办公室:“在,刚进去。”
我直接走过去敲门。门里传来一声“请进”。我推门进去,周子昊正坐在办公桌前,手里转着一支笔,面前摊着一份活动方案。
“周总监,修复期间不能上线任何活动。”我尽量让自己的语气平静一些,“你这样做,会打乱修复节奏。”
周子昊抬起头,眼神里闪过一丝不耐烦:“林哥,我知道你是为了平台好。但你不能所有事都按你的想法来。这个活动是运营团队连夜赶出来的,就是为了把用户拉回来。你只管修复数据,活动这边我来负责。”
“你的活动代码直接写入了用户中心,影响了修复脚本的字段映射。”我深吸一口气,“现在至少有一批用户的状态修复出现二次错误,就是因为这个。”
周子昊的表情终于变了。他皱了皱眉,拿起手机看了一眼:“我怎么不知道?”
“因为你的运营团队没有经过技术评估,直接发布了。”我盯着他,“周总监,这里是互联网公司,不是学校里做项目。你连发布审核机制都不过问,还谈什么拉回用户?”
周子昊的脸涨得通红。他猛地站起来:“林哲,说话注意点。我是这个部门的总监,我做什么不需要向你汇报。”
“你说得对。”我点点头,“但从今天起,用户中心的一切写入操作,必须经过我确认。如果你不同意,我马上走。剩下的修复,你自己来。”
周子昊愣住了。他看着我,脸上的表情变幻不定。他知道,如果我现在撒手不管,平台再次崩溃,他总监的位置也坐不稳。
僵持了半分钟,他慢慢坐了回去:“行。活动我让他们先停了。但林哥,你也不要太把自己当回事。”
我没再说话,转身走了出去。
第十章 底线
第二天下午,集团董事会的闭门会如期召开。会议室很大,坐了十几个人。周建国坐在主位,脸色不太好看。周子昊坐在他身边,低着头,全程没怎么说话。陈敏和法务、公关的人都在。
我走进会议室的时候,所有人都看向我。周建国示意我坐下,然后开始了会议。
复盘持续了两个小时。从割接方案到切换流程,从权限管理到应急机制,一个环节一个环节地过。我全程没有主动说话,只有当被问到技术细节时,才开口回答。
周子昊倒是说了一些。他承认自己经验不足,低估了迁移的复杂度。但很快,他话锋一转,说这次事故的根源,是平台长期依赖自研系统,架构陈旧,才导致迁移如此困难。
会议室里窃窃私语。有几个董事跟着点了点头。
我看了看周建国,他眉头微皱,没有说话。
公关负责人开口了:“目前舆情基本可控,但用户的信任损失短期难以恢复。接下来需要制定一个长期的用户安抚方案。”
“这是必须的。”周建国点头,“让运营团队加紧做。林哲,技术那边的修复,什么时候能全部完成?”
“预计还需要五天。但完全恢复用户信心,就不是技术能解决的了。”我顿了顿,“如果运营层面继续出一些不经过评估的动作,我不保证不会再出问题。”
周建国沉默了。会议室里安静得能听见空调出风口的嗡鸣。
过了好一会儿,周建国开口:“林哲,上次跟你说的CTO的事,你考虑得怎么样了?”
所有人都看向我。我感受到那些目光里的各种意味。有期待,有审视,也有看热闹的。
我环视一圈,缓缓开口:“我可以留下来,继续把平台修复好。但CTO这个位置,我有条件。”
周建国眯了眯眼:“你说。”
“第一,技术线独立决策,运营和其他部门不得干预。第二,所有系统变更,必须有技术评审,包括总监在内,没有例外。第三,周子昊不再参与任何技术项目,任何技术权限他都不能碰。这三点,如果你答应,我留下。如果不答应,我现在就离开。”
我话音落下,会议室里一片哗然。周子昊猛地抬头,脸色铁青。周建国看着我,眼神沉了下来。
“林哲,你这是在跟我谈条件。”他慢慢地说。
“是。”我迎上他的目光,“我在这个平台待了九年,我比任何人都希望它活着。但如果我不能保护它不被外力毁掉,我留着也没有意义。”
周建国盯了我很久。我从他的眼神里读出了很多东西:愤怒、犹豫、不甘,还有一丝我从未见过的疲惫。
最终,他缓缓开口:“好。我答应你。”
周子昊像是被什么击中了一样,身子僵了一下。但他没有当场发作,只是攥紧了手里的笔。
会议结束后,我走出会议室。走廊里的灯白得刺眼。陈敏追了出来,小声说:“林哲,你刚才太冒险了。老板从来没在董事会上被人这么逼过。”
“我知道。”我停下脚步,看向她,“但我说的每一句,都是我这些年想说的话。”
陈敏张了张嘴,最终叹了口气:“你赢了。但你要小心,周子昊不会就这么认的。”
“我从来没觉得自己赢了。”我笑了一下,“我只是不想再做一个没有底线的救火队员。”
回到家时,天已经黑了。婷婷正趴在沙发上睡着了,怀里还抱着那幅画。我轻手轻脚地把她抱回房间,盖好被子。老婆靠在门边看着我,眼里有一种柔软的东西。
“事情解决了?”她小声问。
“还没有。”我站起身,轻轻关上门,看着她,“但我做了一件憋了很久的事。”
她笑了:“看你这个样子,应该是把心里的话说出来了。”
我点点头,伸手把她拉进怀里。闻着她发间淡淡的洗发水香味,心里忽然平静下来。
第十一章 暗流
接下来的日子,我没有歇着。数据修复工作按计划推进,我每天在公司待到深夜,盯着每一批修复脚本的执行结果。赵海峰也没有辞职,他像是重新燃起了某种斗志,整个人比我刚回来时精神了很多。
周子昊被从技术线上彻底拿下后,不再出现在运营部的日常会里。他大多数时间待在自己的办公室,偶尔召集运营开会。我们见面不多,但每次遇见,他的眼神都冷冷的,带着一种藏不住的敌意。
陈敏私下告诉我,周子昊去找周建国闹过几次,说自己被架空,没面子。但周建国这次的态度很硬,只回了一句:“先把运营做好。技术的事,你别再碰。”
这话传到我耳朵里的时候,我正和赵海峰在机房里检查新恢复的用户数据。赵海峰听了,笑了一声:“老板这次倒是拎得清。”
“他拎得清,是因为平台差点死了。”我盯着屏幕上的数据流,“如果没这次事故,你现在还在喝茶看曲线,而我还在家里种花。”
赵海峰拍了拍我的肩膀:“林哥,不管怎样,平台活着,比什么都强。”
他说得对。平台活着,比什么都强。
只是我没想到,周子昊的报复来得这么快。
半个月后的一个周一早晨,我到公司时,发现办公室里气氛不对。赵海峰一见我就迎上来,压低声音说:“林哥,出事了。市监今天早上约谈我们,说接到用户投诉,平台在修复期间存在数据篡改、恶意扣款行为。”
我眉头一拧:“恶意扣款?什么时候的事?”
“已经有人把材料递上去了。投诉方说,在故障期间,账户余额无故被扣,还被删除了订单记录。”赵海峰看着我,“这些材料明显是内部流出去的,外面的人不可能拿到这么细的数据。”
我心里一沉。那些被投诉的数据,正是我们修复期间处理过的。有人在把这些事往外捅。
“查得到是谁放出去的吗?”我问。
赵海峰摇了摇头:“没有直接证据。但能接触到后台修复日志的,就那么几个人。”
我站在工位前,脑子里飞快地转。那些数据本身没有问题,是事故造成的临时不一致,后来都修复了。但如果被人断章取义,说我恶意篡改用户数据,这个罪名可不小。
很快,陈敏就来找我。她神色严肃,手里拿着一沓文件:“市监已经发函了,要求我们提供事故期间的用户数据变更记录。技术部能不能配合出个说明?”
“能。”我说,“所有操作都有审计日志。谁改了什么,改了多少,全部可查。”
陈敏松了口气:“那就好。但法务那边说,这件事要看对方手里还有什么。如果只是这些,还能应对。”
我点点头,回到工位上,开始准备审计材料。赵海峰在旁边帮忙,把修复期间的每一条操作记录都导了出来。
正忙得焦头烂额的时候,我收到了一条匿名信息。号码很陌生,只有一句话:“你的工号已经被踢出核心数据权限,还敢说自己清白?”
我盯着那条信息看了几秒,然后把它转发给了陈敏,让她交给信息安全部门处理。
下班前,我查出了一些端倪。所有外泄的截图,都来自一个周子昊到任后新加入的运营人员。这个人的账号在事故修复期间,利用一个低权限漏洞,导出了部分数据。而这些数据,恰好被截取成“恶意篡改”的模样。
我把证据整理好,走到周子昊办公室门口。门虚掩着,他在打电话,声音不大,但能听出语气急躁。
我敲了敲门。他抬头,挂断电话,看向我:“有事?”
“周总监,那个泄露数据的人,我想问问你,是谁招进来的?”
周子昊脸色微变:“怎么,你怀疑我故意往外面放消息?”
“我没有这么说。但人是你到任后招的,他的权限也是你给的。”我站在门口,“这件事我会让信息安全部门彻查。希望跟你没关系。”
周子昊冷笑一声,靠进椅背里:“林哲,你别以为这次事故让你回来,你就真能踩到我头上。平台是我家的,我想怎么管,就怎么管。你不过是个打工的。”
我笑了笑:“平台是你家的没错。但用户不是。市监的函还在法务那里,你是不是应该先想想怎么跟外面交代?”
周子昊脸色铁青,没有再说话。
我转身离开。走出两步,听见身后传来一声闷响,像是拳头砸在桌子上。
那一刻,我忽然觉得悲哀。为周子昊,也为自己。他曾是那个在年会上被父亲拉着敬酒的少年,眼里有光,心里有梦。而我曾在深夜的机房里,一遍遍地重构代码,幻想着这个平台有一天能真正改变什么。
如今,我们都被困在了同一条路上,谁也回不了头。
第十二章 定局
事情最终查清,那个泄露数据的运营人员被辞退。他没有承认是谁指使的,但根据内部沟通记录,他与周子昊之间有多次私聊。周建国没有深究,只是让信息安全部门补了几个权限漏洞。
市监约谈的事,我们准备了完整的审计材料。所有数据操作都有日志,修复过程可追溯。法务在沟通会上很顺利,没有再出现新的投诉。
我站在会议室外面,看着窗外的云慢慢飘过。赵海峰走到我身边,递过来一支烟。我接过来,没点。
“林哥,这次真险。”他说,“如果那些日志有一丁点缺失,你就洗不清了。”
“所以我说,做技术一定要留痕。”我把烟放进抽屉,没有抽,“你每一条操作,都可能成为将来保护自己的武器。”
赵海峰点了点头,沉默了一会儿:“我原来那套自研系统的维护记录,分毫不差地保存着。如果这次真的出了大事,我也能证明自己。”
“那就好。”
我们并排站着,看着窗外。过了很久,赵海峰说:“林哥,我想好了。我不辞职。”
我转头看他。
“以前我觉得,这地方没意思。但现在想想,我要是走了,这里就真的没人管技术了。周子昊可以再找一个人来,这个人可能连架构都看不懂。到那时候,四千万用户就得遭殃。”
“留下来,不是为了谁,是为了自己。”我拍了拍他的肩膀。
赵海峰笑了:“对,为了自己。”
那天晚上,我准时下班。回到家,婷婷冲过来抱住我的腿,仰起脸说:“爸爸,你今天怎么这么早?”
“因为爸爸把事情都忙完了。”我一把把她抱起来,举高。她笑得咯咯响,两条小腿乱蹬。
老婆从厨房探出头来,看着我们笑:“别闹了,饭好了。”
饭桌上,婷婷叽叽喳喳地说着学校里的事。她说班里有个小男生给她写了纸条,她觉得很苦恼。老婆笑着逗她:“那你喜不喜欢人家?”婷婷认真地说:“我只喜欢爸爸。”
我笑了起来,心里那些盘踞了很久的阴霾,忽然散了很多。
吃完饭后,我帮老婆洗碗。她站在旁边擦盘子,轻轻说:“你们公司的事,我都听说了。你这次真不打算离开了?”
“暂时不走了。”我说,“但心态变了。”
“怎么变了?”
我把最后一个碗放进消毒柜,看向她:“以前我总想着往上爬,想让公司变得更好。现在我只想守住自己的一亩三分地,不要让那些用户因为我们的无能而受苦。”
她笑了:“你终于想明白了。”
“是啊。”我点点头,“想明白了。”
第十三章 尾声
一个月后,平台数据完全恢复正常。用户投诉量下降到了事故前的水平,市监约谈后的整改措施也逐步落实。周建国在全员大会上宣布了我的正式任命:集团技术副总裁,全面负责平台技术体系。
周子昊没有参加那次会议。他被调到了新的业务部门,负责一个刚起步的海外项目。有人说这是变相发配,也有人说他自己主动提出。我没有去求证。
我和周子昊没有再说过话。偶尔在电梯里碰到,他会微微点头,然后别开目光。我不知道他是否后悔过,也不想去问。
赵海峰被提升为运维部负责人,终于又能名正言顺地操作系统了。他那天高兴得很,拉我去公司楼下的小馆子吃烧烤。几杯啤酒下肚,他红着脸说:“林哥,你记不记得,以前平台每次故障,都是咱俩在机房顶到天亮?”
“记得。”我喝了口酒,“有一次是用户中心缓存击穿,你的手机都被告警打没电了。”
“是啊。”他笑了几声,笑着笑着就沉默了,“真快,一晃这么多年了。”
我没说话。烧烤摊的油烟味混着夜风,有些呛人。远处的园区,灯火依然通明。
婷婷八岁生日那天,我请了假,带她和老婆去了游乐园。天气很好,蓝得透亮。婷婷坐在旋转木马上,冲我笑。老婆拿出手机拍照,说要把这一刻存下来。
我站在旁边,看着她们。手机忽然震了一下,是一条系统消息:您的工作台安全状况良好,最后登录时间三小时前。
我锁上屏幕,走到她们身边。
老婆抬起头,看着我说:“你笑什么?”
“没什么。”我接过她手里的相机,对准她和婷婷,“就是觉得,活着真好。”
快门声响起的那一刻,我忽然想,四千万用户,大概永远不会知道。他们能重新登上的那个页面背后,曾经发生过多少不足为外人道的故事。
但他们能登上来。这就够了。