Feature flags可以让软件开发更加的安全、迭代更加迅速,而且可以更加灵活的控制软件产品。Feature flags将功能迭代从代码部署中分离出来,从而可以使产品团队(开发团队、管理团队、SRE等)在版本控制之外更加精细地控制谁、什么时候可以使用什么功能。
Feature flags是一种软件开发方法,开发者将新的功能封装在带有标志位的if/else
语句中,从而使得产品团队可以在版本之外通过设置标志位来控制哪些功能可以被用户使用。标志位的开关独立于软件部署,所以即使产品环境部署同样一份代码,也可以通过设置标志位来打开/关闭某种功能。因此,支持Feature flags也是持续交付(Continous delivery)的重要一环,它可以让版本发布更加迅速、更加可靠。
if (flags.kms) {
/* with KMS feature */
} else {
/* without KMS feature */
}
蓝绿部署是一种比较成熟的用于降低风险的升级系统的方法。升级时维护两套系统,蓝系统和绿系统,分别为运行中的版本和新的版本。可以在系统升级的时候,通过负载均衡器将用户流量从旧版本系统导入到新版本的系统。蓝绿部署一方面可以缩短甚至消除升级的宕机时间,新版本部署的时候旧的系统仍在运行。另一方面可以降低风险,一旦新版本有问题,可以很容易地将用户流量切回到旧的版本。
在蓝绿部署中可以引入feature flags,新的版本可以将新的功能通过feature flags关闭,然后再逐一打开。蓝绿升级要么使用新的版本的所有功能,要么使用旧的版本。feature flags 则弥补了这个不足。