灰度发布与蓝绿部署方案
全量发布 = 赌博。灰度发布让你先拿 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 异常回滚——一键切回
六、总结
- 灰度发布 = 业务信心 + 技术能力
- 完善的可观测性是灰度发布的前提
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!