承接上一篇《插件化原理概览:Hook 与动态加载》,那一篇讲的是「代码能不能被动态替换」,这一篇讲一个更常用、成本低得多的手段:通过配置控制功能的开关与灰度。它不需要任何 Hook,却能覆盖大部分「分批放量、风险控制、效果验证」的需求。
结论先行:功能开关的价值不在于「关掉一个功能」,而在于「让功能的生效范围成为可配置的参数」。一旦生效范围变成配置,就同时获得了灰度、回滚、A/B 实验这三项能力——这是配置驱动架构的真正收益。
一、开关的三种粒度
从粗到细,开关可以作用在三个层次。
| 粒度 | 控制什么 | 生效时机 | 典型用途 |
|---|---|---|---|
| 构建期 | 编译时打进去的代码分支 | 构建 | 渠道定制、去除某功能 |
| 启动期 | 应用启动时读取一次,进程内不变 | 冷启动 | 大功能开关、实验分组 |
| 运行期 | 每次调用点实时判断 | 任意时刻 | 精细降级、动态调整 |
多数项目只需要启动期,运行期要谨慎。原因在第三节会讲清楚。</