Skip to content

zzq0324/feature-flag

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Feature Flag

1、为什么需要Feature Flag

Feature Flag(又名 Feature Toggle、Flip等)是一种允许控制线上功能开启或者关闭的方式,通常会采取配置文件的方式来控制。

引入Feature Flag有以下优势:

  • 增强持续部署的信心;
  • A/B testing 支持;
  • 特性开放范围控制,有效验证线上新特性功能,针对特定人群发布功能尽早获得反馈,减少线上问题影响范围;
  • 可作为限流、降级之外有效的应急预案;
  • 能线上开启或者关闭,实现快速回滚。

2、Feature Flag技术实现

2.1 框架设计图

框架设计图

2.2 灰度算法

详见Feature Flag灰度算法

2.3 灰度判断逻辑

灰度判断逻辑

3、使用说明

对于接入方,需要完成Apollo、代码接入2个步骤才能最终用上Feature Flag。具体如下:

3.1 Apollo配置

一个完整的Feature Flag配置如下:

# 灰度开关描述
flags.enable-open-search.desc=控制是否开启开放搜索
# 灰度开始时间,留空默认不限制开始时间
flags.enable-open-search.startTime=2021-06-12 01:02:03
# 灰度结束时间,留空默认不限制开始时间
flags.enable-open-search.endTime=
# 灰度白名单,允许为空
flags.enable-open-search.whiteList=u1,u2,u3
# 灰度黑名单,允许为空
flags.enable-open-search.blackList=
# 灰度比例
flags.enable-open-search.launchPercent=95

3.2 项目引入

3.2.1 pom.xml引入依赖

<dependency>
    <groupId>cn.zzq0324</groupId>
    <artifactId>feature-flag</artifactId>
    <version>1.0.2</version>
</dependency>

3.2.2 代码调用

  • 场景一:同个业务id严格控制每次执行结果一致

    FeatureFlagHelper.isFeatureOn("$flagName", "$bizId");
  • 场景二:控制流量整体趋势符合灰度比例,同个业务id执行结果不要求强一致

    FeatureFlagHelper.isFeatureOn("$flagName");

4、命名规范和管理流程

4.1 命名规范

flag名称尽量以enable-开头,例如enable-open-search

4.2 Feature Flag声明周期

Feature Flag声明周期

5、参考资料