大家好,动静线程池我的项目DynamicTp开源一个多月,目前400多star,阐明还是比拟受欢迎的,当初曾经有一些小伙伴在接入应用或者行将接入应用了,为了我的项目当前更好的倒退迭代,打算出几篇文章来对DynamicTp做一些更具体的介绍,有趣味的小伙伴欢送一起参加进来欠缺迭代我的项目。
背景啥的能够看前一篇文章介绍
美团动静线程池实际思路,开源了
我的项目地址
感激star,欢送pr,业务之余给开源奉献一份力量
gitee地址:https://gitee.com/yanhom/dynamic-tp
github地址:https://github.com/lyh200/dynamic-tp
系列文章
美团动静线程池实际思路,开源了
动静线程池(DynamicTp)之动静调整Tomcat、Jetty、Undertow线程池参数篇
代码构造
1.adapter模块:次要是适配一些第三方组件的线程池治理,目前曾经实现的有SpringBoot内置的三大web容器(Tomcat、Jetty、Undertow)的线程池治理,后续可能接入其余罕用组件的线程池治理。
2.common模块:次要是一些各个模板都会用到的类,解耦依赖,复用代码,大家日常开发中可能也常常会这样做。
3.core模块:该框架的外围代码都在这个模块里,包含动静调整参数,监控报警,以及串联整个我的项目流程都在此。
4.example模块:提供一个简略应用示例,不便使用者参照
5.logging模块:用于配置框架外部日志的输入,目前次要用于输入线程池监控指标数据到指定文件
6.starter模块:集成各个配置核心实现动静更新配置,目前曾经集成Nacos、Apollo两个支流配置核心,使用者也能够参照扩大其余配置核心实现,客户端应用也只需引入相应starter依赖就行。
能够看出,我的项目还是比较简单的,相当轻量。配置解析、报警平台、配置核心、监控数据输入、回绝策略等都提供有SPI接口供使用者扩大,高度可定制化(自定义实现也能够提PR合并到我的项目中供别人应用)。
集体还是有比拟强的代码洁癖的,所以代码这块也还是比拟洁净的(根本没有warning提醒),也大量应用一些设计模式优化代码构造,可读性还是比拟强的,能够一起交流学习。
对于扩大
1.扩大配置解析
目前反对的配置文件格式有yaml和properties,如果要扩大其余类型,参考其余两个实现继承AbstractConfigParser类,实现相应办法就行。
2.扩大报警平台
目前反对的报警平台有钉钉和企业微信,如果要扩大其余平台,参考其余两个实现继承AbstractNotifier类,实现相应办法就行。
3.扩大监控数据输入
目前监控指标数据反对以JsonLog输入到指定地位和MicroMeter采集两种形式,如果要扩大其余实现,参考其余两个实现继承AbstractCollector类,实现相应办法,而后把配置文件中的collectorType字段配置该类型就行
4.扩大配置核心
目前反对的配置核心有Nacos和Apollo两种,如果要扩大其余实现,比方ZK、Consul等能够参考其余两个实现继承AbstractRefresher类,实现相应办法就行
源码怎么读
对源码感兴趣的敌人能够从DtpRegistry这个类动手去读
围绕注册、获取、刷新这三个外围api去跟代码
注册
注册有两处,都是在spring容器启动时在Bean创立的不同阶段执行,对spring不相熟的小伙伴轻易能够去浏览下spring创立bean的源码,代码里也大量应用了spring的事件机制做代码解耦
1.spring容器启动时DtpPostProcessor会去注册在代码中通过@Bean申明的线程池实例
2.afterPropertiesSet办法会拉去配置核心配置的线程池而后实例化
刷新
配置核心的listener监听到配置文件的变动后,解析配置文件,而后告诉DtpRegistry去更新线程池配置,完之后发送变更告诉到配置的平台
监控
服务启动后启动一个定时器去做监控报警,能够看DtpMonitor这个类
报警
报警这块代码做了一些形象设计,使用了像模板办法模式等,代码可读性还是挺强的
看完代码之后你就会发现其实我的项目挺简略的,然而实用啊,外围代码也就是在除夕那三天写的。
接入应用
倡议在配置核心单开一个配置文件,配置文件名称配置到相应字段上。
因为代码始终在迭代中,公布的maven依赖可能不是最新的,线上要应用时能够找我确认下依赖版本。
具体应用步骤上篇文章有讲,能够去看
美团动静线程池实际思路,开源了
这个我的项目我感觉最大的长处也就是轻量,因为各个公司应用的组件体系都可能不太一样,所以留有足够多的扩大点让本人来扩大。上面一节次要介绍集成prometheus+grafana做监控
监控
这块要讲的是集成prometheus+grafana做监控,当时你得装置好prometheus+grafana,这个就不开展讲了,网上教程很多,测试应用能够间接用docker装置,非常简单。
1.首先配置文件中开启micrometer数据采集
enabledCollect: true collectorType: micrometer
2.我的项目中引入prometheus依赖,留神可能有版本不兼容问题,我测试遇到过
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.8.3</version> </dependency>
3.开启prometheus指标采集端点
management: metrics: export: prometheus: enabled: true endpoints: web: exposure: include: '*' # 线上最初不要*
4.配置prometheus数据采集job,这块能够去理解下他的SD机制(Service Discovery),也就是主动到配置核心发现服务,看你所用的配置核心支不反对这种形式,能够去官网查看,如同是不反对nacos的,但能够去github看有没有他人提供的实现,ZK,Eureka、Consul这些是反对的。这里应用static_configs形式,简略的指定地址的动态配置
- job_name: 'dynamic-tp' metrics_path: '/actuator/prometheus' static_configs: - targets: ['192.168.2.104:9098']
job配置后prometheus治理台看到如下图所示,阐明曾经开始失常采集指标配置
5.而后就是配置grafana数据可视化,配置如下图,须要该panel配置Json的能够加我发你,到这里监控就搭建起来了,其实也很简略,而后就能够实时监控线程池数据指标变动了
分割我
对我的项目有什么想法或者倡议,能够加我微信交换,或者创立issues,一起欠缺我的项目
公众号:CodeFox
微信:yanhom1314