Mat*_*caj 87

"功能标记"(或功能切换)可以轻松打开/关闭应用程序的功能(子部分):

  • 也许是通过重新部署,或
  • 一些内部页面,可以实时切换页面/功能.

我想有一个例子,如果你需要,比如在负载太高的情况下减少数据库查询,那么让控件减少功能集是很方便的.

还有很多其他原因你想要使用这个 - 其中一个主要是启用持续交付:推动生产/生活,但功能被禁用/切换,直到它完成.我们经常使用我们称之为'dev cookie'的方式向开发团队展示未完成的功能.通过这种方式,我们可以测试部分完成的生产工作(哦,是否有更好的集成?)在多次发布/部署之前我们"解开"(完成)它并且它对公众可见.

这是一个简单的包,可以帮助您在ASP.NET MVC中执行此操作:https://github.com/cottsak/DevCookie(完全披露:我是作者)

福勒还有一篇比上面链接的文章更详细的文章.

这篇文章(也在Fowler的网站上)解释了各种类型的切换策略.DevCookie支持基于主线/主干的策略,在文章中称为" Release Toggle ".

Adil的回答强调,为什么你可能想要一些这样的基础设施有很多术语和原因.请记住,您可能只需要其中一些东西.例如,我可能只想启用简单,灵活的部署/交付工作流程,因此简单的基础架构就足够了.如果您选择要进行完整的#leanstartup实验,使用A/B,群组测试和控制推出之类的事情,您应该考虑使用分析工具(例如Heap)来促进这些数据驱动的开发方法作为独特的解决方案.执行上述所有操作的切换基础设施将导致膨胀和不必要的复杂性.

  • 通常你会发现这样的东西看起来很明显.事实证明,有人总是想出一个名字. (5认同)

Max*_*ler 24

功能标志是一种通过配置关闭应用程序某些功能而无需部署新代码的技术.

功能标志在CI方案中起着关键作用,其中功能不断被部署但不一定"释放"到生产中.

更多信息:

- 编辑:

功能标志java实现.

  • 这在"持续部署"中有详细描述,几乎是"主线"开发的要求.不是在SCM中为功能分支,而是打开或关闭功能,允许您发布具有尚未启用的功能的代码. (3认同)

小智 15

功能标志,功能切换,实验和受控推出是一个简单而强大的概念的同义词:从功能推出中单独部署代码.简而言之,它是能够将您的功能提交到生产中,同时选择您的客户中的哪些人 - 如果有人 - 可以看到该功能.

它们部分由Facebook的Gatekeeper推广.LinkedIn的LiX是另一个很好的例子.

拥抱这个简单的想法为许多最佳实践奠定了基础,包括:

持续部署/交付 - 多个代码在一天内推向生产.

中继线/主线开发 - 应仅为拉取请求创建功能分支,而不是为长期功能开发创建功能分支.

没有更多的释放火车让事情陷入困境.

生产中的QA/Perf测试 - 真正的质量保证和性能测试是针对具有生产流量的生产基础设施.不要浪费时间建立广泛的性能实验室和临时环境.

实验 - 了解新功能如何在您的KPI上移动针.

出现问题时避免修补程序或代码回滚 - 修补程序和代码回滚都很紧张,需要很长时间,并导致更多问题超出必要的范围.而是关闭该功能或将其降低.

其他人提到了开源库.完整解决方案的一个很好的例子 - 比如Gatekeeper和LiX--是Split.我在斯普利特工作.


Mic*_*tta 8

功能标记(也称为功能翻转或功能切换)是一种开关,可根据需要启用或禁用可能昂贵的功能(例如,当网站受到意外流量的攻击时).这会给你买一点时间,直到你扩大规模,或者直到负载峰值消失为止.

以下是SWIG文档中的示例.

  • 这是功能标志的一种用法,是的,但要理解的一个重要概念是它们将功能发布和代码部署分离,以便您可以随时发布功能,而不是每当代码发布时.它是持续集成的基石. (5认同)

Ere*_*sky 8

这里有很多很棒的答案,所有这些都是在Martin Fowler帖子中推广的重要基本定义:

它们是"允许团队在不改变代码的情况下修改系统行为"的代码.

所以我们历史上认为它们是伪代码所代表的:

if(app_settings["beta-mode"] == "true")
  showAwesomeNewGui();
else
  sameOldSnoozeFeset();
Run Code Online (Sandbox Code Playgroud)

这是一种完全准确的思考方式,Matt和Adil都很好地扩展了功能标志的各种战术用例.

但我想提供一个修订的定义,反映现实在六年内的演变以及自dotnetdev提出原始问题以来的变化.我为Rollout.io工作,是一个功能标志平台,所以我有一个前排座位来进行这种演变.

简而言之,功能标志不再仅仅是一种在应用程序中打开和关闭功能的方法.这就像回答"什么是发票行项目",说"这是一个描述和一定数量的货币".没错,但它不会在发票本身的更广泛的位置上推动.

功能标志是现代软件中总体战略解决方案的战术位.当您有更多信息时,它们是您将代码中的重要决策逻辑推迟到运行时的方法.而且,也许最重要的是,它们不再只是孤立地发生,只需检查版本号是否大于2.7; 使用它们的组织通常将它们作为全面的系统范围产品方法的一部分.

正如其他人所提到的,Facebook和LinkedIn率先推出了这一点,但在2018年,很多组织都在这样做.他们将运行时的决策逻辑问题推迟作为开发战略,运营战略(或DevOps战略,如果您需要)和产品战略的一部分.以下是此类问题的示例.

  • 谁应该看到我们推出的新管理界面,何时推出?
  • 解锁这个复活节彩蛋需要多少级别的会员资格?
  • 我们什么时候应该切换到新的数据库?
  • 我们是否应该在结帐按钮上放置猎豹或老鹰的图片以增强转换?

要让应用程序在运行时推迟大量此类决策,您不能以临时方式将功能标记放入应用程序中,否则您将陷入技术债务之中.如今,您需要拥有全面的功能标记管理策略,其中包括一些不同的组件.

  • 切换点用于切换新功能的行为.
  • 多个切换点组合在一起形成切换路由器.切换路由器确定要素的状态.
  • 切换上下文为切换路由器提供必要的上下文信息(例如,特定用户).
  • 切换配置提供切换路由器有关环境的信息.

那么,最后,什么是功能标志?

嗯,它们是更广泛战略的重要组成部分,使应用程序能够适应技术和市场需求.


mon*_*mon 5

在我公司,我们曾经为此拥有自己的解决方案。我们创建了一项服务,.json为每个应用程序提供可下载的config()文件。在该配置中,我们存储了功能的标志。根据该配置,该应用可以显示或隐藏当前功能。(例如,在边栏上显示或隐藏菜单项)。

我们还创建了一个内部管理页面,可以在其中配置功能标记。一段时间以来,它的效果相当好,但之后我们希望进行用户定位和A / B测试。自行开发似乎太费力了,所以我们选择了第三方解决方案。正如这里已经提到的,有很多解决方案。

我们选择ConfigCat是因为它一次支持自定义目标组和基于百分比的部署。您可以在github上检查受支持的开源sdks 。