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


配置推送 通过 AHAS 控制台即可对应用的配置项进行管理 , 按需推送配置项 , 支持按节点推送与全局推送方式 。
配置持久化 通过 ACM 组件持久化配置项 , 保障配置项高可靠性 。 应用在重启或扩容阶段可读取持久化配置 。
详细内容见下表:

除此之外 , AHAS 功能开关相较于其他竞品还具备如下差异化优势:
强类型校验 用户无需在业务层面对接收到的配置进行类型及格式的校验 , 校验工作由平台承担 , 应用仅需关注业务 。
无侵入式接入 对 SpringCloud 应用支持一键接入 , 自动识别应用中配置项 , 可通过控制台实时修改并进行持久化等操作 。
复杂配置项支持 在复杂数据类型支持方面较为完善 , 无需遵守较为繁琐的配置项规则 。
开箱即用功能 支持日志级别动态调整 , 获取不同级别日志 , 方便问题分析、故障定位 。
业务中开关配置常见的应用场景有哪些? 动态调整日志级别
在开发 Java 程序时 , 我们经常会用到各种各样的日志框架 。 为了避免在程序正常运行时输出不必要的信息 , 可以针对性地动态调整日志级别 , 以便输出更多的日志信息排查线上问题 , 或是减少日志打印带来的性能消耗 。 功能开关提供了在应用运行时动态修改日志级别的功能 , 在不同的应用场景下 , 您可以随时调整日志的级别 , 得到更有效的日志信息 。 (注:支持的日志框架:Log4j、Log4j2、Logback 。 )
配置项组合更新
在实际的业务运行场景下 , 可按不同场景批量更新组合配置项 。 所谓组合配置项指具有一组相互关联业务语义的配置项 , 如页面公告中时间、标题、内容等 , 商品特殊优惠配置中价格、优惠折扣等 。
下图以'商品优惠配置'为例进行说明 。 '商品优惠配置'在不同场景下优惠对象、优惠折扣及价格等各不相同 , 将'商品优惠配置'涉及的配置项组合 , 在不同场景下设置不同内容 , 可在不同场景下快速切换 , 同时省去繁琐校验过程 , 避免出错 。

开关驱动开发
以开关方式控制代码执行逻辑 , 用于新功能快速验证 , 在出现问题时可及时回退 。 相比复杂的系统发布 , 投入成本较低 , 可结合 DevOps 机制进行实践 。
如下图所示 , 当执行逻辑触发时访问对应的开关配置查看配置是否打开 , 从而决定是否执行新功能 。 可用于 A/B 测试、环境隔离等场景 。

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

怎么配置 AHAS 开关? 步骤一 :环境准备
功能开关 Agent 方式接入 , 与流量防护共用 Agent , 【俞敏洪|如何帮助业务丝滑配置?阿里巴巴用了 11 年的“功能开关”是什么?】配置-Dahas.switch.agent.plugin.group.enabled=true
应用配置 SDK 方式接入 , 参考使用 SDK 接入[1
应用配置 Spring Boot Starter 方式接入 , 参考使用 Spring Boot Starter 接入[2
步骤二:配置操作以开箱即用功能日志动态修改为例 。 进入目标应用的开关列表页面 。 在开关列表页面搜索到 SYSTEM_LOG_CONFIG 开关 , 即日志级别开关 。

推送值格式:Key 为 LoggerName , Value 为日志级别 。 如需修改全局日志级别 , LoggerName 为 root , 如下所示 。
{ \"root\": \"ERROR\"
步骤三:配置效果修改后即可生效 , 具体效果如下 。

相关链接 [1
使用 SDK 接入
https://help.aliyun.com/document_detail/156225.html