功能开关是什么
功能开关把代码发布与功能启用解耦:代码可以随时上线,功能通过开关按条件开放。按用途通常分为发布开关、实验开关、运维开关与权限开关,用途不同,生命周期与治理要求也不同,混在一起管理就会失控。
治理要点
开关最大的风险是只增不删:代码里长期并存大量条件分支,路径组合爆炸,没人敢清理,测试也无法覆盖。因此每个开关都应有负责人、清理时间与触发条件——发布开关在全量后按计划移除,实验开关在结论产出后下线,权限开关纳入正式的配置管理与审计。
判断示例
判断示例
if (flags.isEnabled('checkout-v2', { userId })) {
checkoutV2(); # 新流程
} else {
checkoutV1(); # 旧流程
}
# 通过标准接口调用,避免业务代码绑定某个供应商的 SDK
# 开关名要写清用途与清理时间,避免长期堆积四种类型
| 发布开关 | 灰度放量与快速回滚,全量后按计划清理 |
|---|---|
| 实验开关 | 用于对比实验,产出结论后下线 |
| 运维开关 | 降级与熔断的应急开关,长期保留需说明 |
| 权限开关 | 按用户或租户开放能力,需配置与审计 |
典型使用场景
- 灰度发布:先对小比例用户开放新功能
- 对比实验:按分流比例比较新旧方案的业务效果
- 紧急降级:故障时关闭非核心功能保住主链路
- 按租户开放:大客户先试用再全量开放
- 隔离问题模块:出现异常时单独关闭某能力而不回滚整包
怎么避免开关失控
建立一份开关登记表,记录名称、用途、负责人、创建时间与计划清理时间,并在代码评审与迭代回顾时检查逾期未清理的开关。技术上也应减少嵌套:一个功能最多由一个开关控制,避免多个开关组合出难以穷举的路径。发布开关在功能全量后应当作为一个独立任务移除,而不是等下次重构顺带处理。
不要用功能开关替代权限系统:开关是临时的技术手段,缺省值和配置错误都可能导致越权,权限判断必须在服务端做正式授权校验。