【稳定性】秘密武器--功能开关技术

这篇具有很好参考价值的文章主要介绍了【稳定性】秘密武器--功能开关技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

继上篇【稳定性:关于缩短MTTR的探索】后,看到一些线上问题应急预案采用的是回滚方案,但是在大部分牵扯代码场景下,开关技术才是线上问题快速止血的最佳方式。比如履约平台组的Promise作为下单黄金链路,如遇线上问题的话,采用通用的回滚方式需要5-10+分钟(500+台机器)并且回滚如果操作不当会加重问题,而采用开关技术则是秒级。同时Promise在处理日常迭代需求和稳定性保障方面,功能开关技术同样发挥了重要的作用。针对改动范围大、影响面广的需求,我通常会问上线了最坏情况是什么?应急预案是什么?你带开关了吗?。当然开关也是有成本的,接下来本篇跟大家一起交流下高频发布支撑下的功能开关技术理论与实践结合的点点滴滴。

二、什么是功能开关?

功能开关其实就是一个轻量级的动态配置框架,它可以帮助您在代码中动态管理配置项(你可以理解可以动态干预代码逻辑走向)。通过使用功能开关,您可以根据需要为应用开启或关闭部分功能。这种方法通常适用于以下场景:设置黑白名单、降级业务功能、流量切量以及大促活动时的动态调整日志级别等。

从代码的角度来讲,每个开关的本质就是一个"if......else"条件语句块。



三、开关用途

对于高频率的发布上线来说,开关技术是一种合理的技术手段,被赋予了两种新的用途。

  1. 快速止血:一旦生产环境出了问题,直接找到对应功能的开关选项,将其设置为“关闭”。

  2. 隔离:即将功能代码隔离在线上执行路径之外,对用户不产生影响。

四、开关成本

使用开关技术也会带来成本。

  1. 首先,每个开关选项最少有两个状态,“开”和“闭”。当我们在发布之前对软件进行功能验证时,需要考虑每个开关在系统中的状态,有时候甚至要进行组合测试,开关的数量越多,可能就会产生越多组合测试的成本。

  2. 其次,并不是所有的开关代码都能以优雅的方式实现,给代码的编写和维护都带来了一定的复杂性,需要细心设计。

  3. 最后,开关在系统中存在的时间越长,维护它的成本就越高。比如Promise系统历史原因已经200多个开关了,没有及时清理现在不敢动。

五、开关管理

为了能够最大化利用开关带来的好处,并尽可能减少它带来的成本,应该对开关进行系统化的管理,并尽可能遵循以下原则。

  1. 在满足业务需求及稳定性的前提下,尽可能少用开关技术。开关本质上是if...else...的语句,它会带来程序的复杂性,尤其是代码设计混乱、代码模块职责不清晰时,更容易出错。

  2. 易于管理:软件团队应对开关配置进行统一管理,方便查找和查看状态。

  3. 开关策略标准化:开关策略是指开关的定义、命名以及如何配置。功能开关应该遵循统一的标准和规范,以便不同团队之间的协作和沟通更加顺畅。目前小组开关命名等也不规范,正在标准化路程中。

  4. 可扩展性:功能开关应该具有可扩展性,以便在需要时能够轻松地添加新的功能或修改现有的功能。这可以通过使用模块化的设计和开放的接口来实现。

  5. 在确保稳定性的前提下,尽量定期检查和清理不必要的开关项。Promise新功能开关逐步清理中。

6. 安全性:功能开关应该具有足够的安全措施,以确保只有授权的用户才能修改和配置开关状态。此外,功能开关还应该能够防止未经授权的访问和攻击。如DUCC权限管理及XBP审批管理。

总之,持续交付中使用功能开关技术的原则应该是灵活、可靠、安全、标准化、自动化、可追溯性和可扩展性的综合体现,以确保系统能够在不同的环境和需求下保持稳定和高效。

六、典型应用场景

开关可分为发布开关、运维开关、A/B实验开关、权限开关。具体应用场景如下:

功能发布更加灵活:这些开关允许该代码功能提前部署到生产环境中,但功能不生效。比如Promise系统在下单黄金链路属于下游,很多需求需要系统先上线,待上游都上线完成后再打开开关进行业务验证。如下图DUCC配置:

capactiySwitch.enable=true

黑白名单功能:黑白名单是常用的访问控制规则,通过功能开关可以快速实现黑白名单功能。比如Promise中的KA时效白名单开关。如下图DUCC配置:

kaPromiseSwitch.whiteList=010***,011***,012***

线上验证****:系统上线后,业务需要在生产环境中测试验证,由于生产环境中测试验证存在一定的风险,功能开关可以配置相关的验证参数组合(比如下单前根据用户pin、下单后订单号、仓库ID等),这样可以在生产环境中不影响其他用户体验的情况下去测试功能,可以更早地发现问题。如下图DUCC配置:

jitSwitch.storeId=1-1,1-2,1-3,1-4,****

运行时动态调整日志级别****:在应用运行时动态修改日志级别的功能。比如Promise在618&双11大促峰值期间对日志进行降级(只打印出入参及下游依赖的出入参),TP99从30ms降低到13ms,待大促峰值过后日志调整回来,方便排查。如下图DUCC配置:

log4j.logger=info

降级业务功能****:例如在大促到来的时候,可以通过开关将非核心的业务逻辑降级,减少一些非必要的资源消耗。或者依赖下游JSF问题,如业务有损可接受,也可进行开关降级,通过开关关闭则不调用下游JSF。如下图DUCC配置:

commonSwith.fence=true

切量验证****:重构新功能上线后,根据订单号或者pin百分比逐步切量进行线上验证。如下图DUCC配置:

