一、使用方法 简单说下DUCC的特点 支持多环境(或称分组),分组可以合并 内置强大的基于插件的数据绑定框架,支持多种类型转换; 支持Log4j、Log4j2、Logback的动态修改日记级别功能 、支持自定义注解,客户端代码入侵性低 支持客户端多配置源,支持自定义配置,如ZK、Consol扩展 支持配置预案切换 接下来说说怎么用,下面我代码中的ConfiguratorManager就是DUCC public String getJoneProperty(String key) { return joneProperty.get(key); } } 二、DUCC DUCC通过SPI服务发现将FileConfigurator、SystemConfigurator等extends了AbstractConfigurator的类自动加载进来从而达到可插拨扩展其他配置源的效果 Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制,常见的JDBC、SLF4门面就是通过这个实现的,下面是DUCC的运用 /** * 插件管理器 */
sql进行提取和分析,定制一套默认的分析规则,让sql在开发环境和测试环境执行的时候,就能够做初步的评估,把有问题的慢sql在这个阶段暴露出来;同时具备sql替换功能,在线上出现问题sql的时候,可以通过ducc score 基于分析结果和配置的评分规则进行匹配打分,优化建议组装 模块七:out 输出模块,对于输出结果进行输出,目前已error日志、MQ两种输出方式 模块八:replace替换模块,可以对sql语句基于ducc property name="duccAppName" value="XXx"/> <property name="duccUri" value="ucc://xxxx@test.<em>ducc</em>.jd.local "jdl_kds_key_node_log"/> </plugin> </plugins> </configuration> 最终效果 图5.最终效果示意 3、慢sql替换-ducc 配置 图7.ducc配置 线上sql被动态替换 图8.线上sql被动态替换 注意:功能正式修复后,需去掉该配置,该功能仅供应急处理线上问题,不建议作为功能长期使用 07 性能测试 理解,首先 MCube
此应用基于 JDK 8,SpringBoot 2.0.8,除常见外部基础组件外,还使用以下公司内部中间件:UMP、SGM、DUCC、CDS、JMQ、JSF、R2M。 -- 京东中间件版本 Start --> <ump-version>20221231.1</ump-version> <ducc.version>1.0.20</ducc.version XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/logs " 内部依赖需要访问 JDK 模块,如 UMP、JSF、虫洞、MyBatis、DUCC 有几个验证重点与方法: 首先可以通过单元测试快速进行系统全面回归,避免出现 JDK API、中间件 API 变更导致的业务异常 部署到测试环境,验证各个中间件是否正常,如 DUCC 开关下发,MQ 收发
4.3 兼容性问题说明 关于兼容性问题本文以如何兼容京东的UMP, DUCC等为例。 DUCC依赖需要加入 --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.util.concurrent.locks 以上的SGM,R2M,DUCC,AKS,Pfinder的兼容性问题都是因为这个特性变化引起的。 ,将部门内的京旗API服务, 发货平台BFF服务,物流发货商家基础信息服务作为试点,已经在行云测试环境上用JDK17+Spring Boot2.7版本进行试运行,京东三方依赖包括JSF lite版本,ducc
根据 ducc和 clientId决定是否写入到新库,ducc(bizMsgTransDbJson)中配置了切换开关、白名单、黑名单和分流范围; 2.
2.完备的技术层面故障隔离手段:在技术层面上,需要采取一些故障隔离手段,比如通过DUCC开关等方式来避免过度回滚代码。 这样可以更加快速止血(DUCC开关秒级,如机器多回滚需要5-10分钟) 3.经过足够的演练的故障处理机制保障:最后,需要建立一个经过足够演练的故障处理机制保障,包括UAT环境测试、捣乱演练、应急预案SOP 首先只需要粗定位问题大概即可,然后通过一些应急预案措施(DUCC开关降级、限流、回滚等)来恢复现场。 3.线上问题首先思考,是不是上线、业务修改配置等变更导致,拉齐信息。
同时,为避免依然存在意外的情况,有大量查询涌入,可以通过ducc开关控制数据库的查询,如调用量太高导致无法支撑,则直接关闭数据库的调用,保证数据库不会直接宕机导致整个业务不可用。
EnumContextFactory.getEnumContext(); // 获取枚举map newEnumMap = enumContext.getEnumIndexMap(); // buid映射从ducc
3.1.1、“推”链路 此链路的全过程可以表述为:软件实施人员在控制台,通过推送、生效等可视化界面工具操作完成后,控制台会将用户操作数据实时写入至相关的数据中心,数据中心依赖的核心组件DUCC(一种类似 集成了SDK的应用容器收到DUCC变更消息通知后,感知控制台的操作并依据操作类型不同做出差异化的反映:SDK依据操作的不同指令,在应用容器中执行不同的业务操作。
4、数据维护成本高,目前我们有冷热两个集群,每年两次大促前需要将热集群中超过5个月以上的订单迁移至归档集群,这个过程相对比较繁琐耗时长,DUCC变更、迁移数据、比对数据、灰度切流等等。
3.1.1“推”链路 此链路的全过程可以表述为:软件实施人员在控制台,通过推送、生效等可视化界面工具操作完成后,控制台会将用户操作数据实时写入至相关的数据中心,数据中心依赖的核心组件DUCC(一种类似ZK 集成了SDK的应用容器收到DUCC变更消息通知后,感知控制台的操作并依据操作类型不同做出差异化的反映:SDK依据操作的不同指令,在应用容器中执行不同的业务操作。
add-opens java.management/sun.management=ALL-UNNAMED R2M需要加入: --add-opens java.base/java.time=ALL-UNNAMED Ducc
通常配置是通过Ducc(京东自研的配置中心)、Nacos(阿里开源的配置中心)等配置中心存储的,支持动态变更、实时生效。基于此,我们便可以实现校验处理器的编排、以及动态扩展了。
通常配置是通过Ducc(京东自研的配置中心)、Nacos(阿里开源的配置中心)等配置中心存储的,支持动态变更、实时生效。 基于此,我们便可以实现校验处理器的编排、以及动态扩展了。
1.1.5 其他限制 DUCC value 的长度默认限制为 4W 字符。 UMP Key的限制128。