You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hippo4j/README.md

138 lines
5.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<div align=center>
<img src="https://images-machen.oss-cn-beijing.aliyuncs.com/Dynamic-Thread-Pool-Main.jpeg" />
</div>
<p align="center">
<strong> :fire: &nbsp; 动态线程池DTP系统包含 <a href="https://github.com/acmenlt/dynamic-threadpool/tree/develop/dynamic-threadpool-server">Server</a> 端及 SpringBoot Client 端需引入的 <a href="https://github.com/acmenlt/dynamic-threadpool/tree/develop/dynamic-threadpool-spring-boot-starter">Starter</a>.</strong>
</p>
<p align="center">
<img src="https://img.shields.io/badge/Author-龙台-blue.svg" />
<a target="_blank" href="http://mp.weixin.qq.com/s?__biz=Mzg4NDU0Mjk5OQ==&mid=100007311&idx=1&sn=d325c1a509d6ee89469a1134ac0a8cf5&chksm=4fb7c6f778c04fe111e9cf52723675b8e8cbbbf9e848741a5d9c20620ff6c778b6613e021a34&scene=18#wechat_redirect">
<img src="https://img.shields.io/badge/公众号-龙台 blog-yellow.svg" />
</a>
<a target="_blank" href="https://github.com/acmenlt/dynamic-threadpool">
<img src="https://img.shields.io/badge/⭐-github-orange.svg" />
</a>
<a href="https://github.com/acmenlt/dynamic-threadpool/blob/develop/LICENSE">
<img src="https://img.shields.io/github/license/acmenlt/dynamic-threadpool?color=42b883&style=flat-square" alt="LICENSE">
</a>
<img src="https://img.shields.io/badge/JDK-1.8+-green?logo=appveyor" />
<img src="https://tokei.rs/b1/github/acmenlt/dynamic-threadpool?category=lines" />
<img src="https://img.shields.io/badge/release-v0.2.0-violet.svg" />
<img src="https://img.shields.io/github/stars/acmenlt/dynamic-threadpool.svg" />
</p>
<br/>
## 这个项目做什么?
动态线程池Dynamic-ThreadPool下面简称 DTP 系统
[美团线程池文章](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html) 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而引发了一系列思考。最终决定封装线程池动态参数调整,扩展线程池监控以及消息报警等功能
笔者不是一个喜欢重复造轮子的 Coder因为美团没有开源动态线程池系统所以选择造一个轻量级的轮子
<br/>
## 它解决了什么问题?
线程池在业务系统应该都有使用到,帮助业务流程提升效率以及管理线程
但是线程池也并非尽善尽美。比如下面这些问题就无法很好解决:
1. 核心线程过小,阻塞队列过小,最大线程过小,**导致接口频繁抛出拒绝策略异常**
2. 核心线程过小,阻塞队列过小,最大线程过大,**导致线程调度开销增大,处理速度下降**
3. 核心线程过小,阻塞队列过大,导致任务堆积,**接口响应或者程序执行时间拉长**
4. 核心线程过大,**导致线程池内空闲线程过多,过多的占用系统资源**,造成资源浪费
如果线程池的配置涉及到上述问题,那么就有可能需要发布业务系统来解决;如果发布后参数仍不合理,继续发布......
DTP 系统很好解决了这个问题,它将业务中所有线程池统一管理,遇到上述问题不需要发布系统就可以替换线程池参数
另外,支持看线程池运行实时状态。如果监控发现线程池负载、队列负载以及拒绝策略指标异常,判断参数是否合理,可以及时排查问题以及修复
<br/>
## 它有什么特性?
应用系统中线程池并不容易管理。为此DTP 项目按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作
举个例子,笔者在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目
从功能性上来说DTP 系统是对标美团文章中所介绍的。所以DTP 系统除去动态修改线程池,还包含实时查看线程池运行时指标、负载报警、配置日志管理等。具体功能如下图
![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20210807134946141.png)
笔者并没有接触过美团线程池的具体功能,只是在文章上看了功能介绍,所以在完成路径上会有所差池
<br/>
## 如何运行 Demo
目前动态线程池功能已经完成,可以直接把代码拉到本地运行。项目中数据库是作者 ECS Docker 搭建,大家直接使用即可
1. 启动 dynamic-threadpool-server 模块下 ServerApplication 应用类
2. 启动 dynamic-threadpool-example 模块下 ExampleApplication 应用类
<br/>
通过接口修改线程池中的配置。HTTP POST 路径http://localhost:6691/v1/cs/configs Body 请求体如下:
```json
{
"ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改",
"tenantId": "common",
"itemId": "message-center",
"tpId": "custom-pool",
"coreSize": 10,
"maxSize": 15,
"queueType": 9,
"capacity": 100,
"keepAliveTime": 10,
"rejectedType": 7,
"isAlarm": 0,
"capacityAlarm": 81,
"livenessAlarm": 82
}
```
<br/>
接口调用成功后,观察 dynamic-threadpool-example 控制台日志输出,日志输出包括不限于此信息即为成功
```tex
[🔥 CUSTOM-POOL] Changed thread pool. coreSize :: [11=>10], maxSize :: [15=>15], queueType :: [9=>9]
capacity :: [100=>100], keepAliveTime :: [10000=>10000], rejectedType :: [7=>7]
```
<br/>
项目代码功能还在持续开发,初定发布 1.0.0 RELEASE 完成以下功能。部署了 Server 服务,只需要引入 Starter 模块到业务系统中,即可完成动态修改、监控、报警等特性,敬请期待
<br/>
## 最后
笔者是个有代码洁癖的程序员DTP 项目中的代码开发完全遵守阿里巴巴代码规约,也推荐大家使用
如果小伙伴看到这里,觉得项目功能规划、代码设计还不错的话,辛苦点个 🚀 Star ,方便后续查看,祝好。