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

会议室里,陈岚刚接过自己的裁员名单,投影就翻到了销售调薪页。周启宣布:研发裁撤六人,销售每人年固定薪酬增加三万八。

名单还摊在陈岚手里,周启已经指着它补了一句:“今晚会员促销照常上线,李明会把你们的活兜住。”

陈岚把接孩子的闹钟按掉,抬头问:“今天究竟交接,还是值班?”

周启皱眉:“特殊时期,大家都要顾全公司。陈岚,你先把数据库巡检交给小林。”

陈岚没有争辩,只把桌上的上线确认单推到李明面前。

李明翻到最后一栏,指尖停在“生产故障责任人”几个字上:“这里还是陈岚的名字。”

“她今晚不值班。”李明看向周启,“如果必须上线,责任人就得换成真正能处理故障的人。”

唐薇站在投影旁,语气仍然轻快:“只是一次会员促销,预估流量不会超过平时两倍。”

李明问:“预估是谁做的?”

唐薇顿了一下:“市场和销售一起估的。活动页都发出去了,不能现在撤。”

陈岚低头看着那张名单,忽然说:“扩容申请上周不是还在采购吗?”

她原以为只是采购延期,直到李明打开审批记录,看到申请状态早在三天前被标成了“暂缓”。

“你知道这件事?”李明问。

陈岚摇头:“我只知道机器没加,不知道申请被压下来了。”

周启敲了敲桌面:“先别把事情复杂化。李明,跑一遍预发布环境,没问题就按时上。”

李明没有答应。他让唐薇把活动规则、优惠叠加和预计回调次数全部发进测试群。

唐薇把手机递过来:“规则很简单,老会员续费,送一次抽奖机会。”

“简单不代表请求少。”李明接过手机,“抽奖、扣款、权益发放,每一步都可能重试。”

他带着唐薇和三名留下的同事去了隔壁机房,把预发布环境切成接近生产的容量。陈岚也跟了过去,却始终没有打开自己的电脑。

李明先让业务人员按实际路径连续下单,再把流量从一百并发逐步拉到五百。

起初页面响应很快,唐薇松了口气:“我就说不会有事。”

下一秒,队列监控上的橙色数字开始跳动,待处理任务从三百迅速涨到一千二。

负责权益发放的同事试着提高重试次数,数字反而涨得更快。李明立即让他停下,并关掉了自动重试。

“这只是预发布,生产会更稳。”唐薇仍不甘心,“我们可以把峰值放在晚上十点以后。”

李明指着曲线:“不是峰值的问题,是处理速度已经低于进入速度。再把活动放大,积压只会提前出现。”

周启从会议室打来电话:“测试结果怎么样?别为了几个小数点影响业务。”

李明开了免提:“队列持续增长,五百并发已经超过当前处理能力。今晚不能按原方案上线。”

周启沉默了两秒:“你们是不是把测试做得太极端了?”

李明把监控截图发到群里:“同样的请求结构,生产只会多出真实用户和支付回调。现在撤掉上线指令,是在避免把故障变成事故。”

唐薇看着曲线,第一次没有立刻替活动辩护。她问:“如果只开放一成用户呢?”

李明回答:“先补容量,再做灰度。没有明确的故障责任人,灰度也不能直接压给陈岚。”

周启赶到机房时,队列已经排到两千。李明把上线确认单递回去,指着责任栏:“今天必须撤单。”

周启盯着屏幕看了很久,终于拿出手机:“唐薇,通知市场,活动延期。李明,保留测试数据,明早给我一份容量说明。”

唐薇转身去打电话,脸色难看,却没有再说“只是一次活动”。

陈岚收起自己的水杯,确认桌面没有遗漏:“那我现在可以走了吗?”

周启下意识说:“至少把今晚的监控交代一下。”

陈岚看向李明。李明替她关掉了值班面板:“监控由我接,今晚不再把她写进责任人。”

陈岚点了点头,拿起包:“我会把已有文档放到共享目录。孩子还在等我。”

她走到门口时,周启忽然问:“你就不能再多留半小时?”

陈岚没有回头:“名单已经替我决定了今晚的身份。既然不是值班的人,就不该继续占着家人的时间。”

门合上后,机房里只剩风扇声和未清空的队列。李明看着那条被撤下的上线指令:今晚,他们靠真实数据挡下了一次冒险上线;

可下一次,风险还会落到哪个留下的人身上?

第二天早上,李明把容量说明、测试截图和昨晚的撤单记录放进同一个文件夹,发给周启和唐薇。

邮件最后写着:在责任人和容量未确认前,不建议恢复全量活动。

周启没有回复邮件,只在群里说:“组织调整从今天开始计算通知期,剩余研发先保证业务连续。”

留下的三名同事坐在小会议室里,没人再问“这次是不是误会”。

小林先开口:“我已经拿到两家公司的面试时间,下午想请半天假。”

