最简特性开关


作者: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种管理手段,可以从规范性/动态性方面去考量:

(全文完!)

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注