• Stars
    star
    3,453
  • Rank 12,391 (Top 0.3 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 2 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🔥🔥🔥轻量级动态线程池,内置监控告警功能,集成三方中间件线程池管理,基于主流配置中心(已支持Nacos、Apollo,Zookeeper、Consul、Etcd,可通过SPI自定义实现)。Lightweight dynamic threadpool, with monitoring and alarming functions, base on popular config centers (already support Nacos、Apollo、Zookeeper、Consul, can be customized through SPI).

logo

基于配置中心的轻量级动态线程池,内置监控告警功能,集成常用中间件线程池管理,可通过SPI自定义扩展实现

备注加群

官网: https://dynamictp.cn 🔥


使用痛点

使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢?

  1. 代码中创建了一个 ThreadPoolExecutor,但是不知道那几个核心参数设置多少比较合适

  2. 凭经验设置参数值,上线后发现需要调整,改代码重新发布服务,非常麻烦

  3. 线程池相对开发人员来说是个黑盒,运行情况不能及时感知到,直到出现问题

如果有以上痛点,动态可监控线程池框架(DynamicTp)或许能帮助到你。

如果看过 ThreadPoolExecutor 的源码,大概可以知道它对核心参数基本都有提供 set / get 方法以及一些扩展方法,可以在运行时动态修改、获取相应的值,这些方法有:

public void setCorePoolSize(int corePoolSize);
public void setMaximumPoolSize(int maximumPoolSize);
public void setKeepAliveTime(long time, TimeUnit unit);
public void setThreadFactory(ThreadFactory threadFactory);
public void setRejectedExecutionHandler(RejectedExecutionHandler handler);
public void allowCoreThreadTimeOut(boolean value);

public int getCorePoolSize();
public int getMaximumPoolSize();
public long getKeepAliveTime(TimeUnit unit);
public BlockingQueue<Runnable> getQueue();
public RejectedExecutionHandler getRejectedExecutionHandler();
public boolean allowsCoreThreadTimeOut();

protected void beforeExecute(Thread t, Runnable r);
protected void afterExecute(Runnable r, Throwable t);

现在大多数的互联网项目都会微服务化部署,有一套自己的服务治理体系,微服务组件中的分布式配置中心扮演的就是动态修改配置, 实时生效的角色。

那么我们是否可以结合配置中心来做运行时线程池参数的动态调整呢?

答案是肯定的,而且配置中心相对都是高可用的,使用它也不用过于担心配置推送失败这类问题,而且也能减少研发动态线程池组件本身的难度和工作量。

综上,可以总结出以下的背景

  • 广泛性:在 Java 开发中,想要提高系统性能,线程池已经是一个 90% 以上开发都会选择使用的基础工具

  • 不确定性:项目中可能会创建很多线程池,既有 IO 密集型的,也有 CPU 密集型的,但线程池的参数并不好确定;需要有套机制在运行过程中动态去调整参数

  • 无感知性:线程池运行过程中的各项指标一般感知不到;需要有套监控报警机制在事前、事中就能让开发人员感知到线程池的运行状况,及时处理

  • 高可用性:配置变更需要及时推送到客户端,需要有高可用的配置管理推送服务,配置中心是现在大多数互联网系统都会使用的组件,与之结合可以极大提高系统可用性


功能特性

基于以上背景分析,我们对线程池 ThreadPoolExecutor 做一些扩展增强,主要实现以下目标

  1. 实现对运行中线程池参数的动态修改,实时生效

  2. 实时监控线程池的运行状态,触发设置的报警策略时报警,报警信息推送办公平台

  3. 定时采集线程池指标数据,配合像 Grafana 这种可视化监控平台做大盘监控

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

  • 代码零侵入:我们改变了线程池以往的使用姿势,所有配置均放在配置中心,服务启动时会从配置中心拉取配置生成线程池对象放到 Spring 容器中,使用时直接从 Spring 容器中获取,对业务代码零侵入

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

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

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

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

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

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

  • 多模式:提供了增强线程池 DtpExecutor,IO 密集型场景使用的线程池 EagerDtpExecutor,调度线程池 ScheduledDtpExecutor,有序线程池 OrderedDtpExecutor,可以根据业务场景选择合适的线程池

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

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

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

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


架构设计

框架功能大体可以分为以下几个模块

  1. 配置变更监听模块

  2. 线程池管理模块

  3. 监控模块

  4. 通知告警模块

  5. 三方组件线程池管理模块

技术架构

详细查看官网文档,架构设计


接入步骤

  1. 引入相应配置中心的依赖,具体见官网文档

  2. 配置中心配置线程池实例,配置文件见官网文档

  3. 启动类加 @EnableDynamicTp 注解

  4. 使用 @Resource 或 @Autowired 进行依赖注入,或通过 DtpRegistry.getExecutor("name") 获取

  5. 通过以上 4 步就可以使用了,是不是感觉超级简单呀

更详细使用示例请参考 example 工程及官网文档


通知报警

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

告警

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

变更通知

更多见官网文档,通知报警


监控

监控数据

目前框架提供了四种监控数据采集方式,通过 collectorTypes 属性配置监控指标采集类型,默认 Micrometer

  1. Logging:线程池指标数据会以 Json 格式输出到指定的日志文件里

  2. Internal_logging:线程池指标数据会以 Json 格式输出到项目日志文件里

  3. Micrometer:采用监控门面,通过引入相关 Micrometer 依赖采集到相应的存储平台里(如 Prometheus,InfluxDb...)

  4. Endpoint:暴露 Endpoint 端点,可以通过 http 方式实时获取指标数据

更多见官网文档,监控


Star History

Star History Chart


知识星球


友情链接

  • HertzBeat : 易用友好的实时监控告警系统,无需Agent,强大自定义监控能力.

联系我

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

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

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

为了项目更好的发展,请在此进行登记,使用登记


鸣谢

感谢 JetBrains 对开源项目的支持

JetBrains

More Repositories

1

hutool

🍬A set of tools that keep Java sweet.
Java
28,241
star
2

Sa-Token

这可能是史上功能最全的Java权限认证框架!目前已集成——登录认证、权限认证、分布式Session会话、微服务网关鉴权、单点登录、OAuth2.0、踢人下线、Redis集成、前后台分离、记住我模式、模拟他人账号、临时身份切换、账号封禁、多账号认证体系、注解式鉴权、路由拦截式鉴权、花式token生成、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成、WebFlux集成...
Java
15,305
star
3

lamp-cloud

lamp-cloud 基于Jdk11 + SpringCloud + SpringBoot 开发的微服务中后台快速开发平台,专注于多租户(SaaS架构)解决方案,亦可作为普通项目(非SaaS架构)的基础开发框架使用,目前已实现插拔式数据库隔离、SCHEMA隔离、字段隔离 等租户隔离方案。
Java
5,311
star
4

hertzbeat

A real-time monitoring system with agentless, performance cluster, prometheus-compatible, custom monitoring and status page building capabilities.
Java
4,459
star
5

hmily

Distributed transaction solutions
Java
4,086
star
6

liteflow

Lightweight, fast, stable, and programmable component-based rule engine/process engine. Component reuse, synchronous/asynchronous orchestration, dynamic orchestration, multi-language scripting support, complex nested rules, hot deployment, smooth refreshing. Let you improve your development efficiency!
Java
2,610
star
7

raincat

强一致分布式事务框架
Java
1,908
star
8

mayfly-go

web版linux(终端 文件 脚本 进程)、数据库(mysql pgsql oracle sqlserver 高斯 达梦 sqlite)、数据同步、redis(单机 哨兵 集群)、mongo统一管理操作平台。web version of linux(terminal file script process), database (mysql pgsql oracle sqlserver Gauss sqlite), redis(single sentinel cluster), mongo unified management and operation platform.
Vue
1,657
star
9

forest

A high-level and lightweight declarative HTTP client framework for Java. it makes sending HTTP requests in Java easier.
Java
1,568
star
10

electron-egg

A simple, cross platform, enterprise desktop software development framework
JavaScript
1,517
star
11

myth

Reliable messages resolve distributed transactions
Java
1,492
star
12

easy-es

A foolproof Elasticsearch ORM framework that is easy to use, requires minimal coding, and is highly expandable...
Java
1,300
star
13

MaxKey

🗝️MaxKey SSO ,Leading-Edge IAM-IDaas(Identity and Access Management) Product,业界领先的IAM-IDaas身份管理和认证产品,支持OAuth2.x、OpenID Connect、SAML2.0、JWT、CAS、SCIM等SSO标准协议,基于RBAC统一权限控制,实现用户生命周期管理,开源、安全、合规、自主可控。
Java
1,234
star
14

Jpom

🚀简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件
Java
1,184
star
15

x-file-storage

一行代码将文件存储到 本地、FTP、SFTP、WebDAV、谷歌云存储、阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS、百度云 BOS、又拍云USS、MinIO、 AWS S3、FastDFS、 Azure Blob Storage、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动云 EOS、沃云 OSS、 网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的平台。后续即将支持 Samba、NFS
Java
1,042
star
16

sureness

A simple and efficient security framework that focus on protection of API.
Java
844
star
17

RuoYi-Vue-Plus

基于RuoYi-Vue集成 Lombok+Mybatis-Plus+Undertow+knife4j+Hutool+Feign 重写所有原生业务 定期与RuoYi-Vue同步
Java
776
star
18

payment-spring-boot

微信支付V3支付,支持微信优惠券,代金券、商家券、公众号支付、微信小程序支付、分账、支付分、商家券、合单支付、先享卡、电商收付通等全部微信支付功能API,同时满足服务商、商户开发需求。一键集成,上手快,欢迎star。
HTML
706
star
19

mendmix-cloud

Mendmix定位是一站式分布式开发架构开源解决方案及云原生架构技术底座。Mendmix提供了数据库、缓存、消息中间件、分布式定时任务、安全框架、网关以及主流产商云服务快速集成能力。基于Mendmix可以不用关注技术细节快速搭建高并发高可用基于微服务的分布式架构。
Java
694
star
20

SMS4J

让简单的事情回归简单的本质。 SMS4J为短信聚合框架,帮您轻松集成多家短信服务,解决接入多个短信SDK的繁琐流程。 目前已接入数家常见的短信服务商,后续将会继续集成。后续的版本中我们还将推出更多的相关功能 你的 ⭐️ ⭐️⭐️Star⭐️⭐️ ⭐️,是我的动力!如果你觉得还不错,请点上一颗小星星
Java
662
star
21

dante-cloud

Dante Cloud 是以「高质量代码、低安全漏洞」为核心,采用领域驱动模型(DDD)设计思想,完全基于 Spring 生态全域开源技术和 OAuth2.1 协议,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求、支持接口国密数字信封加解密、防刷、高防XSS和SQL注入等一系列安全体系的多租户微服务解决方案。
Java
626
star
22

RuoYi-Cloud-Plus

重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba Dubbo3.0 Sa-Token Mybatis-Plus MQ OSS ES Xxl-Job Docker 全方位升级 定期同步
Java
547
star
23

TLog

Lightweight distributed log label tracking framwork
Java
529
star
24

yft-design

一款美观且功能强大的在线设计工具,具备海报设计和图片编辑功能,基于fabric.js的开源版【稿定设计】。适用于多种场景,如海报生成、电商产品图制作、文章长图设计、视频/公众号封面编辑等 。A beautiful and powerful online design tool
TypeScript
491
star
25

go-view

GoView 说明文档,GoView 是一个低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。 它的技术栈为:Vue3 + TypeScript4 + Vite2 + NaiveUI + ECharts5 + Axios + Pinia2 + PlopJS
Vue
472
star
26

gobrs-async

Gobrs-Async (异步任务 编排框架) 是一款功能强大、配置灵活、带有全链路异常回调、内存优化、异常状态管理于一身的高性能异步编排框架。为企业提供在复杂应用场景下动态任务编排的能力。 针对于复杂场景下,异步线程复杂性、任务依赖性、异常状态难控制性; Gobrs-Async 为此而生。
Java
441
star
27

fast-request

IntelliJ IDEA plugin Restful Fast Request
Shell
431
star
28

neutrino-proxy

中微子代理(内网穿透)
Java
418
star
29

tianai-captcha

可能是java界最好的开源行为验证码 [滑块验证码、点选验证码、行为验证码、旋转验证码, 滑动验证码]
Java
413
star
30

newcar

🪢A modern animation engine for JavaScript ecosystem, which is based on CanvasKit-WASM.
TypeScript
389
star
31

CloudEon

CloudEon uses Kubernetes to install and deploy open-source big data components, enabling the containerized operation of an open-source big data platform. This allows you to reduce your focus on underlying resource management and maintenance.
Java
375
star
32

disjob

A distributed job scheduling and distributed computing framework
Java
329
star
33

Jinx

Spring-boot框架采用netty取代tomcat 来做http服务
Java
292
star
34

cubic

一站式问题定位平台,还在为线上问题而烦恼吗?分布式实例监控、线程栈监控、线程池监控、动态arthas命令集、依赖分析等等等,助你快速定位问题
Java
244
star
35

dataCompare

big data comparison and data profiling platform: low code,data comparison and data profiling
Java
231
star
36

RedisFront

RedisFront 是一款开源免费的跨平台 Redis 桌面客户端工具, 支持单机模式, 集群模式, 哨兵模式以及 SSH 隧道连接, 欢迎下载使用.
Java
215
star
37

northstar

国内最优秀的基于JAVA的AI开源量化交易平台,秒替文华、MC、金字塔。具备历史回放、策略研发、模拟交易、实盘交易等功能。兼顾全自动与半自动的使用场景。
Java
202
star
38

issues-translate-action

The action for translating Non-English issues content to English.
TypeScript
174
star
39

hodor

A distributed scheduling job framework supporting DAG workflow for big data and regular jobs, providing programmable job types across different languages.
Java
136
star
40

distribute-transaction

分布式事务书籍随书源码
Java
98
star
41

koalas-rpc

企业生产级百亿日PV高可用可拓展的RPC框架。理论上并发数量接近服务器带宽,客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,泛化调用,页面流量统计,泛化调用等,支持trace跟踪等,天然接入cat支持数据大盘展示等,持续为个人以及中小型公司提供可靠的RPC框架技术方案
Java
98
star
42

stream-query

Java
89
star
43

dax-pay

免费开源的支付网关,支持支付宝、微信、云闪付等通道,提供收单、退款、聚合支付、组合支付、对账、分账等功能,同时扩展了更多支付方式,如储值卡、现金卡等,通过HTTP方式进行调用,不与其他系统产生耦合关联,可以快速集成到各种系统中,提供可视化界面进行管理,便于实现统一的支付信息管理。
Java
78
star
44

J2EEFAST

J2eeFAST 是一个 Java EE 企业级快速开发平台,永久免费、真开源,拒绝标题党。基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis-Plus、Freemarker、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。 在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、license认证,BPM工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持多数据源;支持读写分离、分库分表.
Java
77
star
45

TestHub

一款基于流程编排的自动化测试工具
Java
39
star
46

binlog4j

Java
33
star
47

dromara.github.io

Dromara Official Website
TypeScript
32
star
48

mybatis-plus-ext

mybatis-plus框架的拓展包,在框架原有基础上做了进一步的轻度封装,增强内容:多数据源自动建表、数据自动填充、自动关联查询、冗余数据自动更新、动态查询条件等。
Java
29
star
49

athena

Java
22
star
50

WeMQ

WeMQ是一款面向物联网设备运营商的开源物联网设备调试系统,提供完整的物联网设备调试方案,集成设备管理、MQTT服务器管理、客户管理等功能,自研Nmqs通信层组件,实现了连接信息的加密,保证了数据的安全性。
HTML
18
star
51

open-capacity-platform

JavaScript
14
star
52

transaction-book

distributed transaction book
12
star
53

mybatis-jpa-extra

简化MyBatis CUID操作,增强SELECT分页查询
Java
10
star
54

website

Dromara Official Website (Old)
JavaScript
7
star
55

hmily-admin

Java
7
star
56

plus-doc

HTML
4
star
57

soul-benchmark

Soul performance test
3
star
58

gateway-book

2
star
59

hmily-dashboard

Vue
2
star
60

open-giteye-api

Java
2
star
61

skyway

2
star
62

hmily-admin-helm-chart

Smarty
2
star
63

tlog-homepage

JavaScript
1
star
64

soul-doc

1
star
65

northstar-monitor

JavaScript
1
star
66

stream-query-docs

文档
HTML
1
star