框架和产品
在实现特性标志(Feature Flags)时,有许多框架可以利用。最适合你的框架往往取决于你的编程语言和用例。有些框架更注重UI集成,有些则更关注发布和操作。在选择框架时,你应考虑以下几个方面:
-
性能:特性标志必须快速,并且不能降低应用程序的性能。应使用适当的缓存,并在无法及时访问数据存储时使用默认值。
-
支持的编程语言:你的解决方案应该能适配所有语言,特别是在使用客户端标志时,你也必须在服务器端进行评估,以确保安全性。你不想在不同位置配置标志。
-
UI集成:如果你想为用户提供选择是否启用特性的功能,你需要良好的UI集成。通常你需要两个标志:一个控制可见性,另一个用于启用或禁用特性。
-
上下文:当你想使用特性标志进行A/B测试和实验时,你需要大量的上下文信息来评估标志:例如用户、组成员身份、区域和服务器等。这是许多框架无法处理的地方。
-
集中管理:如果你为每个环境分别配置标志,管理起来几乎是不可能的。你需要一个集中管理的平台,在一个地方控制所有标志。
-
数据存储:有些框架将配置存储在应用程序数据库中,这在许多场景下是有问题的。通常,你在所有环境中都有不同的数据库,因此在各个环境中管理设置非常困难。
构建一个可扩展、高性能且成熟的特性标志解决方案需要大量的时间和精力,即使使用框架也是如此。但也有一些产品可以安装或作为服务使用。一个已经存在多年并且成熟的产品是 LaunchDarkly(https://launchdarkly.com/)。现在有很多竞争者,包括以下几种:
-
Switchover (https://switchover.io/)
-
VWO (https://vwo.com/)
-
Split (https://www.split.io/)
-
Flagship (https://www.flagship.io/)
-
Azure App Configuration (https://docs.microsoft.com/en-us/azure/azure-app-configuration/overview)
Unleash (https://www.getunleash.io/) 也是值得一提的。它有一个开源核心(https://github.com/Unleash/unleash),可以免费作为Docker容器自托管。Unleash也是GitLab使用的解决方案。
我没有找到一个很好的资源来对比这些解决方案,所以我在GitHub上创建了一个页面(https://wulfland.github.io/FeatureFlags/),提供了这些解决方案的独立比较。
在做“自建还是购买”决策时,大多数公司使用现有的服务或产品会更好。构建和运行一个好的特性标志解决方案是困难且耗时的,尤其是当你对特性标志不太熟悉时。可以先使用一个好的产品。如果过了一段时间后,你仍然觉得有必要构建自己的解决方案,至少你已经有了经验,知道一个解决方案应该具备哪些功能。