创作声明:本文为虚构创作,请勿与现实关联

公司集体去日本团建,唯独不带我,我不吵不闹,默默回家关机睡觉,第二天公司核心业务全线崩盘

打开网易新闻 查看精彩图片

陈汐今年二十八岁,是迅流科技的后端架构师。

她在这家公司干了四年。四年里,她一个人搭起了公司最核心的数据中台“星枢”。这个系统处理着公司百分之八十五以上的业务流量,每天经手的数据量级在百亿上下。

但没几个人知道这件事。

公司的对外宣传里,“星枢”是技术总监赵振华的“战略远见”,是产品总监刘美琳的“精心规划”,是整个技术团队“日夜奋战的结晶”。年会表彰、媒体采访、行业峰会,上台领奖的从来都是他们。陈汐的名字,只出现在某个技术白皮书附录的致谢名单里,排在倒数第三位。

薪水也一直没涨上去。比她晚来两年的前端,工资是她的1.5倍。去年年终奖,她拿了全部门最低的系数。组长找她谈话,语气为难:“小陈啊,知道你贡献大,但公司今年效益不好,你要体谅。”

她体谅了。

所以当行政部发出全员去日本京都团建的通知时,陈汐是认真高兴过的。邮件里写得很清楚:“为表彰全体员工过去一年的辛勤付出,公司将于12月20日至12月25日组织京都年度之旅,费用全包,全员参与。”

“全员参与”四个字,她盯着看了很久。

出发前一周,她去了趟商场。在优衣库试衣间,她对着镜子比划一条浅灰色的羊毛连衣裙。标签价一千二。她犹豫了五分钟,还是买了。又去无印良品买了本新的手账,深蓝色布面,摸起来有细密的纹理。行李箱是读书时用的,24寸,银灰色,轮子有点卡,拉杆也有些松动了。她没舍得换。

12月20号早上八点,她拖着箱子到了浦东机场T2航站楼。

航站楼里满是熙攘的人群。电子屏上航班信息不断滚动,广播里传来柔和的女声。同事们三三两两聚在一起,围着几个巨大的行李箱,笑声一阵高过一阵。刘美琳穿了件米白色的羊绒大衣,正在分发免税店买来的巧克力。“每人都有,别抢呀。”她的声音甜得发腻。

陈汐站在不远处,没过去。她低头看了眼手机,离集合时间还有十五分钟。

“哟,陈汐也来了?”

声音从侧后方传来。陈汐转过头,看见赵振华朝她走过来。他今天穿了件深蓝色的冲锋衣,拉链一直拉到下巴,肚子把衣服前襟撑得有些紧绷。他身后跟着三四个平时跟他走得近的技术经理,有说有笑。

“赵总。”陈汐打了声招呼。

赵振华没应,目光落在她的行李箱上,上上下下扫了一圈,眉毛挑了起来:“你这是……要出差?”

旁边一个姓孙的经理笑了:“陈工这是要去哪儿啊?”

陈汐说:“去京都。不是今天集合吗?”

空气安静了两秒。

赵振华脸上露出一种混合了惊讶和困惑的表情,随即变成一种夸张的恍然大悟。他拍了拍自己的额头,声音提高了些:“哎哟!你看我这记性!”

周围说笑的声音渐渐小了。不少同事转过头来看。

“小陈啊,”赵振华咂了下嘴,语气里带着点惋惜,又有点好笑,“这次京都团建,名单上周就定好了。行政没通知你吗?技术部得留人值班啊,咱们核心系统总得有人看着。我想着你是骨干,责任心强,就让你留下了。”他顿了顿,补充道:“回头让行政给你补发值班补贴,一天三百,行吧?”

陈汐站在原地,手指慢慢攥紧了行李箱的拉杆。塑料手柄硌着掌心,有点疼。

