3K+ 星国产轻量级动态线程池开源项目

图片[1]-3K+ 星国产轻量级动态线程池开源项目-山海云端论坛

引言

使用 ThreadPoolExecutor 时,你是否遇到以下问题:

  1. 不确定如何设置线程池的核心参数;
  2. 难以准确设置参数值,导致上线后需要频繁调整参数,增加发布服务的麻烦;
  3. 线程池的运行情况像黑盒一样,无法及时感知到,直到出现问题。

今天小编为大家介绍一款国产开源优秀项目:DynamicTp。它是基于配置中心的轻量级动态可监控线程池,可以彻底解决上述痛点。

图片[2]-3K+ 星国产轻量级动态线程池开源项目-山海云端论坛

现如今,大多数互联网项目采用微服务化部署,拥有自己的服务治理体系。在微服务组件中,分布式配置中心扮演着动态修改配置、实时生效的角色。

我们是否可以结合配置中心来实现运行时线程池参数的动态调整呢?答案是肯定的!配置中心通常具备高可用性,使用它也无需担心配置推送失败等问题。同时,这种方式还能减少研发动态线程池组件的难度和接入工作量。

图片[3]-3K+ 星国产轻量级动态线程池开源项目-山海云端论坛

DynamicTp 不仅支持监控告警功能,还集成了常用中间件线程池管理,而且可通过 SPI 自定义扩展实现。

最新版本功能特性

  • 代码零侵入:所有配置均放在配置中心,对业务代码零侵入;
  • 通知告警:提供多种通知告警维度,支持企微、钉钉、飞书等渠道推送方式;
  • 运行监控:定时采集线程池指标数据(20 多种指标,包含线程池维度、队列维度、任务维度、tps、tp99 等);
  • 任务增强:提供任务包装功能,支持线程池上下文信息传递;
  • 多配置中心支持:支持 Nacos、Apollo、Zookeeper、Consul、Etcd 等多种主流配置中心;
  • 中间件线程池管理:集成管理常用第三方组件的线程池,已集成 Tomcat、Jetty、Undertow、Dubbo、RocketMq、Hystrix、Grpc、Motan、Okhttp3、Brpc、Tars、SofaRpc、RabbitMq 等组件的线程池管理;
  • 轻量简单:使用极其简单,3 分钟搞定,相当丝滑;
  • 多模式:提供了增强线程池 DtpExecutor,IO 密集型场景使用的线程池 EagerDtpExecutor,调度线程池 ScheduledDtpExecutor,有序线程池 OrderedDtpExecutor,可以根据业务场景选择合适的线程池;
  • 兼容性:JUC 普通线程池和 Spring 中的 ThreadPoolTaskExecutor 也可以被框架管理,@Bean 定义时加 @DynamicTp 注解即可;
  • 可靠性:依靠 Spring 生命周期管理,可以做到优雅关闭线程池,在 Spring 容器关闭前尽可能多的处理队列中的任务;
  • 高可扩展:框架核心功能都提供 SPI 接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装等等)。

技术架构图

图片[4]-3K+ 星国产轻量级动态线程池开源项目-山海云端论坛

DynamicTp 大体可以分为以下几个模块:

  • 配置变更监听模块
  • 线程池管理模块
  • 监控模块
  • 通知告警模块
  • 三方组件线程池管理模块

接入步骤

依赖环境

  • JDK 8+
  • Spring 4.x 及以上
  • SpringBoot 2.x、3.x 版本
  1. 引入相应配置中心的依赖,以 Apollo 为例:
<code><dependency> <groupId>org.dromara.dynamictp</groupId> <artifactId>dynamic-tp-spring-boot-starter-apollo</artifactId> <version>[最新版本]</version> </dependency></code>
  1. 配置中心配置线程池实例,配置文件示例参考:Apollo配置示例。
  2. 启动类加 @EnableDynamicTp 注解。
  3. @Resource@Autowired 进行依赖注入。
  4. 启动服务,若看到如下日志输出,表示接入成功:
<code>:: Dynamic Thread Pool :: DynamicTp register executor: TpMainFields(threadPoolName=dtpExecutor1, corePoolSize=2, maxPoolSize=10, keepAliveTime=50, queueType=TaskQueue, queueCapacity=200, rejectType=CallerRunsPolicy, allowCoreThreadTimeOut=false), source: beanPostProcessor DtpRegistry has been initialized, remote executors: [dtpExecutor1], local executors: [ioIntensiveExecutor, commonExecutor, dtpExecutor2]</code>

快速体验

1. 监控

DynamicTp 提供了四种监控数据采集方式:

  • Logging:线程池指标数据以 Json 格式输出到指定的日志文件;
  • Internal_logging:线程池指标数据以 Json 格式输出到项目日志文件;
  • Micrometer:采用监控门面,通过引入相关 Micrometer 依赖采集到相应的存储平台;
  • Endpoint:暴露 Endpoint 端点,可以通过 HTTP 实时获取指标数据。
图片[5]-3K+ 星国产轻量级动态线程池开源项目-山海云端论坛
图片[6]-3K+ 星国产轻量级动态线程池开源项目-山海云端论坛
图片[7]-3K+ 星国产轻量级动态线程池开源项目-山海云端论坛

2. 通知报警

触发报警阈值会推送相应报警消息(活性、容量、拒绝、任务等待超时、任务执行超时),且会高亮显示相应字段。

配置变更也会推送通知消息,且会高亮变更的字段。

结语

DynamicTp 还拥有更多功能,宝子们可参考官方文档及教程。以下是项目相关链接,务必不要错过,这个项目非常优秀且实用!

  • 官网:https://dynamictp.cn
  • GitHub开源地址:https://github.com/dromara/dynamic-tp
  • Gitee开源地址:https://gitee.com/dromara/dynamic-tp
  • 开发手册:https://dynamictp.cn/guide

希望以上信息对你有所帮助,欢迎使用 DynamicTp,祝愉快!

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容