【稳定性】秘密武器--功能开关技术 | 京东物流技术团队
一、背景
继上篇【稳定性:关于缩短MTTR的探索】后,看到一些线上问题应急预案采用的是回滚方案,但是在大部分牵扯代码场景下,开关技术才是线上问题快速止血的最佳方式。比如履约平台组的Promise作为下单黄金链路,如遇线上问题的话,采用通用的回滚方式需要5-10+分钟(500+台机器)并且回滚如果操作不当会加重问题,而采用开关技术则是秒级。同时Promise在处理日常迭代需求和稳定性保障方面,功能开关技术同样发挥了重要的作用。针对改动范围大、影响面广的需求,我通常会问上线了最坏情况是什么?应急预案是什么?你带开关了吗?。当然开关也是有成本的,接下来本篇跟大家一起交流下高频发布支撑下的功能开关技术理论与实践结合的点点滴滴。
二、什么是功能开关?
功能开关其实就是一个轻量级的动态配置框架,它可以帮助您在代码中动态管理配置项(你可以理解可以动态干预代码逻辑走向)。通过使用功能开关,您可以根据需要为应用开启或关闭部分功能。这种方法通常适用于以下场景:设置黑白名单、降级业务功能、流量切量以及大促活动时的动态调整日志级别等。
从代码的角度来讲,每个开关的本质就是一个"if......else"条件语句块。
三、开关用途
对于高频率的发布上线来说,开关技术是一种合理的技术手段,被赋予了两种新的用途。
四、开关成本
使用开关技术也会带来成本。
五、开关管理
为了能够最大化利用开关带来的好处,并尽可能减少它带来的成本,应该对开关进行系统化的管理,并尽可能遵循以下原则。
6. 安全性:功能开关应该具有足够的安全措施,以确保只有授权的用户才能修改和配置开关状态。此外,功能开关还应该能够防止未经授权的访问和攻击。如DUCC权限管理及XBP审批管理。
总之,持续交付中使用功能开关技术的原则应该是灵活、可靠、安全、标准化、自动化、可追溯性和可扩展性的综合体现,以确保系统能够在不同的环境和需求下保持稳定和高效。
六、典型应用场景
开关可分为发布开关、运维开关、A/B实验开关、权限开关。具体应用场景如下:
capactiySwitch.enable=true
kaPromiseSwitch.whiteList=010***,011***,012***
jitSwitch.storeId=1-1,1-2,1-3,1-4,****
log4j.logger=info
commonSwith.fence=true
commonSwith.percent=10
七、开关实践
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 转载请注明来源

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Dubbo源码浅析(一)—RPC框架与Dubbo | 京东云技术团队
一、什么是RPC 1.1 RPC概念 RPC,Remote Procedure Call 即远程过程调用,与之相对的是本地服务调用,即LPC(Local Procedure Call)。本地服务调用比较常用,像我们应用内部程序**(注意此处是程序而不是方法,程序包含方法)**互相调用即为本地过程调用,而远程过程调用是指在本地调取远程过程进行使用。 而RPC框架就是为了帮助我们在本地调用远程过程时,就像调用本地过程一样方便。 1.2 RPC与Http的关系 用一句话来总结就是: RPC是一种概念,http是一种协议,可以认为http是Rpc的一种实现,或者Rpc包含了http。为什么说包含而不是相等,是因为Rpc还有很多基于自定义的Tcp的协议,例如Dubbo等,而我们常说的rpc即指的除Http之外的基于tcp自定义的协议。 1.3 关于Rpc的思考 网上关于Rpc与Http的相关文章并不少,很多人在解释RPC概念时会提到其是执行远程的方法,然后直接得出rpc包含http的结论。其实如果按照此概念去思考的话,其实并不能得出Http是Rpc的一种实现。因为http调用的方式,从使用者的角...
- 下一篇
【AIGC】只要10秒,AI生成IP海报,解放双手!!! | 京东云技术团队
看完这篇文章,你将学会以下价值连城的内容 1、云端部署(配置不行的小伙伴看)+ 云端模型放置位置 2、本地部署(配置达标的小伙伴看) 3、运用SD训练IP的流程和技巧(LoRA篇) 4、运用SD稳定生成高质量IP海报 众所周知,各大厂目前都在AIGC的领域探索实践,也有非常多的外部设计师制作了大量的AIGC相关授课,很多同学因为不清楚具体能得到什么价值或者收获而停止了脚步。今天我来为大家分享一下经过实际探索且落地的Stable diffusion的IP海报生成流程,内容很干请上车坐稳 📌 先来看一下达达骑士IP的效果: · 浅看一下IP海报生成过程 · V1模型生成 · V2模型生成 •V3模型生成 1、云端部署 应该有很多小伙伴苦于没有一个趁手的电脑配置,以及繁琐的本地配置,最终卡在了配置这个环节,今天我将带大家完成SD的云端部署,看完你就能完美的打开SD了 1、打开云端地址:https://www.autodl.com/home 1、注册登陆后,点击算力市场 2、选择按量计费、内蒙A区(注:不要选北京区可能需要SHH企业打开的问题) 3、...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19