Feature flag,一个让软件发布轻松不掉发的神技

Feature flag,一个让软件发布轻松不掉发的神技
2020年04月02日 13:28 CSDN

作者 | Eugene

译者 | 香槟超新星,责编 | 夕颜

出品 | CSDN(ID:CSDNnews)

Feature flags 技术让软件发布轻松不掉发

我可以确定的一点是,所有曾经有过向客户发布软件经历的人都经历过这样的压力和焦虑:你祈祷着,希望在投入生产后一切都还会像测试时那样顺利。

如果你对这种情景感到很熟悉,那么我很高兴你能读到这篇文章,因为我将分享给你一种彻底消除这种痛苦的方法,而最棒的一点是这种方法并不复杂也不困难:它就是Feature Flags。

什么是Feature flag?

简而言之,可以把feature flag简单地视为一个包围你新功能代码的“if”语句。如果flag被设置为on,则执行新代码(即启用新功能),否则就不执行。真的就是这么简单!

问题是,一旦开始使用feature flag,你很快就会发现,你会希望能够以一种更加精细的方式来控制它们,而不仅仅是打开或关闭这么粗放。

如何上手使用feature flag?

基本上来讲,启动并运行feature flag的方法有三种:

创建你自己的feature flag管理解决方案

使用开源项目

使用提供feature flag即服务的第三方供应商

在这篇文章中,我将与你分享有关使用feature flag即服务的事情,以及如何让供应商把feature flag快速集成到你的开发流程中,并在同时得到你想要的那种对每个功能的精确控制。

今天我们要使用的feature flag即服务来自提供商Floodgate。Floodgate提供了开箱即用的feature flag解决方案,你很容易地就可以将其集成到代码中,软件发布中的风险立马就降低了。

是时候揭开面纱了!我叫Eugene,是Floodgate的创始人。话虽这么说,但我所提供的建议适用于上面说的任何一种实现方式。通常来说,使用feature flag都能够降低软件发行过程中的风险,益处多多。

准备阶段

我将演示一个非常简单的feature flag实施过程:我们将在一个名为Acme Online Store的电商网站上启动一个新的“推荐商品”组件。通常,当我们部署代码时,功能会立即上线,为所有客户所见。而现在,我们将添加一个feature flag来控制何人,以及何时能看到“推荐商品”组件。

我们首先需要注册Floodgate,然后获得一个免费账号。在Floodgate中,我们将需要创建一个“应用”(Application)以及一个“环境”(Environment)。你可以将这里的“应用”视为你的项目,将“环境”视为你的代码在开发周期中所经历的不同环境。环境不在本文讨论范围之内,现在我们先创建一个名为“ Acme Online Store”的新应用,并使用一个名为“生产”(Production)的环境。创建后,你就能看到你的新的应用和环境了。

我希望你能注意一下上面图上显示的这一长串随机字符,它叫做SDK密钥,这是你的环境的唯一标识符,待会你在应用中配置SDK时会用到它。

创建了应用和环境后,就可以开始创建用于控制新的“推荐商品”组件的feature flag了。创建一个新flag并命名为“推荐商品组件”,你可以保留默认创建的flag密钥(Flag Key)。

flag秘钥是flag的唯一标识,我们将在代码中用它来检查flag是on还是off。我们将flag类型(Flag Type)保留为布尔值,并将默认值设置为false。

太棒了,我们现在创建出了一个应用,一个环境,以及一个Flag。现在进入我们的项目,并将feature flag添加到我们的代码中吧。

我们需要下载并选择一个适用于我们所选语言的Floodgates SDK,这项操作是通过你的解决方案包管理器(例如NuGet,npm等)完成的。完成安装后,我们需要告诉SDK,从哪里能够获取feature flag数据。为此,我们需要设置在上图的环境界面上看到的Environment SDK Key。

下面是一个简单的代码片段,显示了我们代码中活跃状态的feature flag。

在上面的代码中,有两点需要注意:

