给你介绍下,Hippo4J 动态线程池基础架构(一)
很多小伙伴知道小编从今年六月份开始,陆陆续续开始提交 Hippo4J 动态线程池项目
经过 200+ 的 Commit,也是快要能发布 1.0.0 正式版本,今天就写一篇文章正式介绍下 Hippo4J 的项目架构
Hippo4J GitHub[1]:https://github.com/acmenlt/dynamic-threadpool
小伙伴如果访问 GitHub 速度慢,可以通过改 Host 的方式提高访问速度,修改 Host 方案[2]
1. 架构设计
简单来说,Hippo4J 从部署的角度上分为两种角色:Server 端和 Client 端
Server 端是 Hippo4J 项目打包出的 Java 进程,功能包括用户权限、线程池监控以及执行持久化的动作
Client 端指的是我们 SpringBoot 应用,通过引入 Hippo4J Starter Jar 包负责与 Server 端进行交互
比如拉取 Server 端线程池数据、动态更新线程池配置以及采集上报线程池运行时数据等
2. 基础组件
2.1 配置中心(Config)
配置中心位于 Server 端,它的主要作用是监控 Server 端线程池配置变更,实时通知到 Client 实例执行线程池变更流程
代码设计基于 Nacos 1.x 版本的 长轮询以及异步 Servlet 机制 实现
2.2 注册中心(Discovery)
负责管理 Client 端(单机或集群)注册到 Server 端的实例,包括不限于实例注册、续约、过期剔除 等操作,代码基于 Eureka 源码实现
上面的配置中心很容易理解,动态线程池参数变更的根本。但是注册中心是用来做什么的?
注册中心管理 Client 端注册的实例,通过这些实例可以 实时获取线程池的运行时参数信息
目前的设计是如此,不排除后续基于 Discovery 做更多的扩展
2.3 控制台(Console)
对接前端项目,包括不限于以下模块管理
2.4 抽象工具(Tools)
顾名思义就是将某些工具单独抽象出来,并以 Module 的形式进行展现,这样的拆分方式有两点好处:一是更符合职责分离特性,二是需要用到某块功能,做到拿来即用
目前已集成两块内容:
- log-record-tool:基于 mzt-biz-log[3] 的操作日志变更记录组件
- open-change-tool:监控 Hippo4J 项目在 GitHub 的 Star Fork 变更,默认五分钟内有变更则通知
3. 消息通知(Notify)
Hippo4J 内置了很多需要通知的事件,比如:线程池参数变更通知、线程池活跃度报警、拒绝策略执行报警以及阻塞队列容量报警等
目前 Notify 已经接入了钉钉,后续持续集成企业微信、邮件、短信等通知渠道;并且,Notify 模块提供了消息事件的 SPI 方案,可以接受三方自定义的推送
4. Hippo4j-Spring-Boot-Starter
熟悉 SpringBoot 的小伙伴对 Starter 应该不会陌生。Hippo4J 提供以 Starter Jar 包的形式嵌套在应用内,负责与 Server 端完成交互
Starter Jar 包推送到 Maven 公共仓库,目前公共仓库已存在 0.0.2 版本的 Jar
文章转自公众号:龙台的技术笔记