历时 2 月,动态线程池框架 DynamicTp 发布里程碑版本 V1.0.8! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yanhomlin
V2EX    程序员

历时 2 月,动态线程池框架 DynamicTp 发布里程碑版本 V1.0.8!

  •  
  •   yanhomlin
    yanhom1314 2022-08-24 14:22:07 +08:00 1825 次点击
    这是一个创建于 1161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于 DynamicTp

    DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。

    经过多个版本迭代,目前最新版本 v1.0.8 具有以下特性

    特性

    • 代码零侵入:所有配置都放在配置中心,对业务代码零侵入

    • 轻量简单:基于 springboot 实现,引入 starter ,接入只需简单 4 步就可完成,顺利 3 分钟搞定

    • 高可扩展:框架核心功能都提供 SPI 接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装等等)

    • 线上大规模应用:参考美团线程池实践,美团内部已经有该理论成熟的应用经验

    • 多平台通知报警:提供多种报警维度(配置变更通知、活性报警、容量阈值报警、拒绝触发报警、任务执行或等待超时报警),已支持企业微信、钉钉、飞书报警,同时提供 SPI 接口可自定义扩展实现

    • 监控:定时采集线程池指标数据,支持通过 MicroMeter 、JsonLog 日志输出、Endpoint 三种方式,可通过 SPI 接口自定义扩展实现

    • 任务增强:提供任务包装功能,实现 TaskWrapper 接口即可,如 MdcTaskWrapper 、TtlTaskWrapper 、SwTraceTaskWrapper ,可以支持线程池上下文信息传递

    • 兼容性:JUC 普通线程池和 Spring 中的 ThreadPoolTaskExecutor 也可以被框架监控,@Bean 定义时加 @DynamicTp 注解即可

    • 可靠性:框架提供的线程池实现 Spring 生命周期方法,可以在 Spring 容器关闭前尽可能多的处理队列中的任务

    • 多模式:参考 Tomcat 线程池提供了 IO 密集型场景使用的 EagerDtpExecutor 线程池

    • 支持多配置中心:基于主流配置中心实现线程池参数动态调整,实时生效,已支持 Nacos 、Apollo 、Zookeeper 、Consul 、Etcd ,同时也提供 SPI 接口可自定义扩展实现

    • 中间件线程池管理:集成管理常用第三方组件的线程池,已集成 Tomcat 、Jetty 、Undertow 、Dubbo 、RocketMq 、Hystrix 等组件的线程池管理(调参、监控报警)

    依赖 groupId 变更

    v1.0.8 开始,依赖包的 groupId 从之前的 io.github.lyh200 改为 cn.dynamictp ,对使用者透明。

    v1.0.8 发布记录

    距离 v1.0.7 发布已经有差不多 2 个月时间,这个里程碑版本新增了好些功能,同时优化重构了一些代码设计,欢迎大家升级体验哦!

    Features

    • 新增内存安全队列 MemorySafeLinkedBlockingQueue ,感谢 @dragon-zhang 提供实现

    • WebServer 线程池管理支持 Reactive 环境下使用,感谢 @abbottliu.liu 提供实现

    • 支持 Dubbox 线程池管理,感谢 @Redick01 提供实现

    • 支持 Spring 中的 ThreadPoolTaskExecutor 线程池管理,感谢 @Redick01 提供实现

    • 支持 Etcd 配置中心接入,感谢 @Redick01 提供实现

    • 监控指标采集器新增输出到应用日志中的 InternalLogCollector ,感谢 @Redick01 提供实现

    • 三方中间件线程池通知告警支持别名配置,感谢 @renbiao002 提供实现

    • 新增 extension 模块,放置一些扩展功能

    • 三方中间件线程池管理支持通知告警功能

    • 指标数据采集支持同时配置多种采集方式

    • 新增 MdcTaskWrapper 任务包装器,支持 MDC 上下文传递

    • 新增 SwTraceTaskWrapper 任务包装器,支持 Skywalking TID 传递

    • 新增通知告警集群限流插件,见 extension-limiter-redis 模块

    • ThreadPoolCreator 类新增一些内存安全快捷创建线程池方法

    BugFix

    • 兼容 JDK11 当前要设置核心线程数不能大于上次设置的最大线程数限制

    • 修复核心线程预热设置 preStartAllCoreThreads 不生效问题

    • 修复 Hystrix 线程池获取失败 & 调参被覆盖问题

    • 修复采集类型为 logging 模式时,配置更新后日志输出到应用日志中的问题

    Refactor

    • 重构 logging 模块,去掉事件监听依赖

    • 重构抽象 adapter 模块代码

    • 责任链模式重构 notify 模块

    Optimize

    • example 添加 Hystrix 线程池的测试例子

    • 低版本 Apollo 配置文件格式兼容

    • Undertow 容器开启活跃线程池数采集功能

    • Endpoint 端点接口支持三方中间件线程池指标数据获取

    • 优化三方中间件参数刷新逻辑,增加校验判断逻辑及日志输出

    • 各模块代码优化

    项目地址

    目前累计 1.6k star ,感谢你的 star ,欢迎 pr ,业务之余一起给开源贡献一份力量

    官网https://dynamictp.cn

    gitee 地址https://gitee.com/dromara/dynamic-tp

    github 地址https://github.com/dromara/dynamic-tp

    加入社群

    看到这儿,方便的话给项目一个 star ,你的支持是我们前进的动力!

    使用过程中有任何问题,或者对项目有什么想法或者建议,可以加入社群,跟群友一起交流讨论。

    微信群已满 200 人,可以加我个人微信拉群(备注:dynamic-tp )。

    wechat.jpeg

    4 条回复    2022-08-24 20:51:01 +08:00
    yanhomlin
        1
    yanhomlin  
    OP
       2022-08-24 14:24:27 +08:00
    欢迎 javaer 试用!!!!
    yuk1no
        2
    yuk1no  
       2022-08-24 15:37:17 +08:00 via iPhone   3
    参考别人的实践=自己线上大规模应用
    tubimasky
        3
    tubimasky  
       2022-08-24 16:13:40 +08:00
    1.引入相应配置中心的依赖,具体见下述 mavne 依赖
    一眼丁真
    xboxv
        4
    xboxv  
       2022-08-24 20:51:01 +08:00 via Android
    发布节点不对
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5883 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 01:56 PVG 09:56 LAX 18:56 JFK 21:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86