作者:xiaobo
参考:https://martinfowler.com/articles/feature-toggles.html
什么是特性开关
定义:不改变代码,实现系统行为的修改。特性开关并不是什么新的技术,可能你已经使用过很多次了,例如 C 语言的预编译宏:
还比如,业务开发惯用的 A/B testing,其实都属于特性开关:
特性开关的常见别名有:Feature Flags
, Feature Bits
, Feature Flippers
特性开关分类
一般情况,我们从 2个维度来划分特性开关:
1、时长/生命周期
2、动态性
通过这 2个维度可以划分出 4类特性开关:
1、 release/feature toggles (功能发布开关)
2、 experiment toggles (试验性开关)
3、 ops toggles (运维开关)
4、 permission toggles (权限开关)
将这 4个开关放到上述 2个维度的坐标中,如下图:
1、release/feature toggles (功能发布开关)
功能发布开关指,一些特定 feature,或是不完整的功能,通过开关控制它们只面向特定的用户。最常见的例子,比如内测版本只提供给参与内测的用户。
2、experiment toggles (试验性开关)
试验性开关比较好理解,上文提到的 A/B testing 就是一种实验开关。通常,实验开关通过服务请求(request)来控制。
3、ops toggles 运维开关
运维开关,一般分为两类:
- 短期的:减少一些非关键性的功能,让出更多资源给高需求的产品;比如预留一个随时可以关闭网页上评论功能的开关,当有新品要发布时,通过该开关关闭网页上的评论功能,让出更多服务器资源来负载新品发布带来的流量压力。
-
长期存在的:需要快速响应的,解决用户响应的开关需要长期存在;例如回滚、降级等运维操作。
4、权限开关
顾名思义,指针对不用用户权限的开关,例如付费用户比普通用户能享有的特殊功能;权限开关的特点是,开关的用户群体是明确的特定用户群。
管理开关配置的常见办法
一:硬编码
1、代码注释控制,最简单,最基本的配置
2、预编译指令 #ifdef feature (有宏支持的语言)
硬编码管理的方式,适合通过代码重新部署后生效的开关。
二:参数化开关配置
1、命令行参数
2、环境变量
这种方式比较笨重,处理过程繁琐,需要一些有特权的人才能处理。
三:配置文件
修改配置文件后,虽然不需要 re-build ,但一般都需要重新部署。这种方式文件合法性的校验是关键。
四:通过 DB 配置
往往有个 UI 界面供操作人员录入,控制相对(文件)严格了很多。这种管理手段最严格,也最方便,但配置程序的开发成本也最高。
上述 4种管理手段,可以从规范性/动态性方面去考量:
(全文完!)