前端架构师亲述:11年运维实战的系统降级秘籍
|
去年九月,凌晨三点十七分,我盯着监控面板上那条突然塌陷的 API 成功率曲线,手还停在键盘上没敲完“curl -I”。隔壁工位老张刚咽下最后一口冷掉的豆浆,手机震了一下,弹出客服后台第十八条“下单页空白”的告警——他没点开,直接把手机倒扣在桌面上,铝壳磕出一声闷响。 我原以为是 CDN 缓存击穿,毕竟上周刚切过新版本,nginx 配置里那个 proxy_cache_use_stale updating 选项我调了三遍。结果抓包一看,请求压根没出机房,连 LB 的 access_log 都没留下痕迹。运维群里飘着半句“是不是前端静态资源加载阻塞了”,没人接。后来查到是某云厂商灰度发布的那个新插件——叫“智能首屏加速v2.3.1”的东西,在 Chrome 127 里触发了一个未公开的 WebKit 内存回收 bug,导致整个页面 js 执行队列被卡死在 parse 阶段。它不报错,不崩溃,就安静地卡在那里,像一根晾衣绳上挂了八件湿衬衫。
文章配图,仅供参考 而我们线上降级开关,当时只覆盖了“接口失败时展示兜底页”这一条路径。没人想到要给“js 卡死但 HTTP 状态码仍是 200”设个开关。对,就是那个蓝色的、印着“降级控制台”的小按钮,点下去只生效于 fetch reject,对 setTimeout(…, 0) 永远不响应。我把它按了七次,第八次按下时,鼠标垫边缘已经磨出了毛边。 (这会儿楼下便利店关门灯亮了,我顺手买了瓶水,冰的,塑料瓶身结着水珠,但我没拧开,就攥着它坐在椅子上) 最荒的是凌晨四点十一分,产品总监冲进办公室说:“你们先别动,客户说‘感觉比昨天快’。”——她根本不知道刚才那二十来分钟,首页商品图是靠 service worker 强行缓存的旧版骨架屏撑过去的,连 loading 动画都是 CSS 关键帧硬塞进去的。我打开 DevTools,Network 栏里全是灰色的 pending,Console 干干净净,连 warning 都没有。可页面明明在动:用户能点收藏,能滑到底部,甚至能拉出弹窗。只是所有数据都来自五小时前的 localStorage 副本,连库存数都没刷新。它没崩,它只是……假装活着。 我也不知道算不算降级。它没切回旧版代码,没触发熔断阈值,没走任何预案里的分支,就那样用一个 bug 兜住了另一个 bug。后来我们给这个现象起了个代号叫“静默漂移”——系统没降级,它只是悄悄换了一套呼吸方式。优胜劣汰?反正活下来的不是最稳的那个,是最后被发现的那个。 对了,插件作者在 GitHub issue 里回复说:“We don’t reproduce it locally.”(他用的 macOS Sonoma,Chrome Canary 版本) 有谁碰到过这个吗 (编辑:航空爱好网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


专访前端架构师:前瞻技术演进与架构规划
轻量化网站架构:8年运维实战重塑网页游戏体验
动态跨界整合:前端架构师的资源协同新范式
