一句话定义
金丝雀发布(Canary Release)是一种上线策略:新版本先只服务一小部分流量(比如 1%、5%),用真实用户和真实数据验证没问题后,再逐步把比例调大,直到完全替换旧版本。
名字来自早期煤矿:矿工下井会带一只金丝雀,鸟对瓦斯比人敏感得多,鸟先倒下,人就还有时间撤。新版本就是那只鸟。
原理:不是"全有或全无",而是"拧旋钮"
传统上线更像"停机替换加祈祷"。金丝雀发布把上线拆成一个连续动作:
1. 新旧两个版本同时在线,前面有一层流量调度(网关、负载均衡或开关服务)决定某个请求走哪一版。
2. 先切 1% 进来,盯错误率、延迟、资源占用,以及业务指标:下单、点击、停留、转化。
3. 没问题就 5%、20%、50%、100%;有问题就把权重调回 0,回滚通常只要几秒到几分钟。
4. 分流规则可以是纯随机比例,也可以按用户 ID、地域、设备、白名单来分。通常会让同一个用户稳定走同一版本,避免体验反复横跳。
和蓝绿部署、灰度发布的区别
| 金丝雀发布 | 蓝绿部署(Blue-Green Deployment) | 灰度发布(Gray Release) | |
|---|---|---|---|
| 核心做法 | 新旧版本同时在线,按比例逐步放量 | 备好两套完整环境,验证后整体切换流量 | 泛指"只让一部分用户用新版"的所有做法 |
| 切分粒度 | 可精细到 1% 的流量 | 通常是整体切换 | 常按用户、地域、白名单切 |
| 资源成本 | 只多一小部分实例 | 接近翻倍,两套等价环境 | 取决于具体实现 |
| 回滚方式 | 把权重调回 0 | 流量切回旧环境,通常最快 | 取决于具体实现 |
| 相互关系 | 是灰度发布的一种具体实现 | 常和灰度策略配合使用 | 更大的范畴,金丝雀属于其中 |
一句话记住:灰度是"让一部分人先用"的总称,金丝雀是其中最典型、最强调"按比例逐步放量"的那种;蓝绿强调的则是"两套环境、一键切换"。
对从业者的意义
模型上线同样是金丝雀:新模型先接一小股流量,同时对比业务指标、响应延迟和推理成本,而不是只看离线准确率。比策略本身更重要的是配套条件——指标能观测、流量能按比例切、回滚能一键完成,以及新旧版本在数据库字段、缓存、接口和模型输入输出格式上互相兼容。常见坑也在这里:样本太小看不出差异、分流不随机(比如只切了某个城市)导致结论有偏、观察窗口太短、新旧版本共享状态导致回滚不干净。
对普通人的意义
你偶尔遇到"界面怎么变了""这个功能好像没了""今天有点卡",很可能你就是那 1% 的金丝雀。同事的手机和你不一样,未必是版本号不同,而是分流规则不同。遇到问题及时反馈,正是这套机制最想收集的信号。
具体工具和配置方式各家不同,以官方文档为准。
