全量发布 = 赌博。灰度发布让你先拿 1% 的流量验证,没问题再逐步放量。配合蓝绿部署实现快速回滚。

一、发布策略概述

  • 1.1 滚动发布——逐个替换实例
  • 1.2 蓝绿部署——两套环境,切换流量
  • 1.3 金丝雀发布(灰度)——逐步放量
  • 1.4 A/B 测试——同一功能的不同版本对比

二、蓝绿部署的实现

  • 2.1 蓝环境(当前版本)+ 绿环境(新版本)
  • 2.2 流量一次切换——Nginx / Gateway 修改 upstream
  • 2.3 优点——瞬时回滚
  • 2.4 缺点——双倍资源

三、灰度发布的实现

  • 3.1 基于权重的灰度——Gateway 按比例分发
  • 3.2 基于标签的灰度——用户白名单
  • 3.3 Spring Cloud Gateway 的灰度路由——自定义负载均衡
  • 3.4 Nacos 元数据的灰度——version=gray 标签
  • 3.5 流量染色——在 Header 中传递灰度标记

四、全链路灰度

  • 4.1 灰度标记的传递——Feign Interceptor / Dubbo Filter
  • 4.2 线程池中的标记传递——TransmittableThreadLocal
  • 4.3 消息队列的灰度——RocketMQ Tag 区分

五、灰度流程规范

  • 5.1 灰度前——代码评审 + 压测 + 灰度计划
  • 5.2 灰度中——1% → 5% → 20% → 50% → 100%
  • 5.3 每个阶段观察——错误率、RT、业务指标
  • 5.4 异常回滚——一键切回

六、总结

  • 灰度发布 = 业务信心 + 技术能力
  • 完善的可观测性是灰度发布的前提