面试和项目复盘里,这两个词经常被混着用。其实它们的关系更像是包含:灰度发布是大类,金丝雀发布是其中一种最严格、最谨慎的做法。
灰度发布:按比例放量
新版本先让一小部分用户用,确认没问题再逐步扩大,直到全量。这个「部分」的划分方式可以很多:按用户 ID 哈希、按地区、按设备类型、按会员等级。核心是把风险控制在可承受的范围内,出问题时影响面小,回滚也快。
实现手段通常是网关或者负载均衡按权重分流,比如 5% 流量打到新版本,95% 还在老版本。
金丝雀发布:先放一只鸟进矿洞
名字来自矿工带金丝雀下矿井,鸟先死说明有毒气。工程里的做法是:先只让极小一部分流量走新版本,而这一部分通常选内部员工或者真实用户的一小撮,配合严格的监控和快速回滚。确认指标正常,再逐步替换旧实例。
它有两个特征比较鲜明:一是初始流量极小,常常是几百个请求甚至个位数;二是要求有自动化对比,新老版本的错误率、延迟、业务指标实时比,一旦有偏差立刻切回。
几个维度的对比
- 范围:灰度可以是 10%、30%、50% 地放;金丝雀更强调起点的极小样本。
- 关注点:灰度偏重业务验证和用户覆盖面;金丝雀偏重技术指标的异常探测。
- 回滚:金丝雀必须有分钟级的自动回滚能力,否则鸟死了没人管。
- 资源:金丝雀需要新老两套环境长期并存,对资源要求更高。
实际怎么做
一个常见的流程是:金丝雀验证技术可用性,比如 1% 流量跑 30 分钟,看错误率和 P99 延迟;然后进入灰度阶段,按 5%、20%、50% 逐步放量,每一步观察业务指标;最后全量,旧版本下线。
配套的三件事不能少:可观测性(日志、链路追踪、埋点)、功能开关(代码层面随时关闭新逻辑)、以及明确的回滚预案。没有这三样,两种发布方式都只是口号。
简单记:灰度是放量的策略,金丝雀是最小心的那一小步。