2021年10月31日,晚上20:47,我还在工位上啃冷掉的饭团。我们做的是一个天猫店铺的代运营,平时日销大概1200单,那天大促预估18000单。仓库WMS突然报警:面单打印接口平均响应8.7秒,超时阈值3000ms,返回code=504。未打单积压6270笔,订单总积压18432笔。客服后台排队312人,钉钉群每分钟99+。我第一反应不是冷静,是脑子嗡一下,然后骂了句脏话。说实话,网上那些“遇到突发要冷静”都是废话,冷静不能把504变成200。
我先说个反常识的观点:工作突发状况,大多数不是“意外”,而是你平时省掉的步骤,在某个时间点集中来收账。我们当时没有做面单渠道降级,没有做Redis连接池压测,没有把营销推荐和订单主链路隔离。顺丰电子面单接口一限流,Tomcat的800个线程全卡在等HikariCP连接,连接池maximumPoolSize只有50,connectionTimeout=30000ms,30秒才吐一个异常。Redis的Jedis maxTotal=200,业务线程却有800,队列长度冲到4.8万。你看,这不是天灾,这是平时“先上线再说”的利息。
当时我把突发分成三类,这个分法救了我:信息突发、资源突发、信任突发。信息突发是没人知道到底发生了什么,资源突发是服务器、库存、人手、预算不够,信任突发是客户、老板、客服开始不信你能搞定。三类混在一起,人就会乱。我们那晚先做的是信息突发:拉了一个7人事故群,只拉能拍板的人,运营负责人、技术负责人、客服主管、仓管、我,还有两个backup。5分钟站会,只回答三个问题:影响多少订单和钱?现在能切什么?谁拍板?超过5分钟就换人。这个规则很粗暴,但比“大家先别急”有用。
处理步骤我按“止血-切换-补偿-复盘”走的,你可以直接抄,但参数得按自己系统改。
1)止血:先关非核心服务。我们把首页弹窗、猜你喜欢、加购推荐全下线,释放了大概200个线程。Nginx加限流:limit_req_zone $binary_remote_addr zone=order:10m rate=80r/s; 在订单接口加limit_req zone=order burst=100 nodelay。订单创建从峰值1200 QPS压到80 QPS,先保住不雪崩。
2)切换:面单渠道不能只签一家。我们平时只用顺丰,那晚临时启用中通和圆通电子面单,配置appKey、secret、月结账号,测试单打了3张,确认面单模板和打印机DPA热敏纸适配。备用渠道QPS只有35,但能跑。
3)扩容:服务从4台4C8G扩到12台,JVM参数保持-Xms4g -Xmx4g,避免堆抖动。GC时间从1.2秒降到180ms左右。Tomcat maxThreads从800调到1200,acceptCount从1000调到2000,但这不是根本,根本是下游连接池。HikariCP maximumPoolSize从50提到120,connectionTimeout从30000ms降到800ms,超时快速失败。
4)补偿:积压订单按order_id取模16个队列,分片消费。客服统一话术:“因大促订单激增,发货可能延迟24-48小时,给您5元无门槛券。”那一晚发了大概1.8万张券,成本约9万。退款率从日常3%冲到8.4%,但GMV没崩。
5)复盘:加Sentinel熔断,面单接口超时800ms,重试1次,必须幂等。每周做一次“开关演练”:降级开关、切换开关、补偿开关,每个开关必须在一个月内至少真演练一次。22:13打单恢复,23:40清完积压。我凌晨2点回家,手还在抖。
这里有个对比:小公司靠人肉,大公司靠流程,但都会死在“没人敢拍板”。我见过一个团队,技术说扩容,运营说再等等,老板说先看看,结果等了40分钟,客服被骂到关评论。也见过另一个团队,技术负责人直接说“我拍板,切备用渠道,损失我背”,12分钟恢复。突发状况里,最贵的不是服务器,是决策延迟。
所以我现在对“工作突发状况怎么处理”的答案很具体:别追求临场英雄,去准备冗余。真正有用的应急预案不是30页Word,而是3个开关、1个拍板人、15分钟决策窗。3个开关是降级开关、切换开关、补偿开关;1个拍板人是事故群里唯一能说“就这么干”的人;15分钟决策窗是到点必须选一个方案,哪怕方案不完美。你还可以加一个“事实板”:时间、现象、影响面、最近变更、已尝试动作。别写废话,写数字。比如“影响18432笔订单,未打单6270,客服排队312,最近变更:20:30上线了推荐服务”。数字会让扯皮少一半。
最后说个我自己的教训。那晚之后我把电脑桌面换成了三个文件夹:应急预案、接口文档、回滚脚本。听起来很土,但比“遇事冷静”强。工作突发状况不会因为你焦虑就消失,它只会因为你平时留了退路,变得没那么致命。你要是问我最该先做什么,我的答案是:先找到那个能拍板的人,再找到那个能切走的开关。其他的,边跑边补。