Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc
plugin
.gitignore
README.md

README.md

feature-flag

Feature-Flag简介

Feature flag 是一个可以通过配置来控制是否打开页面某一功能,而不用重新发布代码的系统。
可以做到按照任意的需求、条件决定页面的某一功能是否展现。

如果你还不了解Feature-flag,参考这里facebook的branching系统。 整个系统分为框架和平台两部分: 框架主要负责利用配置文件运行时决定页面的某一功能是否展现。框架采用Smarty插件开发,仅支持Smarty模板。 平台主要负责通过可视化的配置界面控制feature配置文件,并自动发布上线。

使用场景

Feature-flag可以很轻松的满足以下场景需求:

  • 页面功能小流量发布控制
  • 专题页面定时上下线
  • 不同城市展现不同的页面内容
  • 新功能快速回滚
  • 页面功能按照IP展现
  • 主干开发模式,控制为开发完成功能

feature-flag解决的问题

功能快速发布

对于传统的分支开发模式,当我们需要上线或者下线页面某一功能时,通常是建立新的分支,添加或者注释掉多余的代码,然后提测、合并分支,最后上线。 即使我们只需要修改注释一两行代码也是如此的麻烦,对于上线较多的产品线,可以说上线流程就占据了很大一部分工作时间。 使用feature-flag系统只需要在平台简单的配置true、false就可以了。

主干开发的利器

诸如facebook、google等很多国外的公司都在利用类似的技术达到主干开发的效果。 关于主干开发和分支开发可以看这里,业界也有很多这方面的讨论,这里就不详细描述了,可以参考这里

框架使用

安装

  • 执行命令 lights install feature-plugin 没有使用过lights的童鞋,参考这里
  • 将feature-plugin中的插件部署到Smarty plugin目录

使用

框架的使用首先需要针对需求定义feature类型(按时间、按地点等控制),然后在页面功能需求调用配置文件中定义的feature。

定义feature

  • smarty config目录添加配置文件 : common-features.json

      common为features的命名空间,在features调用是会使用,如果使用Fis(http://fis.baidu.com/)建议同模块名相同
    
  • 配置文件中定义feature : 格式如下

{
    "features" : {
        "featureA" : {
            "type" : "switch",
            "value" : "on",
            "desc" : "test switch feature work or not"
        }
    }
}
featureA : 具体的feature的名字
type : 该feature的类型,系统提供了几种默认的feature类型
value : 该feature的取值,具体格式请参考feature类型描述文档
desc : 该feature功能的文字描述,类似于代码的注释,方便以后feature的维护

调用feature

  • 页面中使用feature

      写法一 :
      {%feature name="common:featureA"%}
          html code for featureA
      {%/feature%}
    
      写法二 :
      {%feature name="common:featureA"%}
          html code for featureA
      {%featureelse%}
          html code if featureA not work
      {%/feature%}
    

高级使用

系统设计

Feature-flag系统设计

You can’t perform that action at this time.