刘美琳不知什么时候也走了过来,站在赵振华身边,双手抱在胸前。她今天涂了正红色的口红,衬得皮肤很白。她看着陈汐,嘴角弯了弯,声音轻柔:“陈汐,赵总也是为你好。京都那边人多,酒店房间紧张,临时也加不进去了。再说了,‘星枢’系统离了你确实不放心。你能者多劳嘛。”

旁边有人低声笑了起来。

陈汐抬起头,目光从赵振华脸上移到刘美琳脸上,又扫过周围那些熟悉的面孔。那些脸上一闪而过的表情很复杂,有同情,有漠然,更多的是一种看热闹的兴味。她看见测试组的小王别过了脸,假装在翻背包。看见前年被她带过的实习生张薇低着头,耳朵有点红。

“我知道了。”陈汐说。

她的声音很平,没什么起伏。说完,她拉起行李箱,转身朝出口走去。轮子摩擦地面,发出“咕噜咕噜”的响声,在空旷的出发大厅里显得有些刺耳。

身后传来隐约的对话。

“真以为自己能去啊……”

“就是,也不想想自己是谁。”

“好了好了,都少说两句,准备过安检了。”

陈汐没回头。她一直走到航站楼外,叫了辆出租车。司机帮她把箱子放进后备箱,问她去哪儿。她报了自己租住的小区地址。

车开上高架。窗外是上海冬天的灰色天空,云层很厚,压得很低。她靠在椅背上,看着外面飞速倒退的广告牌和楼宇,脑子里空空的。

“星枢”系统是陈汐研究生毕业后的第一个作品。

不,更准确地说,是她在导师实验室里就开始构思的雏形,花了两年时间打磨成型,毕业后带到了迅流科技。那时公司刚拿到A轮融资,急需一个能支撑未来业务扩张的数据平台。陈汐的“星枢”方案在技术评审会上全票通过。

但她太年轻,又是个女生。赵振华当时是技术副总裁,他拍着陈汐的肩膀说:“小陈,你这个架构想法不错,但工程落地还需要经验。这样,我给你配个团队,你来做核心设计,具体实现让老张他们来跟。”

后来团队是配了,但“核心设计”慢慢变成了“参与讨论”,“具体实现”变成了“独立完成”。陈汐没争。她那时候觉得,能把系统做出来就行,谁署名不重要。

直到第一次庆功会。

赵振华在台上端着香槟,红光满面:“‘星枢’的成功,证明了我们技术中台的战略眼光!这是我们团队七百多个日夜奋战的结果!”

台下掌声雷动。陈汐坐在最后一排,手里拿着杯橙汁。刘美琳坐在她斜前方,侧过身跟旁边的人说:“赵总真是劳苦功高。”

陈汐低头喝了口橙汁,甜的,有点酸。

从那以后,她开始留后手。

“星枢”的底层认证模块,她重写了一遍。加了一个心跳机制:系统每六十小时,必须收到一次来自特定密钥对的签名验证。签名算法是她自研的,密钥对只有她自己有。如果超时未收到,系统不会立刻崩溃——那样太明显了。它会先进入“性能降级”模式,自动交易延迟增高,API响应变慢。如果再超过十二小时,也就是总计时七十二小时后,系统会触发最终保护:锁定所有核心数据表,清空缓存,进入只读状态。从外部看,就像遭遇了严重的硬件故障或网络攻击。

这个后门,她没写在任何设计文档里。代码提交时,她把它拆成十几个零散的函数,分散在不同模块,用了看起来人畜无害的函数名,比如health_check_interval()、cache_warmup_routine()。代码评审时没人仔细看。就算看了,不串联起来,也看不懂在干什么。

她给自己留了条路。或者说,留了把锁。

出租车停在小区门口。陈汐付了钱,把行李箱拎下来。轮子磕在路沿上,发出“哐”一声。门卫老张从窗户里探出头:“小陈回来啦?不是说出国玩吗?”

“临时有事,不去了。”陈汐说。

“哦哦,可惜了。”老张缩回头。

