数据库的容灾方案写到凌晨三点,阿里云的告警短信突然炸了。不是代码bug,是机房网络波动,刚重构完的MySQL主从同步断了四分钟。四分钟,丢了十七笔订单,客户电话打进来的时候我手都在抖。
赔钱,道歉,写事故报告。对着屏幕敲“根本原因分析”那几个字的时候,胃里一阵抽搐。这半年我像疯了一样优化SQL查询,死磕索引,把响应时间压到毫秒级,觉得自己把系统打磨成了艺术品。结果呢?艺术品碎在一根光纤上。我所有的“高可用”设计,在物理世界的随机故障面前,脆弱得像张纸。那种感觉不是愤怒,是后怕,是脊背发凉——如果波动时间再长点呢?如果数据不是丢失而是被污染了呢?我引以为傲的“系统”,原来一直站在悬崖边上。
必须立刻上异地冷备。哪怕成本翻倍,哪怕同步有延迟。不能再赌了。我翻出之前嫌麻烦没看的阿里云DR方案文档,这次一个字一个字地啃。异地多活架构太贵,现阶段玩不起,但至少得把每日全量备份自动同步到另一个区域的OSS上,设置好跨地域恢复演练的定时任务。这不是技术选择,是生存底线。敬畏系统,首先得敬畏它赖以生存的、那些会发热会损坏的硬件和网络。
处理完所有善后,天已经亮了。我站起来想去倒杯水,眼前突然黑了几秒,赶紧扶住桌子。这才想起来,昨天一整天只啃了个面包。心率监测手表不知道第几次弹出“异常升高”的警告。我追求系统的7×24小时在线,却忘了自己的身体更需要停机维护。
一个极其荒谬的念头冒出来:如果我现在猝死在电脑前,这套刚刚规划好异地容灾的数据库,还有什么意义?它会在无人知晓的情况下继续运行,直到某个定时任务失败,或者账单欠费,然后彻底停摆。我所有的焦虑、优化、对流量和数据的病态渴求,瞬间失去了载体。
关掉所有IDE和终端。给几个核心客户发了简短通知:“系统维护,暂停服务48小时。” 没解释细节。然后订了最近一班去成都的机票,什么行李都没带,就背了个电脑包——里面甚至还有充电器,这习惯真他妈可悲。但这次,电脑不会开机。
青城山的民宿,窗户对着山。我躺下的第一个念头是:这里的网络信号真差。第二个念头是:真好。然后睡了整整十四小时。中间好像醒过一次,听见雨声,又沉沉睡去。没有梦到数据库,没有梦到报警短信。这种空白,比任何深度睡眠报告都珍贵。
下山前,我在本子上写了两条。第一条是技术项:落实OSS跨地域同步脚本,每周一次恢复演练。第二条是给自己:每月强制“硬件维护日”一天,手机关机,人离城市。系统要容灾,人更要。代码挂了可以回滚,人挂了,就什么都没了。这次宕机,赔的钱买了个天大的教训:有些底层协议,比TCP/IP更重要,比如身体和生命的协议。该备份了。