commonSwith.percent=10

控制客户端行为能力****:对于APP来说,这种控制可能意味着客户端周期性地和服务器联系,例如多久同步一次和重试的频率、心跳时间等

七、开关实践

**7.1、**复用型开关

比如很多场景发送MQ,目前可通过复用开关来配置发送MQ是异步还是同步方式。而不是每个topic配置一个开关,把相同的场景统一设置为一个通用的开关。但需要注意通用开关的隔离性差,如果不进行配置校验验证则可能影响其他开关功能。

jmqUtil.asyncTopics=topic1,topic2,topic3,topic4,....

比如依赖下游JSF三方接口较多,设计一个复用型开关判断是否需要降级下游

**7.2、**特定时间生效开关

开关特性:开关可配置多个属性值,根据指定时间生效对应value

使用场景:比如仓库产能审批,之前业务是要求0点开关要生效对应版本,研发需要0点的时候配置,长期这样配置,研发效率低下,并且还需要按时按点对ducc开关进行修改。故设计为一个开关可提前配置好生效时间和生效的value值。比如下面是产能审批的ducc开关,effectiveTime代表生效日期,version代表对应生效版本。

[
  {
    "effectiveTime": "2023-03-09 12:00",
    "version": "76"
  },
  {
    "effectiveTime": "2023-04-20 12:00",
    "version": "77"
  },
  {
    "effectiveTime": "2023-05-14 00:00",
    "version": "78"
  }
]

八、总结

总的来说,功能开关可以帮助技术团队更有效地工作,同时还可以改善用户体验,降低发布新功能的风险。

参考:

持续交付2.0业务引领的DevOps精要

作者:京东物流 冯志文

来源:京东云开发者社区 自猿其说Tech 转载请注明来源文章来源地址https://www.toymoban.com/news/detail-710219.html

到了这里,关于【稳定性】秘密武器--功能开关技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3分钟了解Android中稳定性测试_手机稳定性测试,大厂软件测试高级多套面试专题整理集合

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新软件测试全套学习资料》

    2024年04月26日
    浏览(46)
  • 如何做好垂直域稳定性

      一个小小的故障就可能造成巨大的负面影响,因此稳定性工作复杂却又至关重要。本文将通过故障预防、修复、复盘来讲解该如何建设一个稳定性体系。   来到阿里后,我的工作内容一直都是商品中心的稳定性,这份工作对于我个人在技术和经验上的成长提升是无比巨大的

    2024年02月11日
    浏览(64)
  • 如何区分排序算法的稳定性

            排序算法的稳定性是指在排序过程中保持相等元素的相对顺序不变。简单来说,如果一个排序算法能够保证相等元素的顺序不发生改变,那么它就是稳定的。以下是几种常见的排序算法的稳定性判断方法: 1.冒泡排序:         冒泡排序是稳定的,因为在比较相

    2024年02月09日
    浏览(42)
  • 对单元测试的思考(稳定性建设)

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板) 单测是很常见的技术的名词,但背后的逻辑和原理你是否清楚,让我们一起review一下。 单测是单元测试,主要是 测试一个最小逻辑块 。比如一个函数、一个react、vue 组件。 这里有短

    2024年01月21日
    浏览(58)
  • 6.3 收敛性与稳定性

    数值计算方法的收敛性是指,当取步长趋近于零时,数值解趋近于精确解的速度。一般来说,数值计算方法的收敛性是判断其优劣的重要指标之一。 数值计算方法的收敛性可以通过数学分析来研究,一般需要对数值解和精确解之间的误差进行估计,以得到其误差的渐进界,从

    2023年04月23日
    浏览(56)
  • 主动发现系统稳定性缺陷:混沌工程

    这是一篇较为详细的混沌工程调研报告,包含了背景,现状,京东混沌工程实践,希望帮助大家更好的了解到混沌工程技术,通过混沌工程实验,更好的为系统保驾护航。 Netflix公司最早系统化地提出了混沌工程的概念。2008年8月,Netflix公司由于数据库发生故障,导致了三天

    2024年02月08日
    浏览(86)
  • 使用monkey工具进行稳定性测试

    首先了解monkey是什么         monkey是Android系统自带一个命令行工具,可以运行在模拟器里或者真实设备中运行。monkey向系统发送伪随机的用户事件流,从而实现对正在开发的应用程序进行压力测试。 monkey包括很多选项,大致分为四大类: 1.基本配置选项,如设置尝试的事

    2024年01月25日
    浏览(70)
  • 数学建模之稳定性模型详解

    码字总结不易,老铁们来个三连: 点赞、关注、评论 作者:[左手の明天]   原创不易,转载请联系作者并注明出处 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 对象仍是动态过程,而建模目的是研究时间充分长以后过程的

    2024年02月05日
    浏览(51)
  • 灵魂三问之稳定性摸排

    前言 在之前写了篇文章《上线十年,81万行Java代码的老系统如何重构》,在文章后有同学留言问“ 这么复杂的改动,质量是如何应对的 ”,是一个特别好的问题,当时只是从现有的一些监控、测试、卡口手段上进行了回答。但在回答过程当中就在思考一个问题,交接过来的

    2024年02月08日
    浏览(49)
  • 百度SEO优化不稳定的原因分析(提升网站排名的稳定性)

    百度SEO优化不稳定介绍蘑菇号-www.mooogu.cn SEO不稳定是指网站在搜索引擎中的排名不稳定,随着时间的推移会发生变化。这种情况可能会出现在网站页面结构、内容质量、外链质量等方面存在缺陷或不合理之处。因此,优化SEO非常重要,可以提高网站的稳定性和排名。掌上帮教

    2024年02月07日
    浏览(127)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包