陈汐拉着箱子往里走。老小区,没有电梯,她住在六楼。箱子有点重,她拎一段,歇一段。楼梯间里堆着邻居的纸箱和旧家具,空气里有股淡淡的霉味。

终于到了门口。她从包里摸出钥匙,插进锁孔,转了两圈。门开了,一股熟悉的气息扑面而来。四十平米的一室户,朝北,冬天没什么阳光。她把箱子靠墙放好,脱下羽绒服,挂在门后。

手机震了一下。是公司大群。行政发了张在机场的合影,所有人站成三排,赵振华和刘美琳站在最中间,比着剪刀手。下面刷了一排“出发!”“京都见!”“开心!”。陈汐扫了一眼,没表情,把群消息设置成免打扰。

她走到卫生间,打开水龙头。热水器要烧一会儿,先出来的是冷水,冰得她一哆嗦。等水温上来了,她接了一捧水拍在脸上。抬起头,镜子里的人眼睛有点红,不知道是累了,还是别的。

洗完脸,她走回客厅,在沙发上坐下。沙发是房东留下的,布面有些起球。她坐了几分钟,然后起身,打开行李箱。

那条浅灰色的羊毛连衣裙叠得整整齐齐,放在最上面。她把它拿出来,挂进衣柜。下面是睡衣、毛巾、洗漱包、充电器、那本新买的手账。她一样一样拿出来,归置回原来的位置。箱子空了,她把它推到墙角立好。

做完这些,她看了眼时间,上午十点半。肚子有点饿。她打开外卖软件,划了半天,点了一份一直想吃的寿喜锅外卖,加了份和牛。价格不便宜,一百八。下单的时候她犹豫了一秒,然后点了确认支付。

等外卖的功夫,她打开电脑。连上VPN,登录公司内网。监控面板上,“星枢”系统各项指标都是绿色的,运行平稳。她点进日志系统,查看了最近一次健康检查的时间戳:12月18日凌晨2点15分。是她上次手动触发签名的时间。

现在是12月20日上午10点47分。

距离下一次签名验证的截止时间,还有不到三十四个小时。

她关掉内网页面,清理掉浏览记录,断开VPN。外卖到了,是穿着蓝色制服的小哥。她接过袋子,道了谢。寿喜锅用保温袋装着,还是烫的。她打开盖子,牛肉的香气混着淡淡的甜酱油味飘出来。她掰开一次性筷子,慢慢吃起来。

牛肉很嫩,裹着生鸡蛋液,滑进喉咙。锅里还有豆腐、香菇、金针菇、白菜。她一口一口吃着,吃到鼻尖微微冒汗。

手机屏幕亮了几次。是工作群,有人在@她,问某个接口的文档在哪里。她看了一眼,没回。又有私聊,是测试组的小王,问她一个数据校验的问题。她敲了三个字:“看wiki。”然后关掉了微信。

吃完饭,她把垃圾收拾好,洗了碗。下午一点,她有些困,就躺到床上,扯过被子盖住肩膀。被子是去年双十一买的,羽绒的,很轻,也很暖。她闭上眼,很快睡着了。

这一觉睡到下午四点。醒来时天已经有点暗了。她坐起来,发了会儿呆,然后下床,从书架上抽了本书。是毛姆的《月亮与六便士》,她看了好几遍。她翻开,从折角的地方接着读。

手机在茶几上震动。她没理。震动了七八次,停了。过了两分钟,又震起来。她放下书,走过去看了眼屏幕。

是赵振华。

她按了静音,把手机屏幕朝下扣在茶几上。震动声闷闷的,像隔着很厚的棉被。过了一会儿,停了。

窗外的天色彻底暗下来。远处楼房的灯光一盏盏亮起,像散落的星子。她开了盏台灯,暖黄色的光晕在书页上。读到主角斯特里克兰德说“我必须画画”,她停了一下,手指在那一行上摩挲过去。

手机又震。这次是刘美琳。

陈汐拿起手机,解锁,点进微信。刘美琳发来三条语音。她点开第一条,公放。

