Hippo4j动态可观测线程池框架

一、Hippo4j简介

特点:

  1. 动态变更

    应用运行时动态变更线程池参数,包括不限于核心、最大线程、阻塞队列大小和拒绝策略等,支持应用集群下不同节点线程池配置差异化.

  2. 自定义报警

    应用线程池运行时埋点,提供四种报警维度,线程池过载、阻塞队列容量、运行超长以及拒绝策略报警,并支持自定义时间内不重复报警.

  3. 运行监控

    支持自定义时长线程池运行数据采集存储,同时也支持 Prometheus、InfluxDB 等采集监控,通过 Grafana 或内置监控页面提供可视化大屏监控运行指标。

当前使用线程池存在的一些痛点:

  • 线程池难以灵活定义。
  • 可能在高并发情况下,大量任务堆积在阻塞队列中,或触发拒绝策略,进而影响业务正常运行。
  • 合理配置线程池的大小、任务队列长度等参数需要根据具体应用场景进行调整,往往比较复杂。

  • 线程池中的某些线程可能一直在处理长时间运行的任务,导致其他任务长时间得不到处理。

Hippo4j监控工具就是解决上述这些问题的,Hippo4j基于对原生的线程池ThreadPoolExecutor做了一个增强,扩展了很多的功能。

  • 全局管控 - 管理应用线程池实例。

  • 动态变更 - 应用运行时动态变更线程池参数,包括不限于:核心、最大线程数、阻塞队列容量、拒绝策略等。

  • 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长。

  • 运行监控 - 实时查看线程池运行时数据,最近半小时线程池运行数据图表展示。

  • 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务。

  • 多种模式 - 内置两种使用模式:依赖配置中心 和 无中间件依赖

  • 容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更。

  • 框架适配 - Dubbo、Hystrix、RabbitMQ、RocketMQ 等消费线程池运行时数据查看和线程数变更。

Hippo4j的Gitee地址:hippo4j: 🚀 异步线程池框架,支持线程池动态变更&监控&报警,无需修改代码轻松引入。

可以直接基于提供的演示地址去查看效果:Hippo4j Web

二、Hippo4j快速入门

首先Hippo4j有两个角色,一个Sever,一个Client

Server就是Hippo4j的图形化界面,监控都在里面

Client就是自己的工程,自己的项目,需要正常的引入Hippo4j的依赖,将构建线程池的方式更改为Hippo4j的要求的形式,再编写好各种配置文件即可。

2.1 安装Hippo4j-Server

Hippo4j-Server提供很多中安装方式,其中以Docker为核心去安装。

2.1.1 Docker方式安装

提供一个docker-compose.yml文件即可。

 version: '3.1'
 services:
   hippo4j:
     #镜像名称
     image: hippo4j/hippo4j-server
     #容器名称
     container_name: hippo4j-server
     ports:
       - 6691:6691
     environment:
         #Mysql配置
       - DATASOURCE_MODE=mysql
       - DATASOURCE_HOST=127.0.0.1
       - DATASOURCE_PORT=3306
       - DATASOURCE_DB=hippo4j_manager
       - DATASOURCE_USERNAME= 
       - DATASOURCE_PASSWORD=

docker-compose up -d启动即可

访问http://localhost:6691/index.html,默认用户名和密码为admin/123456

image.png

2.1.2 源码的方式安装

git地址:Releases · opengoofy/hippo4j · GitHub

2.1.2.1 启动前准备环境

Hippo4j-Server提供了两种数据源,可以采用MySQL,也可以采用H2。

这边咱们直接采用MySQL作为数据源。

找到指定的工程,准备环境

image.png

在指定的地址的MySQL中,提前构建出hippo4j_manager库

image.png

回到启动类,启动项目即可。

image.png

启动成功后,会自动根据resources中提供的SQL脚本生成库表

image.png

2.1.2.2 访问具体的Web界面

直接访问本地的6691端口即可。默认的用户名和密码依然是admin/123456

image.png

2.2 实现Hippo4j-Client

2.2.1 构建Hippo4j-Client(无中间件依赖)

首先需要准备一个SpringBoot工程。

导入Hippo4j的client依赖

 <dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
         <groupId>cn.hippo4j</groupId>
         <artifactId>hippo4j-spring-boot-starter</artifactId>
         <version>1.5.0</version>
     </dependency>
 </dependencies>

启动类追加注解

 @EnableDynamicThreadPool

编写配置文件

 spring:
   application:
     name: hippo4j-client
   dynamic:
     thread-pool:
       # server 端的地址
       server-addr: 127.0.0.1:6691
       username: admin
       password: 123456
       namespace: test # 租户名称
       item-id: ${spring.application.name}   # 项目名称,需要与与服务名称保持一致。

配置线程池信息

 /**
  * 交给Hippo4j-Server管理的线程池
  */
 @Configuration
 public class ThreadPoolConfig {
 ​
     @Bean
     @DynamicThreadPool
     public ThreadPoolExecutor threadPool(){
         //采用线程池Builder去构建
         ThreadPoolExecutor buildThreadPool = ThreadPoolBuilder.builder()
                 .corePoolSize(8)
                 .maximumPoolSize(8)
                 .keepAliveTime(5)
                 .timeUnit(TimeUnit.SECONDS)
                 .workQueue(BlockingQueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE)
                 .threadFactory("test")
                 .rejected(new ThreadPoolExecutor.AbortPolicy())
                 .threadPoolId("test")
                 .dynamicPool()
                 .build();
         return buildThreadPool;
     }
 }

需要在Hippo4j的图形化界面上构建租户&项目

动态线程池

  • 线程池管理: 这边可以将新注册上来的Hippo4j-Client中的线程池信息读取并且保存到数据库中,后期出现同样的线程池的标识的,直接按照当前数据库保存的配置信息走。 他无法动态修改。

    image.png

  • 线程池实例: 这个才是动态修改线程池配置信息的选项。

    image.png

2.2.2 构建Hippo4j-Client(依赖配置中心)

依赖配置中心的方式和上面玩的无中间件依赖是两个套路。

其实区别在于:

  • 依赖配置中心方式,可以不安装Hippo4j-Server,只需要在项目中导入好依赖,就可以实现线程池的动态配置刷新效果。 如果需要实现监控界面报表等内容,需要接入Prometheus和Grafana,成本也不低。

  • 无中间件依赖,这种方式只需要额外安装部署Hippo4j-Server即可,功能相对依赖配置中心的更丰富。

image.png

2.3 Web容器线程池监控

tomcat这种Web容器的线程池,Hippo4j也可以实现监控,而且不需要额外的导入任何的依赖

为了更好的查看Hippo4j的动态修改效果,额外追加一个Controller查看效果

 @GetMapping("/test")
 public String test(){
     System.out.println(Thread.currentThread().getName());
     return "ok";
 }

访问接口时,可以查看到处理Controller业务的线程是Tomcat的线程池中的线程信息

image.png

不需要额外的配置,在项目启动后,可以直接在Hippo4j的Server界面查看到监控的容器信息

同时Hippo4j也支持针对web容器的线程池的设置的动态修改

image.png

3、通知报警及监控

  可参考官网 通知报警 | Hippo4j现阶段已集成钉钉、企业微信、飞书的消息推送,后续会持续接入邮箱、短信和自定义通知渠道。icon-default.png?t=N7T8https://hippo4j.cn/docs/user_docs/user_guide/notify

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值