跳到正文

金丝雀发布

Canary Release

高级通用

金丝雀发布(Canary Release)是先让少量真实用户使用新版本,观察运行情况后再逐步扩大范围的上线方式。它解决的是新版本一旦出问题就影响所有用户的风险,例如先把新版搜索服务开放给一小部分流量。

你可能会说:「我想先让少量用户用上新版本,确认没有明显问题后再慢慢放给所有人。」

读之前建议先了解(这是一个高级概念)

动手看看

搜索用户流量入口旧版搜索正常服务新版搜索尚未开放
1

新版还没开放,用户的搜索请求都由旧版处理。先保留这条稳定路径,后面才能随时切回来。

要点

  1. 1

    先划出一小部分真实流量

    我们把少量请求或用户导向新版本,其余仍使用旧版本。因为新版本已经接触真实使用场景,所以能发现测试环境里没暴露的问题,同时把可能的影响限制在较小范围。

  2. 2

    用指标决定是否扩大范围

    你可以同时看新旧版本的错误率、响应时间,以及关键操作的完成情况。比如新版结账页没有报错,但付款完成率明显下降,也值得暂停扩量并排查。

  3. 3

    提前想好如何停下和退回

    如果观察到异常,就停止向新版本分配流量,并把已有流量切回旧版本。这样做的前提是旧版本仍能处理当前数据;涉及数据库结构变更时,我们还要考虑新旧版本的兼容性。

容易混淆的地方

金丝雀发布关注的是新版本先给谁用、何时扩大范围。蓝绿部署通常是准备两套环境并切换流量;你也可以在两套环境之间逐步切流,做成金丝雀发布。A/B 测试则主要比较不同方案的效果,目的是做产品决策,不一定以发现上线故障为主。

什么时候用

适合用

  • 你要更新网站的搜索服务,担心真实查询方式比测试样例复杂,想先放给少量流量观察错误和延迟。
  • App 的新接口已通过测试,但调用链涉及多个服务,你想逐步扩大使用范围,确认整条链路运行正常。
  • 后台的订单处理逻辑改动较大,你能按用户或请求分流,也能监控处理结果并快速切回旧版本。

不适合用

  • 只是想让团队内部提前验收页面,还没准备让真实用户接触;用预发布环境更直接。
  • 只是比较两个按钮文案哪个带来更多点击,不涉及新版本上线风险;用 A/B 测试更贴合目标。
  • 一次性脚本会修改全部历史数据,无法按用户分流,也难以撤回;先用备份、分批执行和结果校验控制风险。

练一练

你们要上线新版商品搜索。测试已通过,但担心真实流量下变慢;系统能按请求分流,并分别查看新旧版本的延迟和错误率。你会怎么安排?

让 AI 帮你做

请为新版商品搜索设计金丝雀发布方案:先让少量真实流量进入新版本,保持旧版本可用;说明分流方式、要对比的错误率和延迟指标、扩大范围的条件,以及异常时如何停止分流并切回旧版。也请检查新旧版本的数据兼容性。

接下来学什么