符号标志位.进位标志位
在上一篇文章中, 部署新版本:功能标记或功能? ,我介绍了功能标记和基于环的部署,它们都是DevOps逐步公开实践的推动力。
渐进式曝光使我们能够减轻更改发生时的影响,执行迭代实验,评估功能并就每项更改(在生产中)获得快速反馈。 例如,功能标记使您可以执行短暂的实验,隔离未完成的工作,微调连续发布的版本以及动态管理长期存在的操作配置和权限。
您可能会问,“有什么收获?”
对于基于环的部署 ,您的主要成本是要以“生产优先”的心态管理环所覆盖的生产环境。 您需要最小化每个发行版的“爆炸半径”,监视每个发行版,并快速缓解根本问题。 对于功能部件标记 ,您需要管理功能部件标记产品,管理技术债务,并深入了解简单地“翻转标记”的含义。
让我们探究功能标记的一些成本。
产品投资和运营成本
您需要研究并找到适合您的环境的正确功能标记解决方案。 一些重要的考虑因素包括与您的DevOps流程和产品的无缝集成,对标记的简单且经济高效的管理,执行紧急回滚的能力以及对审核,微调权限和安全性的支持。 例如,如果您要管理特定用户的功能标志,则可能会捕获个人信息并进入新的《 全球数据保护条例》(GDPR)的领域 。
不要构建自己的自定义功能标记解决方案。 有足够的可用选项,例如FeatureToggle , NFeature , FeatureSwitcher , togglz和ff4j框架,以及软件即服务(SaaS),例如LaunchDarkly 。 使用后者,您可以将维护,更新和基础架构委派给SaaS提供商,以便您可以专注于产品功能并为客户提供价值。
技术债务
借助功能标志,我们将产品分解为可以分别发布的独立部分,从而使我们的功能团队和业务控制权可以确定谁获得了哪些功能以及何时获得。 通过分解产品,您增加了一定程度的复杂性,需要进行维护才能避免过时的标志和相关的代码。
例如,当我们添加一个简单的ON | OFF功能标志来隔离功能时,我们将添加if-else代码构造, 并将代码和测试路径加倍 ,如下所示。 如果是实验性功能标记,则其使用寿命通常为数周,然后需要将其移除以避免技术负担。 对于其他功能标志,使用寿命可能会更长; 但是,同样的原则适用:不需要功能标记和关联的代码后,立即删除它们。
![feature-flag-1.png feature-flag-1.png](https://i-blog.csdnimg.cn/blog_migrate/0903a840c824256a7f45b5539398d32a.png)
当添加多值OFF | 1 | 2特征标记时,我们将特征代码乘以并测试路径。 添加两个功能标志后,我们将维护两个功能,并具有五个代码和测试路径。 每条路径都需要进行每次更改的验证和测试,因为我们无法保证何时切换功能标志。
![feature-flag-2.png feature-flag-2.png](https://i-blog.csdnimg.cn/blog_migrate/8d3b107aae8c3f3ae210152b4968bf93.png)
但是还有更多:让我们为新功能添加另一个简单的ON | OFF功能标志,我们希望收集该遥测功能来检查假设。 它再次将功能代码和测试路径加倍 ,将需要验证的路径增加到七个。 更重要的是,它引入了对第二个功能特定版本的依赖。 我们是否等待依赖项被启用? 我们是否依赖孤立的且可能不完整的功能? 谁能确保不会无意间切换功能标志来满足依赖关系? 重大问题,需要在流程转换过程中回答这些问题,以鼓励灵活的计划,迭代实验和紧密的团队协作,并促进对这些挑战的实时所有权和管理。
![feature-flag-3.png feature-flag-3.png](https://i-blog.csdnimg.cn/blog_migrate/df11879e242c440a4cfb8804f71a88e6.png)
想象一个具有数百个功能标记的产品。 您如何识别陈旧的功能标志以及相关的代码和测试路径,从而增加我们的技术债务(成本)? 您如何说服功能团队从功能齐全的产品中更改和删除代码? 功能团队需要拥有从日出(理想)到日落(不赞成使用)的功能,使用通用的工程流程,并应用一致的代码和命名约定。 识别和删除陈旧的功能标志和代码必须很简单。
让我们快速浏览一下Roll-up Board扩展的摘录,该摘录显示了用于检查activateFF值的功能标志的ON和OFF代码路径。
![feature-flag-code.png feature-flag-code.png](https://i-blog.csdnimg.cn/blog_migrate/c1e354b6186a74c8bf73b72aff07d9f6.png)
在功能标志管理系统中,功能具有友好的显示名称Display Logs和display-logs标志。
![feature-flag-admin.png feature-flag-admin.png](https://i-blog.csdnimg.cn/blog_migrate/8fea670258e8dcbfeddf7bcd5e6eba4d.png)
乍一看, activateFF和显示日志之间的关系并不明显。 作为工程师,我不愿意对代码进行更改,而无需进一步调查(成本)。
了解翻转标志的含义
您还需要考虑一项更重要的成本。 翻转功能标志很简单-变更会在整个生产过程中Swift引起涟漪,您的用户会兴奋地开始使用您的新功能。 您对刚刚启用的功能感到满意,但是您有信心了解翻转标志的所有副作用吗?
我们经常分享以下两种经验,这些经验表明即使采用最佳流程,我们也可能遇到糟糕的日子,导致糟糕的客户体验。
艰难的修补程序 —在公司副总裁Brian Harry登台的大型营销活动中,团队翻转了功能标记。 如博客文章中所述,进展不顺利。 该产品遇到意外的身份验证失败,并最终在负载下弯曲。
我们如何了解503崩溃 -团队在其最受欢迎的扩展之一中启用了功能标记。 用户遇到503错误,接着是严重的性能问题,最终Azure功能处理功能标志在负载下失败。
在这两种情况下,都存在“负载下的故障”。 在金丝雀或早期采用者环境中翻转功能标志并模拟几天的预期负载非常重要,然后再为所有用户翻转功能标志。 对于具有第一印象的大型营销活动尤其如此。
扎实的工程流程和实时遥测技术使我们能够及时发现问题,确定根本原因并减轻影响。
![feature-flag-503.png feature-flag-503.png](https://i-blog.csdnimg.cn/blog_migrate/fc7fe17c6523d881c67925197422fd61.png)
DevOps是一个不断学习和改进的旅程,其目标是您永远无法到达的!
重要的是要从这些错误中学习,探索潜在的含义,拥有用户的同理心,并且要对问题,根本原因以及像我们这样的糟糕日子的解决保持透明。 有见识的用户通常更宽容并支持您不断的学习和创新旅程。
一旦意识到并管理了风险和成本,您的功能团队将能够使用基于环的部署逐步公开发布版本,并使用功能标记对其进行微调。
喜欢观察您动力十足的功能团队,更重要的是,您的满意的客户!
参考资料
- 粗糙的补丁
- Jez Humble的连续交付
- Martin Fowler的功能切换
- 我们如何检查和修复Azure函数中的503错误和性能问题
- 将65,000名工程师迁移到DevOps
- 使用功能标志对应用程序的功能进行阶段操作
- 通过环逐步部署您的应用程序
接下来要读什么
翻译自: https://opensource.com/article/18/7/does-progressive-exposure-really-come-cost
符号标志位.进位标志位