如何帮助业务丝滑配置?阿里巴巴用了 11 年的“功能开关” 是什么?

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: AHAS 功能开关是一个轻量级的动态配置框架,通过功能开关可以动态管理代码中的配置项,根据需求为某个应用开启或关闭部分功能,或设置某个性能指标的阈值。功能开关通常用于设置黑白名单、运行时动态调整日志级别、降级业务功能等场景。

作者:苏宇(流士)


我们业务常见的配置问题


通常业务代码中包含许多的配置项,这些配置项用于控制各种各样的业务逻辑,例如一个 bool 类型的变量控制某个功能是否开启,一个 list 控制访问白名单或黑名单,一个 String 控制提示信息。但是在常规的微服务架构应用的配置过程中,会碰到以下的配置问题与挑战。


image.jpeg


针对上述问题,开发者通常希望可以动态、实时地去查看和修改配置项,并且期望不需要编写额外的代码来管理,此时就可以利用 AHAS 功能开关来实时修改和查看对应的配置项。与传统的配置中心不同,开发者使用 AHAS 功能开关时,无需关注配置项的解析逻辑,只需声明对应的变量,加上 AHAS 功能开关的注解即可在功能开关控制台对配置进行动态管理。


什么是 AHAS 功能开关?


AHAS 功能开关是一个轻量级的动态配置框架,通过功能开关可以动态管理代码中的配置项,根据需求为某个应用开启或关闭部分功能,或设置某个性能指标的阈值。功能开关通常用于设置黑白名单、运行时动态调整日志级别、降级业务功能等场景。


利用 AHAS 功能开关,可以帮助企业构建完善的线上运维手段,作为流量防护等常规运维手段的有力补充,功能开关可针对特定业务场景实现定向止损,及时保障应用系统稳定性;对不同业务场景下的配置项具体内容可灵活变更,随时调整;AHAS 功能开关可将原生 Spring 配置项自动转化为功能开关项,真正做到零改造。


AHAS 功能开关实现逻辑


通过 AHAS 控制台管理和推送配置项,应用重启或扩容阶段可读取持久化配置。


640 - 2022-04-16T180830.939.png


市场中现有的配置管理服务在某些配置管理核心环节存在严重不足,具体现象可简述如下:


  • 灵活性差

现有配置管理服务多基于文件方式或需手动设置配置项方能生效,过程较为复杂,且容易出错;AHAS 功能开关可自动支持原生 Spring 配置项,极大解放业务人员生产力。


  • 配置类型缺少校验

现有配置管理服务在推送阶段大多未实现类型校验,可能导致严重线上故障,引发资损;AHAS 功能开关对配置类型进行强校验,把问题暴露在控制台层面,避免由于人员操作失误引发的问题。


  • 持久化数据丢失

现有配置管理服务多基于本地文件或数据库进行持久化,SLO 难以保障;AHAS 功能开关依托于集团持久化产品保障开关持久化的可靠性。


  • 侵入性强

现有配置管理服务对代码侵入性较强,引入使用需做大量改造,耗费较多精力;AHAS 功能开关提供 Agent 接入方式,对应用完全无侵入,对某些需自定义开关场景可按需引入 SDK。


和业界常见产品的差别是什么?


对 switch 社区版及国内外使用较为广泛的开关配置产品,从配置在微服务运维的各个阶段及维度展开进行比较。AHAS 在应用接入的成本、配置推送的可操作性以及配置持久化方面都有较大的优势:


  • 应用接入

应用通过 Agent 方式接入 AHAS,连接功能开关服务,无需对应用做任何改造,真正做到无侵入。


  • 配置推送

通过 AHAS 控制台即可对应用的配置项进行管理,按需推送配置项,支持按节点推送与全局推送方式。


  • 配置持久化

通过 ACM 组件持久化配置项,保障配置项高可靠性。应用在重启或扩容阶段可读取持久化配置。


