一次全量推送压垮了凌晨的批处理
晚上十一点,老王把订单服务的通知重试次数从 3 改成 5,点下发布——配置中心秒级生效,几百个实例同时拿到新值。问题也跟着来了:下游系统当晚正在做历史上最久的一次对账,通知积压翻倍,重试次数变大成了雪上加霜,队列一路堆到天亮。配置生效快是能力,全量生效快是风险——这一篇讲怎么把这份能力管住。
环境隔离是第一道闸
配置中心的第一原则:环境之间物理隔离。开发、测试、生产用不同的命名空间甚至不同集群,生产配置单独一套账号权限——能改生产配置的人,应该比能改生产代码的人更少。代码发版还有流水线卡质量关,配置发布如果人人可点,生产就是裸奔。
两个必开的闸:读权限按环境收敛、写权限按配置项分组;重要配置的变更强制走审批,至少双人复核——配置的变更快到没有犹豫的时间,审批是唯一的缓冲。
灰度:先改一台,看十分钟
全量推送前先灰度:新配置只发给一台实例,观察错误率、RT、业务指标十分钟,正常再推全量。Nacos 支持 Beta 发布按 IP 灰度,K8s 环境可以直接灰度 Deployment。对行为有开关意义的配置,先加开关、灰度切流、全量后清理——三步走完,任何时候都能一键回旧值。
// 一次规范的配置变更
1. 变更单:改什么、为什么、影响面、回滚方式
2. Beta 灰度:betaIps 只发一台(如 10.2.3.15)
3. 观察 10 分钟:错误率、RT、业务指标无异常
4. 全量推送,继续观察 30 分钟
5. 任何一步异常 -> 放弃全量,灰度实例重启回稳定版审计:谁在什么时候改了什么
配置中心自带历史版本,但要真正用起来:每次变更记录操作人、时间与内容 diff;重要配置变更自动推告警到群里——让全组知道有人动了什么,本身就是一种保护。审计不是不信任谁,是给凌晨排查的人留一条能查的线:故障时间点之前发生过什么变更,一查便知。多少次"灵异故障",最后都定位到一句"哦,那天下午改过一个开关"。
回滚:一键回上一版
回滚能力决定变更的底气:版本管理保留最近足够多的版本,一键回滚到任意版本;客户端侧再留一道保险——关键配置保留本地兜底值,配置中心不可达时用上次成功值或默认值启动,宁可慢一点,不要起不来。回滚预案要定期演练,别等真出事才发现历史版本早被清理了。
配置管住了,下一个浮出水面的问题是流量:多台实例之间流量怎么分才均匀——下一篇讲负载均衡,从轮询讲到自适应。
评论 (0)