“陈汐啊,在忙吗?”刘美琳的声音带着惯有的笑意,背景音有些嘈杂,像是在车里,“今天机场的事,赵总也是为你考虑。你别往心里去。回头姐姐请你吃饭,给你赔罪,好不好?”

第二条:“对了,有个事想问你一下。‘星枢’的监控告警规则,你那里有没有最新的文档?我们这边想调一下阈值。”

第三条语气稍微急了些:“看到回我一下哈,有点急。”

陈汐打字回复:“告警规则在confluence,搜索‘星枢监控配置’。”

发送。然后她点进刘美琳的头像,右上角,加入黑名单。

做完这些,她把手机放回茶几,继续看书。

晚上十点,她洗了澡,换上睡衣。手机又亮了几次,是几个同事,问的都是些琐碎的技术问题。她一一回复,简短,不带情绪。然后打开飞行模式,充电,睡觉。

这一夜睡得很沉,无梦。

12月21日,京都时间下午三点,上海时间下午两点。

陈汐坐在书桌前,面前摊着那本深蓝色手账。她正在用钢笔抄一首诗,是辛波斯卡的《种种可能》。她喜欢这首诗的干净。“我偏爱电影。/我偏爱猫。/我偏爱华尔塔河沿岸的橡树。/我偏爱狄更斯胜过陀思妥耶夫斯基。”

钢笔尖划过纸张,发出沙沙的轻响。阳光从窗户斜射进来,落在桌角,能看见空气里浮动的微尘。

手机躺在桌边,飞行模式已经关了,但调了静音。屏幕偶尔亮起,是微信消息的预览。她没看。

距离“星枢”的下一次签名验证截止时间,还有不到一小时。

她抄完最后一句:“我偏爱,就爱情而言,可以天天庆祝的不特定纪念日。”然后合上手账,笔帽轻轻扣上。

她站起来,走到窗边。楼下有几个老人在晒太阳,坐在花坛边聊天。一只橘猫从车底钻出来,伸了个懒腰,又慢悠悠地踱步走了。

手机屏幕突然大亮,伴随着持续不断的震动。来电显示是一个陌生号码,归属地上海。

陈汐看着那屏幕亮了又灭,灭了又亮。震动声在安静的房间里显得很突兀。她数着,第一次,第二次,第三次……到第七次,她走过去,拿起手机,滑动接听。

“喂?”

电话那头传来急促的喘息声,背景音很吵,有模糊的广播声,有人在用日语说话。然后是赵振华的声音,嘶哑,变形,几乎听不出原本的音色。

“陈汐!你在哪儿?!”

陈汐没说话。

“说话!你是不是在家?!‘星枢’出事了!全瘫了!所有数据都访问不了,交易全卡住了!客服电话被打爆了!”赵振华的语速快得像子弹,“是不是你搞的鬼?!是不是你动了什么手脚?!”

陈汐把手机拿远了些,等那头的声音稍微小了点,才开口,声音很平静:“赵总,我在家。系统出问题,你应该找值班的运维。”

“运维个屁!”赵振华吼起来,声音劈了,“他们查了!不是硬件故障,不是网络攻击!是系统自己锁死的!底层触发了什么保护机制!陈汐,我告诉你,现在公司每分钟都在损失!客户在投诉,投资人在问!你马上给我恢复!马上!”

“我不知道什么保护机制。”陈汐说,“‘星枢’的设计文档和源代码都在公司git上,权限是全部门公开的。你可以让其他人查。”

“查个鸟!他们看得懂吗?!这系统从头到尾都是你一个人搞的!”赵振华的声音里带上了某种绝望的颤抖,“陈汐,算我求你了行不行?有什么条件你提!先恢复系统!”

陈汐沉默了几秒,说:“赵总,我在休假。而且,我也没有系统权限。上次权限梳理,我的生产环境权限已经被收回了。你忘了?”

