安全网越密,摔得越疼

安全网越密,摔得越疼

配置中心上线三个月,我们出的生产事故反而比之前多了。这件事本身就很讽刺——当初立项的理由恰恰是"减少人为操作失误"。

凌晨两点半的那个电话

出事那天是周三凌晨两点半。手机震的时候我整个人弹起来,那种心率飙升的感觉跟溺水被捞上来差不多。值班同学说首页推荐位全乱了,打开页面一看——理财首页的推荐位展示的是测试数据,"年化收益999%"赫然排在第一位。

原因是这样的:配置中心上线后,改配置变成了在 Web 界面填个值、点保存、选环境、确认推送。整个操作三十秒搞定。以前没有配置中心的时候,改一段配置需要改代码、提 CR、过 CI/CD、灰度发布,流程虽然慢,但每一道关卡都在拦人为失误。出事那晚,有个同学发现测试环境有个推荐位的 JSON 字段名拼错了,在配置中心改好、推送生效,然后顺手想把生产环境的同类配置也"优化"一下。结果他把测试环境的整份配置直接推到了生产。配置中心没有任何拦截,因为从权限角度看,他确实有生产环境的推送权限。

这个操作在代码部署时代几乎不可能发生——测试环境和生产环境的代码配置物理隔离在不同的机器上,你得 SSH 上去手动改。配置中心用"环境标签"来做逻辑隔离,但一个下拉菜单选错,隔离就穿透了。

方便本身就是风险

事后复盘时我查了一下行业里的讨论。InfoQ 上周有一篇关于可观测性预算的文章提到一个观点叫"可靠性回报递减"——你在监控上投入越多,新增的可靠性收益越少,但复杂性一直在涨。配置中心也是类似的道理。上线初期确实解决了一类问题:紧急修复不用等发布窗口了。但紧接着出现了一类新问题:正因为改配置太容易,大家越来越不走发布流程了。

我们统计了配置中心上线后头三个月的数据:配置变更频率是之前的四倍,其中大约 40% 的变更理由写的是"紧急修复"。但真正紧急的可能不到一半。剩下那些,说白了就是"懒得走发布流程"。配置中心的"一键回滚"功能让大家心理上觉得"出了问题撤回就行",但配置变更是即时的——用户已经看到了那个错误的页面。在我们的业务里,用户看到"年化收益999%"的那一刻,截图可能已经在微信群里传开了。配置可以撤回,截图撤不回来。

金融场景的教训更疼

在金融业务里,这类问题的后果更严重。我们之前做前端配置平台的时候,也遇到过类似的事。平台刚上线,运营同学可以直接在后台改产品页面的配置项,改完即时生效。前三个月出了好几次事故,原因都一样——运营手滑把测试内容推到了线上。后来我们加了一个改动:任何配置变更必须先推送到一个预览环境,运营在预览环境确认效果后才能正式推送。本质上就是把代码部署时代的"灰度发布"机制重新做了一遍——配置中心上线时被当作"不必要的复杂度"去掉了,出了事故又加回来了。

那个凌晨两点半的事故,修复花了四十分钟。不是改配置需要四十分钟——改回去三十秒就够了。四十分钟花在全量检查:确认没有其他推荐位被污染,确认用户端缓存已经刷新,确认没有合规层面的后续影响。如果当初不走配置中心而是走代码发布,光是 CI/CD 流水线的二十分钟就够你冷静下来重新想一想了。

安全感与事故概率成反比

我现在觉得这可能是一个普遍规律:系统让操作越"安全",操作者越容易放松警惕。安全带上身之后开车更猛了,ABS 装了之后刹车踩得更狠了,配置中心有了"撤销"功能之后改配置不犹豫了。行为经济学里管这叫 risk compensation(风险补偿),不是新概念。

配置中心解决的是分发效率问题,但没有解决变更管理问题。改一个配置和改一段代码,在组织流程上本质没有区别——都需要评审、灰度、确认。但配置中心让这些流程更容易被绕过。这不是工具的问题,是人的问题。更准确地说,是工具改变了人的行为模式。任何让操作变"容易"的工具,都会降低操作者的心理成本。

我们后来做了一件事:给配置中心的推送加了一个"影响范围预估"。推送前会显示这个变更会影响多少台机器、多少个页面。不是为了拦截,只是为了让操作者停下来多看两秒。加上之后,"手滑"类事故确实少了。不是流程变严格了,是人在操作前多想了一步。

工具不是安全网

写这篇文章的时候我翻了翻笔记,发现这个坑不是第一次踩。几年前做微前端拆分的时候也是类似的——以为拆完就解耦了,结果共享依赖的管理成本反而比拆分前更高。工具的引入解决了一个旧问题,同时创造了一个新问题,而新问题往往比旧问题更隐蔽。

我现在做技术选型时会多问一个问题:这个工具会让团队在哪些方面放松警惕?那些被放松的警惕,往往就是下一个事故的生长点。不是说配置中心不该上——它确实提高了效率。但上了之后不加管控机制,就像装了安全带却不教人怎么系。

不知道别的团队有没有类似的经历。配置中心、权限管理平台、甚至 AI 编码工具,这些"提效"的东西上线之后,有没有在某些维度上反而变得更脆弱了?如果有,大概不是我一个人在踩这个坑。

You voted 4. Total votes: 13

添加新评论