我们正在创建一个用户对象,并在其中分配“ Plan”和“ CountryCode”等自定义属性。你可以为用户分配任意数量的属性。稍后在Floodgate界面中我们会用到它们。

你可以看到,feature flag语句没有什么特别的,它只是一个简单的“if”语句。第二个参数“false”称为默认值,它的意思是,在尝试评估flag时如果发生任何问题,都将返回该值。这样,你就始终都可以写出能涵盖所有可能情况的代码了。

在代码中添加feature flag是直接明了的。现在,让我们回到Floodgate,接下来就是见证奇迹的时刻了!

Feature flag如何降低软件发布中的风险?

我敢肯定,到现在你已经可以猜到了:当代码中有一个feature flag的时候,我们就可以在部署该代码的时候不显示(不发布)某个功能了。我们可以通过Floodgate界面打开或关闭“推荐商品”组件,而无需重新部署应用程序。

然而,即使我们现在可以轻松地打开或关闭“推荐商品”组件,我们仍然面临着很高的风险,因为它要么是打开的要么就是关闭的,对所有客户都一样。这仍然不是非常理想,因为如果有问题,那么这个问题就能影响到每一个人。

Feature flag解决方案最强大的功能之一就是能够同时为不同用户打开或关闭每一个flag(每一个功能)。我们可以使用“百分比推广”和“用户定位”两种方法中的一种,就能在Floodgate中实现这个目标。这就是使用现成解决方案的最大优势,因为你能马上就获得这些开箱即用的功能。

百分比推广

在Floodgate中,你能够以应用程序中用户的百分比为标志来设置不同的状态。在下面显示的这个例子中,我将“推荐商品”组件设置为:显示给10%的访问该网站的用户,而其他90%的用户看不到它。这就使得我可以轻松地用10%的随机用户群体来测试这个“推荐商品”组件。如果结果都像我预期的那样,那就可以慢慢增加能看到组件的用户百分比了。

通过这种做法,我可以逐渐看到我的应用程序对于新功能的反应是怎样的。如果检测到有任何问题,我都可以单击一下按钮就将其关闭。

用户定位

对于“谁将看到新的推荐商品组件”,我们可以使用用户定位来实现在这一点上的非常精细的控制。用户定位用到了我们一开始在代码示例中设置的属性,我们可以使用这些属性来控制何人,以及何时能够看到组件。

在下面的例子里,我通过CountryCode属性设置了仅针对英国客户显示“推荐商品”组件。

有了用户定位,您可以创建多个规则,从而可以根据需要定位非常特定的用户子集。只要你有相关的用户数据并根据这些数据设置出Floodgate用户属性,就可以用它来将特定的flag定位到这些用户了。

下面的示例展示了一个更复杂的定位策略,在其中,我可以选定是黄金或白银会员且来自英国或电子邮件地址以@ floodgate.io结尾的用户。

你可以将多个规则应用到单个目标上,也可以将多个目标添加到一个flag上。

总结

通过使用feature flags,你可以完全地掌控哪些人能看到你的新功能,哪些人看不到,以及何时可以看到,而无需重新部署代码。通过仅对一小部分或少量目标用户启用新功能这种方法,可以大大降低发布功能过程中的风险。

如果你的功能不能正常运行,那么起码你知道它只影响到了你客户中的一小部分而不是整个客户群体。如果发现该功能出现异常并无法按你的预期运行,就可以很容易地关闭该功能。

如你所见,一旦开始学会使用feature flag,你可能会首先意识到幕后要做的事情有很多。因此,投资使用诸如Floodgate之类的feature flag即服务解决方案会是个好主意,而不是把时间和精力花费到内部开发feature flag解决方案上。

就像你会把支付处理这样的复杂活动外包出去一样,把相同的理念扩展到开发和部署工具也十分合理——这样就能使你更专注于最重要的核心业务了。

原文链接:

https://hackernoon.com/how-to-release-your-software-without-losing-your-hair-feature-flags-technique-2b9r3y4m

本文为CSDN翻译文章,转载请注明出处。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部