详细内容见下表:

640 - 2022-04-16T180940.476.png


除此之外,AHAS 功能开关相较于其他竞品还具备如下差异化优势:


  • 强类型校验

用户无需在业务层面对接收到的配置进行类型及格式的校验,校验工作由平台承担,应用仅需关注业务。


  • 无侵入式接入

对 SpringCloud 应用支持一键接入,自动识别应用中配置项,可通过控制台实时修改并进行持久化等操作。


  • 复杂配置项支持

在复杂数据类型支持方面较为完善,无需遵守较为繁琐的配置项规则。


  • 开箱即用功能

支持日志级别动态调整,获取不同级别日志,方便问题分析、故障定位。


业务中开关配置常见的应用场景有哪些?


动态调整日志级别


在开发 Java 程序时,我们经常会用到各种各样的日志框架。为了避免在程序正常运行时输出不必要的信息,可以针对性地动态调整日志级别,以便输出更多的日志信息排查线上问题,或是减少日志打印带来的性能消耗。功能开关提供了在应用运行时动态修改日志级别的功能,在不同的应用场景下,您可以随时调整日志的级别,得到更有效的日志信息。(注:支持的日志框架:Log4j、Log4j2、Logback。


配置项组合更新


在实际的业务运行场景下,可按不同场景批量更新组合配置项。所谓组合配置项指具有一组相互关联业务语义的配置项,如页面公告中时间、标题、内容等,商品特殊优惠配置中价格、优惠折扣等。


下图以'商品优惠配置'为例进行说明。'商品优惠配置'在不同场景下优惠对象、优惠折扣及价格等各不相同,将'商品优惠配置'涉及的配置项组合,在不同场景下设置不同内容,可在不同场景下快速切换,同时省去繁琐校验过程,避免出错。


640 - 2022-04-16T181132.131.png


开关驱动开发


以开关方式控制代码执行逻辑,用于新功能快速验证,在出现问题时可及时回退。相比复杂的系统发布,投入成本较低,可结合 DevOps 机制进行实践。


如下图所示,当执行逻辑触发时访问对应的开关配置查看配置是否打开,从而决定是否执行新功能。可用于 A/B 测试、环境隔离等场景。



640 - 2022-04-16T181431.970.png


金丝雀(灰度)发布


确保应用发布的可观测,可灰度,可回滚,使用金丝雀发布进行小流量验证,验证通过后再全量升级,实时查看流量的分配情况。


image.gif640 - 2022-04-16T181516.446.png


怎么配置 AHAS 开关?


步骤一 :环境准备


  • 功能开关 Agent 方式接入,与流量防护共用 Agent,

配置-Dahas.switch.agent.plugin.group.enabled=true


  • 应用配置 SDK 方式接入,参考使用 SDK 接入[1]
  • 应用配置 Spring Boot Starter 方式接入,参考使用 Spring Boot Starter 接入[2]


步骤二:配置操作
以开箱即用功能日志动态修改为例。
进入目标应用的开关列表页面。在开关列表页面搜索到 SYSTEM_LOG_CONFIG 开关,即日志级别开关。


640 - 2022-04-16T181613.508.png


推送值格式:KeyLoggerNameValue 为日志级别。如需修改全局日志级别,LoggerNameroot,如下所示。


{
 "root": "ERROR"
}


步骤三:配置效果
修改后即可生效,具体效果如下。


640 - 2022-04-16T181723.532.png


相关链接


[1] 使用 SDK 接入

https://help.aliyun.com/document_detail/156225.html


[2] 使用 Spring Boot Starter 接入

https://help.aliyun.com/document_detail/155940.html


欢迎扫码进群联系我们:


640 - 2022-04-16T181810.534.png


相关文章
|
7月前
|
小程序
设置审核方式(提效百宝箱系列)
设置审核方式(提效百宝箱系列)
57 11
|
7月前
|
搜索推荐 小程序 定位技术
【社区每周】AMPE新增车机卡片联动功能;支持个性化场景推荐(2022年6月第四期)
【社区每周】AMPE新增车机卡片联动功能;支持个性化场景推荐(2022年6月第四期)
99 0
|
负载均衡
LOOK!直播APP源码平台的稳定控制方法
我就把简单两步控制直播APP源码平台的稳定的方法分享给大家了,开发直播APP源码平台优质知识分享,大家有什么不懂的或是想要开发直播APP源码平台可以问我
LOOK!直播APP源码平台的稳定控制方法
|
移动开发 前端开发 IDE
手淘双11最新实践:PopLayer弹层领域研发模式升级
近年来,各大APP内的弹层需求逐渐增多,以手机淘宝为例,日常的弹层上线频率为单端每月50次左右,而在大促期间可以达到240次以上。在手淘内,各类弹层业务都会通过PopLayer中间件的能力进行投放。但业务往往会遇到开发弹层难、慢、稳定性差的种种困难。对比于往年业务研发成本较高的现状,PopLayer在今年提出了【低研发搭投模式】来解决这类问题,形成一套快速搭建+可视化+多端多场景通用的解决方案,在日常与大促期间得到了广泛应用:
|
存储 Prometheus 监控
重磅!DIY的Prometheus主备方案,全网唯一。生产未上,测试先行。
重磅!DIY的Prometheus主备方案,全网唯一。生产未上,测试先行。
322 0
|
缓存 Python
研发提效工具1 - 秒级二维码生成方案
# 背景 我们在日常工作和开发过程中,有时会有生成二维码的需求。 一般的生成二维码路径是: 1. 打开浏览器 2. 通过搜索或书签进入某二维码生成网站(如[草料](https://cli.im/)) 3. 输入带生成的文本 4. 点击生成 这种生成二维码的链路比较繁琐和冗长,本文介绍另一种更高效的方式来完成二维码的生成操作。 # 效果图 ![](https://ata2-im
221 0
研发提效工具1 - 秒级二维码生成方案
|
SQL 数据采集 安全
Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞
Dataphin,用中台方法论打造企业级好数据。Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采、建、管、用全生命周期的大数据能力,以助力企业显著提升数据治理水平,构建质量可靠、消费便捷、生产安全经济的企业级数据中台。Dataphin提供多种计算平台支持及可拓展的开放能力,以适应各行业企业的平台技术架构和特定诉求。
Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞
|
运维 监控 测试技术
巧用友盟+U-APM 实现移动端性能优化—启动速度
移动端性能对用户体验、留存有着至关重要的影响,一个体验良好的应用,只有功能健全还不够,以下是我在性能优化上总结的几点:启动速度优化、流畅度优化、资源优化、内存优化、APK 体积优化。今天先聊聊,启动速度的那些事。
巧用友盟+U-APM 实现移动端性能优化—启动速度
|
存储 机器学习/深度学习 算法
优酷移动端组件智能测试方案
随着优酷APP上内容运营方案和玩法的丰富,针对分发和消费业务场景,内容配置平台上的运营组件数量也在增多,移动端的回归测试工作量激增。如何跟随业务发展的脚步,又保证组件测试质量的高效率?本文将分享优酷在该方面的思考和探索
340 0
优酷移动端组件智能测试方案
|
5G 调度 图形学
3D实时云渲染系统搭建部署建设方案
依托于3D实时云渲染技术,目前这类平台对于很多设计或者影视特效公司来说,效率得到了极大的提升。在一些影视特效、动漫、设计、unity模型等领域,需要将设计好的模型呈现出来立体的效果,以前是在电脑上,利用本地设备性能去执行这项工作。而随着5G和云服务的发展,使用**云端服务器**来完成这些工作,可以大大提高其工作效率。
1125 0
3D实时云渲染系统搭建部署建设方案