电话那头突然没声了。只有粗重的、压抑的喘息。

过了大概十秒钟,赵振华的声音再次响起,低了很多,也哑了很多:“陈汐……陈工,之前的事,是我处理得不好。我向你道歉。但公司不能垮,这么多人指着公司吃饭。你……你帮帮忙。只要系统恢复,什么都好说。奖金,加薪,晋升,我都给你争取。”

陈汐说:“赵总,我在休假。没什么事的话,我先挂了。”

“等等!别挂!”赵振华急了,“陈汐!陈汐你听我说——”

陈汐按下了红色挂断键。

世界安静了。

她走到厨房,倒了杯水,慢慢喝完。然后回到书桌前,打开电脑,连上VPN,登录内网。监控面板上一片红色。CPU使用率跌到谷底,不是负载低,是大部分进程都被挂起了。数据库连接池全满,所有写入操作被阻塞。日志里刷满了“ERR: Authentication handshake failed”(错误:认证握手失败)和“WARN: Entering read-only mode”(警告:进入只读模式)。

她看了一会儿,然后打开一个黑色的终端窗口,敲入一行命令,按回车。

屏幕滚动过几行日志。

[INFO] Heartbeat received. Last valid signature: 54 hours ago.(信息:收到心跳信号。上次有效签名:54小时前。)

[WARN] Grace period expired. Initiating stage-1 degradation.(警告:宽限期已过。启动第一阶段性能降级。)

[ERROR] Stage-1 timeout. Triggering final protection protocol.(错误:第一阶段超时。触发最终保护协议。)

[INFO] All core tables locked. Cache flushed. System is now in read-only state. Manual recovery required.(信息:所有核心表已锁定。缓存已清空。系统现已进入只读状态。需要手动恢复。)

她关掉终端,断开VPN,合上电脑。

手机又开始震。这次是另一个陌生号码。她直接挂断,然后打开通讯录,把赵振华的手机号、微信,全都拉进黑名单。想了想,又把刘美琳的手机号也拉了。

做完这些,她打开音乐软件,选了个钢琴曲的歌单,音量调到适中。然后重新翻开那本手账,在新的一页写下日期:12月21日。

她又抄了首诗,这次是佩索阿的:“明月高悬夜空,眼下是春天。/我想起了你,内心是完整的。”

抄到一半,手机又亮。是公司技术部的大群。有人@了她三次。她点开,往上翻。

是运维组的负责人老李,发了一条长长的消息:“紧急情况!‘星枢’生产环境全面故障!疑似触发底层保护机制!目前所有核心业务已停滞!请相关同事立即上线支援!请陈汐看到消息后立即联系赵总或我!”

下面跟着一连串的问号和惊叹号。

“什么情况???”

“保护机制?什么保护机制?”

“陈汐呢?@陈汐”

“@陈汐 急急急!”

陈汐看了一会儿,打字回复:“我在休假。不清楚情况。”

发送。然后她退出微信,关了机。

京都,祇园附近的一家传统日式旅馆里,气氛降到了冰点。

赵振华坐在榻榻米上,面前摆着的手机屏幕还亮着,显示着“通话结束”。他握着手机的手指因为用力而指节发白,脸上一点血色都没有。房间里还站着七八个人,都是这次来团建的中高层,此刻全都大气不敢出。刘美琳站在窗边,脸色煞白,手指无意识地绞着和服腰带。

窗外是精心打理过的枯山水庭院,白石,青苔,竹筒敲在石钵上,发出清脆的“咚”的一声。这声音平时听着是禅意,现在听着,只让人心烦意乱。

“她……她挂了?”一个产品总监颤着声音问。

赵振华没说话,猛地抬手,把手机狠狠砸在榻榻米上。手机弹了一下,屏幕裂开蛛网般的细纹。

“她把我拉黑了!”赵振华从牙缝里挤出这句话,“她怎么敢?!”

