简略来总结下动态线程池 DynamicTp 的 2022 年吧,DynamicTp 中心代码是我在 2022 年元旦那三天写的,当时为什么要写这个项目呢?
首要根据以下几点原因:
-
我之前也在美团待过,很早就知道内部有动态线程池这么一款工具
-
自己日常开发中,担任的服务无一例外都会用到线程池
-
用过线程池的都知道,那些中心参数是真的不好确定,需求做许多修正、发布、验证这套作业
-
线程池的运转对开发来说是个黑盒,运转情况不能及时感知,短少监控告警功用
-
竟然咱们都有这些痛点,为了更好的用好线程池,就计划搞个动态线程池的轮子方便自己,也方便他人
这便是最初为啥要写这个项目的大致原因了。
程序员不止需求完结作业上的 CRUD,也需求有一种发现痛点,处理痛点的气魄,尽管这听起来很枯燥,但投入其间会发现其实也挺有趣的。
写之前就确定了 DynamicTp 的完结思路及需求供给的功用。
-
要尽或许轻量,降低接入运用的复杂度,所以选择跟装备中心结合
-
需求有动态调整线程池参数的才能,根据装备中心的实时热更来完结
-
需求有监控功用,收集线程池运转过程中的各项指标,结合像 Prometheus+Grafana 这类监控工具来做可视化大盘
-
需求有告诉告警功用,对回绝使命数、队列运用率、履行超时使命数、线程池活跃度等到达装备的阈值时及时宣布告警
-
适配常用第三方中间件的内部线程池,服务启动时拿到线程池目标交给 DynamicTp 来办理
整个项目也都是环绕这四个中心功用来打开的。
许多加我 vx 跟我聊天的小伙伴问的最多的问题便是想学习下项目,但是不知道从何下手。
其实我想说的是你要学习任何一个东西,一定先要去了解清楚它要处理的问题是什么?中心功用是什么?作者的思路一般也都是环绕着这些中心功用来打开做的,一步步完善成一个大工程的。中心功用肯定也不止一个,会有多个,你能够选择从一个你感兴趣的下手,看整个数据流、调用链路是怎样的,适当越过一些细枝末节。这样看的多了慢慢就有感觉,就能串起来了。
也有一些小伙伴会咨询我说怎么做开源,其实开源这个东西咱们千万别把它想的多高大上。跟你日常的业务开发也差不多,业务需求是产品提的,需求处理一类问题,一般是它驱的、有偿的。开源项目本质上来说也是需求处理一类问题,需求需求自己寻觅,能够找自己日常开发中的一些痛点,是自驱的、用爱发电的。做开源就需求牺牲自己许多的业余时间,上班时间仍是要仔仔细细做公司的事儿,像我一般都是周末或者晚上下班回家抽时间弄下开源的,带点热爱参加开源或许会走的更远。不要急功求成,做开源本身也是对自己的一种才能提升,项目火不火能够不用那么看重,信任是金子总会发光的。
DynamicTp 从上一年一月开源到现在共收获了 2.8k 的 stars,740+forks,30+奉献者,600+群友,感谢一年来支撑咱们的人。
-
1 月项目开源,感谢@铂赛东,东哥在项目初期给我做了一波推行,项目 star 到达近 100
-
2 月美团动态线程池实践思路,开源了该篇文章在掘金渠道火了,长时间霸榜榜首,给了项目巨大的流量支撑,项目总 star 数到达近 600,或许项目的许多关注者都是从掘金渠道来的吧,这儿非常感谢掘金渠道给的机会
-
3 月发布榜首个可用版别 1.0.2,3y 的 austin 项目也接入运用,功用特性持续奉献,感谢@Redick01,辉哥参加奉献了许多新特性
-
4 月项目将项目捐赠到了 Dromara 社区,为了更好的发展,根据社区来传播,让更多人接触到 DynamicTp
-
5 – 12 月,项目特性持续更新,更多小伙伴参加奉献,项目稳定性也越来越高,相继发布 1.0.8 里程碑版别及最新版别 1.0.9,年后估计发布 1.1.0 版别,适配了更多第三方中间件。非常感谢给 DynamicTp 奉献代码及 idea 的小伙伴们
也感谢那些自发帮 DynamicTp 推文的号主们,JavaGuide、Java3y、架构师社区、石衫的架构笔记、架构师生长指南、元人部落、涛歌仍旧、java1234、苏三说技能、小哈学 java、java 学思等等。
经过多个版别的迭代,现在最新版别 v1.0.9 具有以下特性 ✅
-
代码零侵入:咱们改变了线程池以往的运用姿势,所有装备均放在装备中心,服务启动时会从装备中心拉取装备生成线程池目标放到 Spring 容器中,运用时直接从 Spring 容器中获取,对业务代码零侵入
-
告诉告警:供给多种报警维度(装备改变告诉、活性报警、容量阈值报警、回绝触发报警、使命履行或等候超时报警),已支撑企业微信、钉钉、飞书、邮件报警,一起供给 SPI 接口可自界说扩展完结
-
运转监控:定时收集线程池指标数据,支撑经过 MicroMeter、JsonLog 日志输出、Endpoint 三种方式,可经过 SPI 接口自界说扩展完结
-
使命增强:供给使命包装功用,完结 TaskWrapper 接口即可,如 MdcTaskWrapper、TtlTaskWrapper、SwTraceTaskWrapper,能够支撑线程池上下文信息传递
-
多装备中心支撑:根据干流装备中心完结线程池参数动态调整,实时生效,已支撑 Nacos、Apollo、Zookeeper、Consul、Etcd,一起也供给 SPI 接口可自界说扩展完结
-
中间件线程池办理:集成办理常用第三方组件的线程池,已集成 Tomcat、Jetty、Undertow、Dubbo、RocketMq、Hystrix、Grpc、Motan、Okhttp3、Brpc、Tars、SofaRpc 等组件的线程池办理(调参、监控报警)
-
轻量简略:根据 SpringBoot 完结,引入 starter,接入只需简略 4 步就可完结,顺利 3 分钟搞定
-
多模式:参阅 Tomcat 线程池供给了 IO 密集型场景运用的 EagerDtpExecutor 线程池
-
兼容性:JUC 一般线程池和 Spring 中的 ThreadPoolTaskExecutor 也能够被结构监控,@Bean 界说时加 @DynamicTp 注解即可
-
可靠性:结构供给的线程池完结 Spring 生命周期方法,能够在 Spring 容器封闭前尽或许多的处理队列中的使命
-
高可扩展:结构中心功用都供给 SPI 接口供用户自界说个性化完结(装备中心、装备文件解析、告诉告警、监控数据收集、使命包装等等)
-
线上大规模使用:参阅美团线程池实践,美团内部已经有该理论老练的使用经历
最终,欢迎咱们了解试用 DynamicTp。
官网:dynamictp.cn
gitee 地址:gitee.com/dromara/dyn…
github 地址:github.com/dromara/dyn…
「回忆2022,展望2023,我正在参加2022年终总结征文大赛活动」