初始模型:

灰度发布就是让 v1 / v2 同时存在,先把少量流量切到 v2,确认稳定后逐步扩大,最后全部切到 v2;异常时可以随时切回 v1。

  • 双版本共存:灰度期间新旧版本必须同时可用 → 分别部署 v1、v2,最好用两个独立 Service,方便流量控制和回滚
  • 统一流量入口:必须有一个地方决定请求去 v1 还是 v2 → 复用 Gateway,或者自己增加灰度路由/代理层
  • 稳定分桶:不能纯随机,否则同一个用户可能一会儿进 v1、一会儿进 v2 → 根据 User ID / Cookie / IP 做 Hash 分桶
  • 百分比灰度:需要逐步扩大新版本覆盖范围 → 通过调整桶的范围实现 1% → 5% → 20% → 50% → 100%
  • 动态规则:每次放量不能重启入口服务 → 灰度系统动态修改并下发流量规则
  • 监控观察:放量后必须知道新版本是否正常 → 通过 Prometheus / Grafana 等观察错误率、RT、流量和关键业务指标
  • 快速回滚:新版本异常不能继续扩大影响 → 直接把 v2 流量比例降到 0,全部切回 v1
  • 最终切换:v2 全量运行稳定后 → 100% 流量切到 v2,再下掉 v1

最后主线可以记成:

双版本共存 → 统一入口分流 → Hash 保稳定 → 百分比逐步放量 → 监控观察 → 异常回滚 → 最终全量切换。