“现在怎么办?”刘美琳转过身,声音也抖,“国内刚来的消息,几个大客户已经打爆法务电话了,说我们违约,要索赔。还有银行那边,我们的自动扣款交易全失败了,资金流可能要出问题……”

“我知道!用你说吗?!”赵振华吼了回去。

房间里一片死寂。只有竹筒规律的“咚”、“咚”声,像倒计时。

“赵总,”一直没说话的CTO周明开了口,他年纪大些,还算冷静,“现在的关键,是搞清楚系统到底出了什么问题。老李他们在国内查,说从日志看,像是系统内置了一个定时器,到时间没收到特定指令,就自己锁死了。这个机制……以前从来没听陈汐提过。”

“她怎么可能提?”赵振华冷笑,笑声干涩,“她这是留了一手!就等着今天!”

“那……那能恢复吗?”刘美琳问。

“老李说,日志提示需要‘手动恢复’,”周明推了推眼镜,“但恢复的方法,估计只有陈汐知道。底层代码……我们没人完全吃透。”

“找!给我找其他办法!”赵振华霍地站起来,“联系所有能联系的技术外包,安全公司,悬赏!谁能解决,开价!”

“可是赵总,”一个技术经理小声说,“系统现在在只读状态,数据是好的,但动不了。如果强行破解或者绕开,万一触发什么……数据清除机制……”

赵振华身体晃了一下,手扶住旁边的矮桌。

“先回国。”他哑着嗓子说,“马上改签,买最近的航班回去。”

刘美琳连忙拿出手机操作,几分钟后,她抬起头,脸色更难看了:“最近的直飞是明天早上九点。经济舱全价,单张一万二左右。而且……公司的差旅信用卡,好像被冻结了。我这张刷不过。”

“什么?!”几个人同时叫出来。

赵振华掏出自己的钱包,抽出几张信用卡,递给刘美琳:“刷我的。”

刘美琳试了,一张,两张,三张。全部提示“交易失败”。

“是银行的联控……”周明声音发干,“公司账户出这么大问题,银行那边可能收到预警,把关联的高管个人卡也风控了……”

赵振华愣愣地站在那里,然后慢慢蹲下去,双手抱住了头。

房间里只剩下压抑的呼吸声,和窗外那该死的、规律的竹筒敲击声。

同一时间,上海,迅流科技办公室。

灯火通明。虽然是周末,但所有能赶来的人都被叫回来了。办公区一片混乱。电话铃声、焦急的说话声、键盘敲击声混在一起。大屏幕上投影着“星枢”系统的监控面板,一片刺眼的红色。

运维负责人老李头发蓬乱,眼睛通红,对着电话吼:“我知道!我知道紧急!我在看!我他妈看不懂啊!这日志什么意思?‘需要密钥对RSA-2048签名’?密钥对在哪儿?谁有?!”

他摔了电话,看向旁边一个年轻工程师:“陈汐还没联系上?”

“电话关机。家里座机没人接。”年轻工程师摇头。

“继续打!打她朋友!打她家人!给我找!”

“李哥……这,这不太好吧……”

“不好?公司他妈要完蛋了!有什么不好?!打!”

老李吼完,喘着粗气,瘫在椅子上。他盯着屏幕上那些滚动的错误日志,第一次感觉到一种冰冷的恐惧。这个系统,他维护了三年,自以为摸透了。可直到今天,他才发现,那些最核心、最要命的东西,他连门都没摸到。

那些曾经觉得陈汐代码写得“太绕”、“太个人风格”、“不好维护”的抱怨,此刻像耳光一样扇在他脸上。那不是不好维护,那是她根本就没打算让别人维护。

凌晨一点,陈汐醒了。

她有点渴,起床去厨房喝水。经过客厅时,瞥见手机在茶几上闪烁。她走过去,拿起来。未接来电:47个。微信未读消息:99+。

她点开微信。最上面是张薇,那个前年她带过的实习生,连着发了十几条。

“汐姐,你没事吧?”

“公司出大事了,系统全挂了。”