翻译自https://launchdarkly.com/the-definitive-guide-to-feature-management/operate/

什么是运营(Operate)?

运营,作为特性管理四大支柱中的第二大支柱,涵盖了使用特性标志来改善你的应用程序的运营健康状况的用例。它涉及将特性标志作为你运营的关键部分。随着部署速度和基础设施复杂性的提高,对运营保障的需求也在增加。特性管理就是这种保障。

通过特性管理平台使用特性标志的团队降低了风险,并确保客户对他们的服务保持满意。他们大大减少了严重事件的发生。例如,正如之前引用的,Honeycomb的“变更失败率”仅为0.1% ,这一成就只有世界上最精英的软件团队才能共享。该公司将其极低的失败率归功于使用LaunchDarkly。

但即使依赖特性管理的团队确实面临事件,他们的恢复速度也比以往快得多。例如,你可能还记得,Atlassian在使用LaunchDarkly后将其平均恢复服务时间 (MTTR)提高了97%

在运营中,团队更有能力满足他们的服务水平目标(SLOs),并提供客户期望的100%正常运行时间。运营支柱的主要用例包括:

  • 杀伤开关和断路器
  • 动态配置
  • 服务指标(反应性监控)
  • 安全迁移

对于所有DevOps工程师、网站可靠性工程师(SREs)、软件架构师和其他运维专业人员,如果你们觉得自己被排除在特性标志讨论之外,这一支柱就是为你们准备的。

运营的目标是什么?

运营的主要目标是通过特性标志改善你的应用程序和基础设施的运营健康状况。运营帮助软件团队保持高系统稳定性、可靠性和可用性,从而使开发者有信心更快地发布代码。

杀伤开关和断路器

特性标志可以用作杀伤开关和断路器。两者都允许你立即禁用应用程序中损坏的部分。它们的区别在于它们在代码中的持续时间。杀伤开关通常被认为是临时或短期的特性标志。这是你在产品发布时使用的东西。另一方面,断路器是一个更永久、长期的标志。

杀伤开关的例子

假设你发布了一个计算密集型功能,它导致了延迟问题。如果你为这个功能附加了一个杀伤开关,那么一旦你检测到问题,就可以立即关闭它。一个人切换一个特性标志——就这样。与多个人跨多个团队争先恐后地更改配置文件、为所有用户重新启动应用程序、执行热修复、执行繁琐的回滚等痛苦相比。

杀伤开关给团队带来了更频繁发布的信心。因为他们知道如果出了问题,他们可以点击一个按钮,问题就解决了。

一旦你向所有预期的用户发布了一个功能,并且对其性能有信心,我们建议移除该功能的杀伤开关。否则,技术债务将开始累积。

杀伤开关给团队带来了更频繁发布的信心。如果出了问题,他们可以点击一个按钮,问题就解决了。

断路器的例子

你将特性标志作为断路器或控制点插入到你的代码中,你怀疑错误可能发生的地方。你预测的事件可能今天不会发生,明天可能不会发生,可能永远不会发生。但如果它确实发生了,它可能会引发一系列不良结果。

例如,微服务架构通常依赖各种第三方服务。如果这些服务之一宕机,它可能会对你的系统造成严重破坏,因此影响你的用户体验。但如果你对每个第三方服务附加断路器(特性标志),你可以在服务出现故障时迅速禁用该服务。这样,你可以将可能的灾难减少到道路上的一个适度的颠簸。

杀伤开关和断路器为你的应用程序提供了更多的控制权。它们在使团队能够安全快速地移动中发挥了重要作用。更重要的是,它们跨越了特性管理的所有四大支柱,并出现在运营的其他所有用例中。

例如,当我们谈论使用杀伤开关和断路器时,我们正在描述动态配置

动态配置

特性标志允许你实时更改配置。这意味着你可以在不部署新代码的情况下更改应用程序的行为,从而避免应用程序重新启动。如果你在代码中策略性地放置了特性标志,那么你可以实时控制你的功能。动态配置对于API速率限制、负载卸载和调整日志级别等事情非常有用。

特性标志允许你在不部署新代码的情况下实时更改应用程序的行为。

当你的API受到攻击时的API速率限制

通常,当你的API受到节流时,比如说,受到DDoS攻击,为了阻止违规域名,你必须更改配置,然后重新部署你的应用程序。与此同时,不良行为者继续猛烈攻击你的API,扰乱你的服务。

但如果你对速率限制规则分配了一个多变量特性标志 ,你可以在攻击期间立即并自动调整你的速率限制。一旦域名足够多次击中你的API,它将触发你的断路器以拒绝不良行为者的访问。同样,在这种情况下,特性管理使你能够为所有客户维护系统的可用性。

你还可以使用动态配置进行更愉快的速率限制目的。

基于客户层级的API速率限制

你还可以使用多变量标志和目标规则 为不同的客户层级提供不同的速率限制。例如,你可能为高级客户提供每分钟600个请求,为标准客户提供60个,为免费版本用户提供5个。任何时候有人注册,比如说,高级订阅,相关的功能标志将自动设置适当的速率限制。在这种情况下,特性标志显著提高了你的运营效率。我们知道这是真的,因为这就是我们在LaunchDarkly中管理API速率限制的方式。

同样值得注意的是,这个特定的速率限制示例符合授权支柱,因为它使用特性标志进行权限

实时调整日志级别

你还可以使用长期运营标志动态配置服务器日志的模式。例如,如果你的可观察性工具显示错误数量激增,你创建的多变量标志将自动并实时地将日志级别从WARNING更改为DEBUG。这有助于你更快地找到并解决问题。它还使你能够更好地管理你的服务器日志。毕竟,你不希望你的应用程序生成冗长的日志超过必要的时间。