许宁说自己准备回老家,至少那边有一家愿意让她做稳定的内部系统。赵哲则还没决定,他想等交接安排出来再看。

李明听完,第一反应是把三个人都留下。他甚至已经想好,怎么把监控、数据修复和发布流程重新分成三份。

话到嘴边,他又咽了回去。公司刚用一张名单替六个人做了决定,他不能再拿值班表替剩下的人做一次。

“你们按自己的计划走。”李明说,“我只要求交接期间把真实状态写清楚,不替公司承诺做不到的事。”

赵哲看着他:“那你呢?”

“我会把通知期做完。”李明顿了顿,“之后再决定。”

周启在这时推门进来,身后跟着一个戴灰色工牌的男人。

“这是赵工,外部服务商的负责人。”周启介绍,“从今天起协助我们做基础设施和备份。”

赵工没有寒暄,直接问:“生产数据库的恢复目标是什么?允许丢多少数据,最长中断多久?”

周启看向李明:“这些不是都有文档吗?”

李明把资料递过去:“文档里写了目标,但没有演练结果。要接手,先实际恢复一次。”

赵工翻了几页:“可以。谁提供环境,谁负责确认恢复后的业务状态?”

李明说:“我们提供演练数据和判断标准。你们负责操作,结果由双方签字。”

周启的脸色沉了下来:“都是自己人,没必要把话说得这么硬。”

赵工合上文件:“我只承诺能验证的事。未知系统的风险,不会写成我的保证。”

这句话让会议安静了几秒。李明把测试库权限交给赵工,却没有给生产管理入口。

恢复演练从备份索引开始。赵工的团队动作很快,先校验文件,再启动一套隔离数据库。

小林负责记录时间,许宁对照表结构,赵哲拿着业务流程逐项准备验证。

李明站在他们身后,只在关键节点提醒:“这里不是看表能不能打开,要看订单状态能不能继续走。”

两小时后,数据恢复完成。页面能登录,用户资料也能查到,周启在旁边露出一点满意的神色。

“这不就挺顺利?”他问,“我早说了,技术工作可以标准化。”

李明没有接话,点开一笔带优惠和抽奖权益的测试订单。恢复后的订单显示支付成功,权益却处在待发放状态。

赵哲重新执行回调,系统返回重复请求。后台没有报错,订单状态却从“已完成”退回了“处理中”。

许宁盯着日志:“重复回调会不会再次扣款?”

“现在不能证明不会。”李明说,“所以这次恢复只能算备份成功,不能算业务恢复完成。”

赵工把现象和时间戳记录下来:“重复回调的幂等规则不在基础设施脚本里,需要熟悉业务的人确认。”

周启不耐烦地问:“不能先写个说明,后面再补吗?”

李明看向他:“如果客户恢复后第一批订单状态错了,说明书不能替他们改回正确结果。”

唐薇推门进来,手里还拿着客户沟通稿:“客户那边已经问活动什么时候恢复,我可以先说交接演练顺利。”

李明说:“可以说备份已恢复,但不能说业务接手完成。重复回调的影响还没有答案。”

唐薇皱眉:“你们总要给一个能对外说的结论。”

“能对外说的结论,必须和能负责的范围一致。”赵工替李明回答。

唐薇看了他一眼,没有再争辩,只把稿子上的“完整接管”四个字划掉。

下午,小林去面试,许宁整理自己负责的报警规则,赵哲留下来和李明核对未完成事项。三个人没有因为共同离职,就变成同一种选择。

李明把每个人的离职计划写在白板上,又一项项擦掉“必须留下”的字样。

晚上,周启在客户群里发消息,称公司已安排专业团队接管,服务不会受到组织调整影响。

李明看见那句话,没有立即反驳。他只是把重复回调的演练记录、风险说明和待确认责任人一并归档,标注了真实日期。

赵哲问:“你不怕他拿这份记录说我们消极交接?”

李明说:“怕。但如果连记录都不留下,最后出问题时,所有人都会只记得我们说过没问题。”

隔天早会,周启要求他们把交接时间压缩到三周内。李明没有争执,只把剩余任务拆成恢复演练、权限移交和未决风险三栏。

他看着白板上的四个名字,第一次清楚意识到,文件齐全和有人能够负责,是两件完全不同的事。

第三十一天上午,李明把交接终会安排在最大会议室。桌上放着权限清单、恢复记录、未完成事项和最后一版责任确认单。

小林提前到了,电脑里存着新公司的入职通知;许宁带着一摞打印好的报警规则;赵哲则把供应商合同的复印件压在文件夹底下。

周启推门时笑得很轻松:“今天把手续走完,大家就算体面分开。公司已经把成本降下来了,销售那边的增长也在兑现。”

他翻了翻名单:“研发少了六个人,固定支出立刻下降。销售每人年固定薪酬增加三万八,至少能保证签单的人更有动力。”

李明没有评价这套算法,只打开投影:“先按清单完成管理入口移交,再逐项确认未决风险。”

