为什么要灰度
一次把新版本推给全部用户,是最刺激也最危险的发布方式。万一有个严重 bug,全量用户一起遭殃。灰度发布就是先放给一小部分人用,没事再慢慢放量,出事也只影响那一小撮。
小程序本身有版本审核和发布机制,配合后端的灰度开关,前后端一起做灰度,才完整。
灰度不是大公司专利。哪怕是小团队,先内部用、再放给几个熟客,这个习惯养成了,发布就再也不用提心吊胆。
省下来的,是事后救火的无数个通宵。
灰度的本质:把「全量赌博」拆成「逐步下注」。
- 灰度先小流量、观察、再放量。
- 回滚出事能快速退回去。
- 版本治理老版本兼容怎么处理。
- 流程发布要有规矩,别靠拍脑袋。
灰度怎么分
常见分法:先内部人员、再核心用户、再小比例真实流量,最后全量。每一步都留观察时间,看监控里错误率和投诉有没有异常。
| 阶段 | 范围 |
|---|---|
| 内测 | 内部员工 |
| 小流量 | 1% 到 5% 用户 |
| 全量 | 确认无问题后放开 |
// 后端按用户白名单或比例下发灰度标记
const gray = inGrayList(uid) || uid % 100 < 5;
灰度比例要慢慢爬,别从 1% 一下跳到 50%。每一步都留够观察时间,看错误率、看投诉、看核心指标有没有掉。
灰度的用户也不是随便挑。优先挑活跃、反馈积极的,真出问题他们愿意帮你报,比沉默用户强得多。
除了按比例,也可以按地域、按渠道分灰度。有些问题只在特定地区的用户网络下才出现,分地区灰度能更快暴露。
回滚:兜底
灰度期间一旦发现问题,能立刻把流量切回老版本,这就是回滚。回滚要快,不能等审批,出事那几分钟里每一秒都在放大损失。
- 后端开关比前端回滚快,优先做。
- 前端版本更新有用户缓存,不能指望秒退。
- 回滚演练要提前做,别出事才第一次试。
回滚之所以重要,是因为线上问题的暴露往往有延迟。不是一上线就炸,而是跑了几小时、碰上特定用户才出。所以观察期不能短。
前端版本的回滚慢,所以更要靠后端灰度开关扛。后端开关能秒切,这才是真正的救命手段。
版本治理
用户不会第一时间更新小程序,老版本会存在一段时间。后端接口改了,老版本还在调,就得做向后兼容,或者引导用户升级。
// 检测到用户版本过低,提示升级
if (lowVersion(cur)) wx.showModal({ content: "请更新到新版本" });
别轻易直接砍老接口,留好过渡期,等老版本用户少了再清理。
版本治理还有个动作:定期盘点还有多少用户停留在老版本。比例低到可以接受了,再安全地清理老接口,心里有数。
发布流程
把发布写成一套固定流程:谁发、什么时候发、灰度多久、观察哪些指标、出事找谁。有流程兜底,新人也能照着走,不会临场慌。
// 发布 checklist:测试、灰度、观察、放量、记录
// 每一步勾选,别跳
发布尽量避开大流量时段,半夜或工作日上午,出问题好有人处理。
发布记录要留档。这次发了什么、灰度多久、出过什么问题都记下来,下次发布就是现成的参考。
发布前的清单要养成习惯:自测过了吗、灰度开关配了吗、回滚路径通了吗,逐项打勾再发。
常见发布坑
| 坑 | 后果 | 应对 |
|---|---|---|
| 一把全量推 | 出事影响全部用户 | 分阶段灰度 |
| 没演练回滚 | 出事退不回去 | 提前演练 |
| 老接口说砍就砍 | 老版本白屏 | 留过渡期 |
还有个容易犯的错:只测了新功能,忘了测老功能有没有被带坏。回归测试要跟上,别光顾着看新东西。
发布治理清单
- 发布走灰度,别一把全量。
- 每阶段盯监控,异常立刻停。
- 回滚方案提前演练,出事秒切。
- 后端接口改好向后兼容。
- 发布流程文档化,谁发都照章走。
发布不是赌一把,是可控的一步步放量。
发布做多了你会发现,最稳的团队,往往是那些流程最死板、最不追求临场发挥的团队。