金丝雀/AB/红绿发布
1.金丝雀发布
按流量比例逐步放量,只能按流量,不按流量就不是金丝雀发布
-
新版本先给 一小部分用户(比如 1%)
-
观察是否出问题
-
没问题 → 逐步扩大(10% → 50% → 100%)
特点
- 风险最小(逐步试探)
- 可以实时监控指标(错误率、延迟)
- 需要流量控制能力(如网关/服务网格)
bash
用户请求:
1% → 新版本
99% → 老版本
2. A/B 发布
按用户特征分组对比
-
用户被分成两组(A组 / B组)
-
A → 老版本
-
B → 新版本
-
对比效果(转化率、点击率等)
特点
- 用于产品决策
- 可以长期共存
- 不一定是为了"安全发布"
- 需要用户分流系统
适用:推荐系统、广告策略、UI改版
bash
北京用户 → A版本
上海用户 → B版本
3.红绿发布
两套环境,瞬间切换
-
蓝(Blue)= 当前生产版本
-
绿(Green)= 新版本(完整部署好)
-
切换流量:Blue → Green(一次性切)
特点
-
回滚极快(切回去)
-
发布简单粗暴
-
资源成本高(两套环境)
-
切换瞬间有风险
适用: 传统应用、对回滚要求极高的系统
旧环境(Blue) → 全部流量
新环境(Green) → 准备好
切换 → 100% 到 Green
- 金丝雀 : 一点点放量,看有没有毒
- A/B :两种方案对比哪个好
- 红绿 :直接切新版本,不行就切回去
| 维度 | 金丝雀发布 | A/B 发布 | 红绿发布 |
|---|---|---|---|
| 目的 | 降风险上线 | 实验对比 | 快速切换 |
| 分流方式 | 流量比例 | 用户特征 | 全量切换 |
| 是否渐进 | 是 | 不一定 | 一次切换 |
| 回滚速度 | 中 | 慢 | 非常快 |
| 成本 | 中 | 中 | 高(双环境) |
4.灰度发布
让一部分用户先用新版本,逐步扩大范围,而不是一次性全量上线
灰度发布 = 策略思想(大类)
金丝雀发布 = 灰度发布的一种实现方式
bah
灰度发布(大类)
⬇
金丝雀发布(其中一种)
------------------------------------------------------
灰度发布
├── 金丝雀发布(按流量比例)
├── A/B 发布(按用户分组)
└── 其他灰度策略(按地域、账号、版本等)
- 按流量比例(= 金丝雀) 1% → 10% → 50% → 100%
- 按用户特征(类似 A/B) 公司员工 → 新版本,普通用户 → 老版本
- 按实例(Pod)数量 2个跑新版本,8个老版本
- 按请求条件