加入收藏 | 设为首页 | 会员中心 | 我要投稿 草根网 (https://www.0372zz.com/)- 容器安全、云日志、云数据迁移、行业智能、数据仓库!
当前位置: 首页 > 访谈 > 正文

后端老兵亲述:系统降级的实战血泪经

发布时间:2026-11-06 14:47:44 所属栏目:访谈 来源:DaWei
导读:  第九版切图发出去三分钟,前端说“空态不对”,我盯着屏幕想点开F12,结果手抖点进了钉钉日志——去年二月那会儿,连空态都得靠人肉翻历史快照找。你信不信?  窗台上的绿萝死了半盆,土干得能搓出粉,上周李薇路过顺手浇了

  第九版切图发出去三分钟,前端说“空态不对”,我盯着屏幕想点开F12,结果手抖点进了钉钉日志——去年二月那会儿,连空态都得靠人肉翻历史快照找。你信不信?


  窗台上的绿萝死了半盆,土干得能搓出粉,上周李薇路过顺手浇了回咖啡,说“反正比自来水养分多”。我原以为降级是加开关、改配置、切流量的事,结果呢?是产品在会议室拍板说“先砍掉消息推送”,第二天运营追着问“用户收不到通知算不算P0”,第三天我蹲在监控后台改熔断阈值,发现SDK版本号跟文档对不上——文档还是2021年写的。


  桌上那只干了的马克杯,杯底一圈白渍,洗过三次没冲干净,就搁那儿。色板里那个说不清的灰,#B5B5B5还是#B6B5B5,UI把俩颜色并排贴图里,自己都标错了行号,我们后端查接口响应头里Content-Type的时候,还在怀疑是不是Nginx漏传了字符集。


  谁在旁边刷短视频外放,声音不大,但“哈哈哈”卡在每条SQL执行完的间隙里,我听见一次,就Ctrl+C一次gdb调试命令。显示器有点色偏,右下角那个loading图标明明是#FF6B35,前端问我“为啥看起来像橙红”,我说“你本地没开sRGB”,他关了,然后发现我压根没开——我们俩的色差,比空态和缺省态的判断逻辑还难统一。


  稿子被改到第九版那一刻,其实不是因为还原度,是因为空态触发条件太细:用户没登录+未绑定手机号+首屏无缓存数据+请求超时>800ms+上一个接口返回status 429——凑齐这五条才展示那个“请稍后再试”的弹窗。前端说“太碎了”,我把状态树导出成JSON,发他邮箱,附言“你随便删三条,我接”。他真删了两条,第三天凌晨两点发来截图:空态没了,但loading转了两分钟,用户点了三次提交按钮,订单创建了三笔。


文章配图,仅供参考

  切图文件夹里的命名乱七八糟,“首页_v9_最终_final_reallyfinal@2x.png”,可v9根本没进测试环境。我查Git记录,发现“v9”其实是前端同事重命名的,原始commit里写的是“fix-logout-jump-bug”,连tag都没打。优胜劣汰?不是代码活下来,是哪个人没被当场骂哭,哪版需求没被运营临时拦停,哪次告警没在晨会前自动恢复——这才叫淘汰。


  数位笔的笔尖刚换过,触感太滑,我拿它画过三次限流曲线,全被产品经理划掉,说“要带小箭头的,像PPT那种”。后来我就改用键盘画,Alt+7789一串,看着像,也省得解释坐标系。我原以为降级开关得放Apollo里配,结果上线那天运维说“K8s configmap加载慢,先写死在yaml里”,我就真写了,一行`feature: {message_push: false}`,连注释都没加。现在看,写死反而救了命——上个月Apollo集群挂了四十七分钟,所有开关都还在yaml里蹦着。


  李薇把那盆绿萝挪走了,换了一盆新的,说是“水培款,不掉叶子”。王磊昨天提了个PR,想把降级策略做成动态DSL,我review了两小时,最后只回了一句“别碰configcenter目录,上月刚有人误删了prod分支的加密key”。其实我自己也不确定key在哪,只是看见git log里有个“[SEC] rollback prod config”,时间戳就是去年二月十七号半夜,后面跟着三个叹号。


  你问为什么记得这么清?因为那天我改完最后一版降级兜底逻辑,回工位发现显示器右下角一直闪红点——不是告警,是Zoom会议还没结束,但人早散了,只剩我一个人听着对方呼吸声敲回车。没关,怕错过什么。后来才知道,是产品在电梯里喊了句“再加个开关”,运维顺手点了共享屏幕,忘了退出。


  空态不对那版,其实不是前端错了。是我们把“无网络”和“token失效”塞进同一个loading中断流程,但前端做离线检测时,用的是navigator.onLine,这玩意儿连WiFi但没网时照样返回true。我查MDN查到凌晨一点,发现这个API从2011年就没准过。可没人改,因为……算了,不说了。你上次改的那个间距,0.5rem还是8px?反正我们后端接收的都是字符串,连parseInt都不用。


  所以现在我接新项目,第一件事不是拉架构图,是翻切图命名规则——要是看到“_v2_备份_勿删.png”,我就知道这组人没被真实线上流量毒打过。去年二月那波,活下来的不是代码,是那台没装Chrome更新的测试机,它跑着老版本WebSocket客户端,刚好绕过了新版协议里的一个心跳超时bug。你信不信?


  不扯了,下个迭代要支持灰度降级,我得去问问运维:configmap热更新到底等几秒才生效。或者……干脆等下次前端说“空态又变了”,我直接把整个降级模块打成jar包,扔他build路径里。反正他们也不看源码,只认class字节码。

(编辑:草根网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!