我们在运营支柱中描述的所有内容都可以通过像LaunchDarkly这样的集中式特性管理平台 更容易地完成。例如,LaunchDarkly与几个[可观察性和应用程序性能监控(APM](https://xn–(apm-kg1go6a888akhfjby22ada668hkl1dc4e62n431ag86a/))解决方案集成,如AppDynamics、Datadog、Dynatrace、Honeycomb、New Relic和SignalFX。这些集成帮助你测量每个功能对关键服务指标如响应时间和错误率的影响。

服务指标(反应性监控)

当你将特性管理平台与你的可观察性和APM工具配对时,它允许你更快地检测事件并实时做出反应。

使用特性标志找到事件的原因

想象你看到错误率激增。这个指标事件将触发LaunchDarkly将特性标志事件数据发送到你的可观察性和监控工具。根据你使用的工具,你将看到这些事件与性能图表一起显示。这反过来帮助你快速确定最近的哪个功能发布(如果有的话)损害了你的服务。通过这种方式,特性管理帮助你迅速确定事件的根本原因。

这就是为什么LaunchDarkly客户能够持续降低他们的MTTR的一半原因。另一个原因是,一旦他们找到问题的根源,他们可以立即用杀伤开关修复它。

将特性管理平台与你的可观察性和APM工具配对,可以让你更快地检测事件并实时做出反应。

考虑另一个例子。

负载卸载

你还可以使用特性标志进行“负载卸载”。想象你的网站响应时间超过了某个阈值。也许不寻常数量的用户访问了你的网站。让我们进一步假设你已经将你的可观察性和监控工具与LaunchDarkly集成。最后,假设你创建了一个长期特性标志,当切换关闭时立即禁用非必要的服务。

当指标事件发生时,LaunchDarkly将被提醒到问题,并自动将你的网站置于降级或减少服务模式。虽然这不是理想的,但它确实允许你避免网站崩溃的灾难。你在调试和故障排除时保持服务运行。你可以通过LaunchDarkly中的Flag Triggers 启用这些自动特性标志更改。

最终,跟踪关键服务指标与特性标志事件一起提高了你的服务的整体稳定性、可靠性和可用性。

安全迁移

特性管理——以及推动它的功能标志——还使运维团队能够执行更安全的基础设施迁移。

微服务迁移

在采用微服务架构时,可能会出现许多不可预见的问题。但如果在迁移的每个阶段都使用杀伤开关,你可以在有缺陷的服务开始出现问题时立即关闭它。这本身就消除了系统迁移中的大部分风险。它还减少了你违约SLOs的可能性。

当迁移到一个新的数据库时,你可以使用特性标志来逐步推出新系统。例如,在迁移开始时,你可以将100%的“读取”和“写入”事件路由到旧数据库,同时复制10%的写入事件,然后将它们推送到新数据库。当你监控性能并发现你的系统保持稳定后,你可以进入推出计划的下一阶段,直到100%的事件都被引导到新系统。

在这种情况下,你将执行一个有针对性的百分比部署。但你不是逐步向客户推出新功能,而是将数据路由到数据库。如果在迁移的任何部分你的应用程序性能受到影响,你可以使用杀伤开关停止推出。

这种方法是安全和可控的。实际上,我们在LaunchDarkly切换数据库时 正是遵循了这一过程。

云迁移

将基础设施从本地数据中心迁移到云基础设施即服务(IaaS)平台是一项压力重重的任务。但特性标志为项目带来了便利、安全性和可预测性。例如,TrueCar在LaunchDarkly的帮助下将500个网站迁移到了亚马逊网络服务(AWS)云。

与数据库示例一样,TrueCar使用特性标志和目标规则来控制其传统系统和云系统之间的网络流量流动。当明确安全时,团队会逐渐增加流向云的流量。他们还使用LaunchDarkly按请求类型路由网络流量。例如,对“新车”的网络搜索可能与云数据库相关联,而对“二手车”的搜索则与遗留系统绑定。

特性标志简化了这些复杂的路由规则。此外,LaunchDarkly简单清晰的用户界面使得管理庞大的网络流量流动变得容易。最终,TrueCar完成了其云迁移,由于基础设施问题导致的停机时间为零。

https://images.prismic.io/launchdarkly/a5e885d2-0641-4457-bfe1-8b9f9d879faf_truecar.svg?auto=compress,format

“商业用户和应用软件工程师使用LaunchDarkly的A/B测试框架来管理整个基础设施的流量流动。出于这个和许多其他原因,TrueCar的AWS迁移是我管理过的最顺利、最不引人注目的迁移之一。”

Regis Wilson

SRE

Regis Wilson在他的一篇博客文章 中详细介绍了他使用LaunchDarkly进行云迁移的经历。你还可以阅读完整的TrueCar案例研究 。最后,你可以在我们的LaunchDarkly指南 中学习基础设施迁移的最佳实践。

特性管理为你提供了比以往更多的对基础设施变化的控制权。它几乎消除了过程中的风险。

总结:运营的好处

当软件团队参与特性管理的运营支柱的核心实践时,他们消除了运营中的风险。特别是那些将LaunchDarkly与其监控和可观察性栈结合使用的团队。这样的团队实现了更大的系统稳定性,即使开发者更频繁地交付。事实上,特性管理的保障措施使这种速度的提高成为可能。

在运营中,团队经历的系统故障更少;当故障确实发生时,它们的恢复速度更快——通常在几分钟内,如果不是几秒钟的话。最后,运营的拥护者保持了客户忠诚度和信任。这很难用价格来衡量。