← 中文资源

简体中文版本

特性开关分阶段发布

把部署与暴露分离,让特性从内部用户逐步扩大到全量,并在验证后移除开关与死代码。

阅读英文原文

部署不等于暴露

特性开关把发布代码与向用户展示分开。代码可以在开关关闭时部署并验证,然后分阶段扩大暴露,同时保留无需重新部署的 kill switch。

const enabled = await flags.isEnabled('new-checkout', {
  userId,
  environment: 'production',
});

if (enabled) {
  return renderNewCheckout();
}
return renderLegacyCheckout();

步骤

  1. 创建开关,明确名称、负责人、默认值和移除日期;生产默认关闭。
  2. 暗发布:关闭开关部署代码,确认启动与后台路径正常,然后对内部用户或测试群组开启。
  3. 分阶段扩大:1% → 10% → 50% → 100%,每阶段比较特性指标与 SLO。
  4. 根据证据继续、暂停或关闭,并记录决策与使用的指标。
  5. 全量与观察期后删除开关、死分支和定向规则。

验证

  • 处理组与对照组在错误率、延迟和业务指标上被比较。
  • kill switch 无需部署即可关闭特性。
  • 开关有负责人与过期日期。
  • 移除后旧分支被删除,测试覆盖唯一保留的行为。

决策点

回滚优先关闭开关,前提是关闭时路径安全;否则重新部署旧版本。全量后等待覆盖特性使用周期的观察期再移除开关。

风险

每个开关都是临时的。没有负责人和移除日期,开关会变成未测试的分支和意外的永久配置。应在注册表中跟踪开关并定期审查过期项。