首页/开发/CI/CD 与发布速查/特性开关作为配置(Feature Flags)
环境与配置管理60 条

特性开关作为配置(Feature Flags)

用开关把「部署」与「发布」解耦:代码先上、功能默认关,按人群或比例开启;开关本身要纳管与清理。

CI/CD 与发布速查开发更新于 2026-10-13

特性开关是什么

特性开关把部署与发布解耦:代码先上线、功能默认关,通过配置按人群、比例或白名单逐步开启。它让发布可逆——出问题瞬间关掉而不必回滚部署;但开关是债:类型要分清(发布开关、实验开关、运维开关),生命周期要登记,发布完成后限期清理。评估量级时要看开关组合爆炸:每个开关理论上翻倍状态数,注册表与到期提醒是控债的核心手段。

基本信息

类型发布开关(短期)、实验开关(A/B)、运维开关(降级/熔断)
管理开关配置集中管理、变更有审计、默认值面向安全(关)
生命周期发布会后限期清理,防止开关矩阵爆炸
求值位置敏感逻辑的判断放服务端;客户端开关要考虑被篡改绕过的风险

三类开关对照

类型生命周期典型用途
发布开关发布后数周内清理渐进放量与回退
实验开关实验结束即归档A/B 指标对比
运维开关长期保留降级与熔断

典型使用场景

  • 大功能拆小合并:主干开发、功能关着上线,避免长命分支
  • 灰度放量:按比例 1%→10%→全量推进,指标异常一键回退
  • 运维降级:高负载时关闭非关键功能(推荐、动效)保核心链路
  • A/B 实验:实验开关与发布开关分开管理,防止实验残留进稳定逻辑
  • 紧急止血:出问题先关开关,再排查原因,非必要不回滚部署
  • 平台化托管:多个服务共用一个开关服务,状态一处修改全局求值,注意故障时的兜底默认值

配置形态

配置形态
features:
  new-checkout: false      # 默认关(安全值)
  rollout-percent: 0       # 灰度比例
  allowlist: []            # 白名单用户

# 开启顺序:内部白名单 → 1% → 10% → 全量 → 观察后清理开关
开关默认值必须是安全值:配置中心不可用时系统仍可用。
开关求值要集中封装:散落各处的 if 分支难以清理、难以测试,收敛到一个模块里统一管理。

易错点

  • 开关长期不清理:分支逻辑与测试矩阵翻倍,登记到期时间与负责人
  • 开关状态变更无审计:出问题无从追溯谁在何时打开的,配置变更要进审计日志
  • 嵌套开关互相依赖:两个开关组合出四种状态,尽量扁平化并限制组合
  • 默认值设为开:配置中心故障时新功能意外全量生效,默认值一律取安全侧
  • 撤销开关时直接删代码分支:忽略数据兼容性,回滚版本读到新结构出错,清理走正常发布流程

数据来源与参考

  • Martin Fowler《Feature Toggles》
  • LaunchDarkly 文档(概念)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