公司指定的保管人是市场部的韩宁。他坐在电脑前,试了三次才找到管理后台的登录页。

周启看向李明:“你们不是说权限文档写得很清楚吗?”

“文档写的是入口、用途和风险。”李明说,“不会替第一次操作的人完成操作。”

韩宁输入账号后,页面弹出二次验证。他拿出手机,却发现绑定号码还是陈岚的旧工作号。

会议室里短暂安静。李明没有替他绕过验证,而是指向权限清单:“这里写着旧绑定未解除,昨天已经标成待处理。”

周启的脸色变了:“这种小事怎么没直接处理?”

“因为需要公司指定保管人完成身份确认。”许宁回答,“我们不能用个人设备替他接收验证码。”

韩宁低声说:“我不知道还绑定着谁的号码。”

李明让他走备用验证流程。十分钟后,管理入口终于打开,韩宁面对密密麻麻的菜单,问:“日常要先看哪一项?”

李明把监控面板推到他面前:“先看队列、失败回调和积压时间。出现异常时,再根据运行手册决定是否暂停入口。”

韩宁点开队列页面,找了半天没有找到暂停按钮。

赵哲从合同里抬头:“供应商只承诺主机、网络和备份巡检,没有数据库业务维护。”

周启夺过合同:“这里明明写着运维支持。”

赵哲把服务范围指给他看:“基础设施巡检,不包括订单状态、权益发放和重复回调判断。这个边界在签约时已经确认。”

周启沉默下来。那份合同是他亲自批准的,金额比原研发团队的月度成本低得多。

李明继续推进:“现在做最后一次恢复演练。韩宁负责按文档操作,我们只回答文档里明确写出的规则。”

演练开始后,韩宁顺利完成备份选择,却在恢复完成时问:“数据库打开了,接下来怎么确认订单?”

许宁把业务验证表递过去:“按样例订单逐项检查,不是看到页面能登录就结束。”

第一笔订单状态正常,第二笔带优惠的订单停在处理中。韩宁照着手册重放回调,状态又发生变化。

他抬头问:“如果线上遇到这个情况,谁决定暂停?”

没人立刻回答。周启看向李明,像过去每次救火那样等他接住问题。

李明把笔放在桌面中央:“交接之后,由公司指定保管人按责任表决定。研发已经不再拥有生产权限。”

周启的笑意终于消失:“你们就不能留一个人盯着?”

小林合上电脑:“我下周一入职,没法同时承担两边的生产责任。”

许宁说:“我可以把报警规则讲完,但不会接受没有权限、没有排班、也没有边界的值班。”

赵哲把复印件收回文件夹:“我已经签了另一家公司的合同,今天能把供应商侧的操作说明交齐。”

周启转向李明:“至少你留下一个月。你最了解这套系统,薪资可以重新谈。”

李明看着桌上的旧确认单,想起陈岚那晚按掉的接孩子闹钟。周启要的“一个月”,仍是把无人承担的系统压回某个人的生活里。

他没有回答,先把最后一项未决风险写进会议纪要。

“我不会留下一个月。”他说,“但我会把今天的记录、演练结果和权限移交签字完成。”

周启压低声音:“我们一起熬过创业期,你现在连这点情分都不讲?”

李明回答:“正因为一起熬过,我才知道不能把一个人的情分当成整套系统的保障。”

周启又问小林:“你呢?公司可以给你加薪。”

小林摇头:“我已经答应别人了。这里最初说的是岗位被撤,不是让我留下来等下一次决定。”

许宁没有看周启:“我需要稳定排班,不接受临时电话。这个条件今天不给,之后也不用再谈。”

赵哲则把签字笔递给韩宁:“我只确认供应商完成了合同内的基础设施移交。数据库业务责任,不在我的签字范围。”

会议持续到傍晚,韩宁终于独立完成了大部分操作,却仍然无法解释重复回调会怎样影响订单状态。

李明让他在交接单上签下“已知风险,待公司处理”,而不是把空白留给未来某个倒霉的值班人。

周启站在投影前,重新看了一遍排班表。周一到周日的夜班格子一格格空着,指定保管人、供应商和业务部门都没有填写名字。

他拿起笔,停在第一格上方,半天没有落下。

“总不能一个人都不留。”周启说。

李明收起自己的门禁卡:“可以留下人,但必须有人自愿、有人授权、有人真正能负责。今天没有,就不能假装已经安排好了。”

最后一份权限移交记录完成签字。李明带着三名同事离开会议室,周启仍站在空白值班表前,第一次发现被削掉的不是几项成本,而是一整段没人愿意替他承担的责任。

离开公司后,李明没有马上回家。他把门禁卡和最后一份交接回执放进抽屉:从这一刻起,他已经无权再进生产系统替公司兜底。手机却在这时连续震了几下。

发消息的人是大学同学许诚。他经营的三家社区健身房,正是那场会员活动的合作门店。

许诚只发来一句:“你们系统是不是又出问题了?前台已经排队半小时。”