From 4b7a8c4f6833218166e7c06503aa1f6e955239fa Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 3 Dec 2021 21:11:58 +0800 Subject: [PATCH] Update README.md --- README.md | 181 +++++++++++------------------------------------------- 1 file changed, 36 insertions(+), 145 deletions(-) diff --git a/README.md b/README.md index 82b0b9686c..e3dc5073d5 100644 --- a/README.md +++ b/README.md @@ -1,144 +1,58 @@ -
- -
-

- :fire:   动态线程池(Hippo4J)系统,包含 Server 端及 SpringBoot Client 端需引入的 Starter. -

-

- - - - - - +![](https://images-machen.oss-cn-beijing.aliyuncs.com/hippo4j-logo-logoly.png) + +

+ + GitHub LICENSE - - - -

-## 为什么写这个项目? - -[美团线程池文章](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html "美团线程池文章") 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而引发了一系列思考。最终决定封装线程池动态参数调整,扩展线程池监控以及消息报警等功能 - -在开源平台找了挺多动态线程池项目,从功能性以及健壮性而言,个人感觉不满足企业级应用 - -因为对动态线程池比较感兴趣,加上想写一个有意义的项目,所以决定自己来造一个轻量级的轮子 - -想给项目起一个简单易记的名字,类似于 Eureka、Nacos、Redis;后和朋友商量,决定以动物命名:**Hippo4J** - -![](https://user-images.githubusercontent.com/77398366/139702684-17595e6e-a743-4a33-a0be-0626967f32f5.png) - -## 它解决了什么问题? - -线程池在业务系统应该都有使用到,帮助业务流程提升效率以及管理线程,多数场景应用于大量的异步任务处理 - -虽然线程池提供了我们许多便利,但也并非尽善尽美,比如下面这些问题就无法很好解决 - -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023160830084.png) - -如果线程池的配置涉及到上述问题,那么就有可能需要发布业务系统来解决;如果发布后参数仍不合理,继续发布...... - -Hippo4J 很好解决了这个问题,它将业务中所有线程池统一管理,遇到上述问题不需要发布系统就可以替换线程池参数 - -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023142726818.png) +## Hippo4J 介绍 -## 它有什么特性? +- Hippo4J 是基于 [美团线程池](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html) 设计理念开发,针对线程池展开的动态调参、监控、报警 +- C/S 架构部署使用。部署 Server 端,SpringBoot 项目引入 Starter 与之交互 +- 通过 Web 控制台对线程池参数进行动态调整,同时支持集群内线程池的差异化配置 +- Starter 组件内置线程池参数变更通知,以及运行过载报警功能(支持多通知平台) -应用系统中线程池并不容易管理。参考美团的设计,Hippo4J 按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作 +> Hippo4J 按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作 +> +> 举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目 -举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目 +## 解决什么问题 -| 模块 | 模块名称 | 注释 | -| --------------------------- | ---------- | ---------------------------------------- | -| hippo4j-auth | 用户权限 | 用户、角色、权限等功能 | -| hippo4j-common | 公共模块 | - | -| hippo4j-config | 配置中心 | 提供线程池准实时更新功能 | -| hippo4j-console | 控制台 | 对接前端项目 | -| hippo4j-discovery | 注册中心 | 提供线程池项目实例注册、续约、下线等功能 | -| hippo4j-spring-boot-starter | Starter | 客户端依赖组件 | -| hippo4j-example | 示例项目 | - | -| hippo4j-server | 服务端 | Server 集成各组件 | -| hippo4j-tools | 抽象工具类 | GitHub 变更监控、操作日志等组件 | +简单来说,Hippo4J 主要为我们解决了下面这些使用原生线程池存在的问题: -Hippo4J 除去动态修改线程池,还包含实时查看线程池运行时指标、负载报警、配置日志管理等 +- **频繁抛出拒绝策略** :核心线程过小,阻塞队列过小,最大线程过小 +- **线程处理速度下降** :核心线程过小,阻塞队列过小,最大线程过大 +- **任务堆积** :核心线程过小,阻塞队列过大 +- **空闲线程资源浪费** :核心线程或最大线程过大 +- **线程池执行不可知** :线程池运行过程中无法得知具体的参数信息,包括不限于任务调度及拒绝策略执行次数 -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023101844619.png) +## 模块介绍 -## 如何运行 Demo? +- `hippo4j-auth`:用户、角色、权限等 +- `hippo4j-common`:多个模块公用代码实现 +- `hippo4j-config`:提供线程池准实时参数更新功能 +- `hippo4j-console`:对接 Web 前端项目 +- `hippo4j-discovery`:提供线程池项目实例注册、续约、下线等功能 +- `hippo4j-spring-boot-starter`:负责与 Server 端交互的依赖组件 +- `hippo4j-example` :示例工程 +- `hippo4j-server` :聚合 Server 端发布需要的模块 +- `hippo4j-tools` :操作日志等组件代码 -目前动态线程池功能已经完成,可以直接把代码拉到本地运行。导入 [Hippo4J 初始化 SQL 语句](./hippo4j-server/src/main/resources/hippo_manager.sql) +## 快速开始 -1. 启动 `hippo4j-server` 模块下 ServerApplication 应用类 -2. 启动 `hippo4j-example` 模块下 ExampleApplication 应用类 +[运行 Hippo4J 自带 Demo 参考文档](https://hippox.cn/zh-cn/docs/run/demo.html) -> 🌟   Hippo4J 已集成前端项目,详情参考 [Run Console](http://hippox.cn/zh-cn/docs/run/runConsole.html) +## Stars 趋势 -通过接口修改线程池中的配置。HTTP POST 路径:http://localhost:6691/v1/cs/configs ,Body 请求体如下: - -```json -{ - "ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改", - "tenantId": "prescription", - "itemId": "dynamic-threadpool-example", - "tpId": "message-produce", - "coreSize": 10, - "maxSize": 15, - "queueType": 9, - "capacity": 100, - "keepAliveTime": 10, - "rejectedType": 3, - "isAlarm": 0, - "capacityAlarm": 81, - "livenessAlarm": 82 -} -``` - -接口调用成功后,观察 dynamic-threadpool-example 控制台日志输出,日志输出包括不限于此信息即为成功 - -```tex -[🔥 MESSAGE-PRODUCE] Changed thread pool. coreSize :: [11=>10], maxSize :: [15=>15], queueType :: [9=>9] -capacity :: [100=>100], keepAliveTime :: [10000=>10000], rejectedType :: [7=>7] -``` - -现阶段已集成钉钉消息推送,后续会持续接入企业微信、邮箱、飞书、短信等通知渠道。可以通过添加钉钉群体验消息推送,群号:31764717 - - - - - - -
- -
- 配置变更 -

-
- -
- 报警通知 -

-
- -项目代码功能还在持续开发,初定发布 1.0.0 RELEASE 完成以下功能。部署了 Server 服务,只需要引入 Starter 组件到业务系统中,即可完成动态修改、监控、报警等特性 - -## 查看源码能收获什么? - -目前还没有发布 Release 版本,小伙伴可以阅读框架源码,查看框架中好的设计理念或者编码技巧 - -在项目开发过程中,借鉴了 Nacos、Eureka、Seata、ShardingSphere 等中间件项目的优雅设计 - -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023143632685.png) - -## Github Stars 趋势 +[![Stargazers over time](https://starchart.cc/acmenlt/dynamic-threadpool.svg)](https://starchart.cc/acmenlt/dynamic-threadpool) -如果小伙伴查看源码设计有所收获,辛苦点个 🚀 Star ,方便后续查看 +## 联系我 -[![Stargazers over time](https://starchart.cc/acmenlt/dynamic-threadpool.svg)](https://starchart.cc/acmenlt/dynamic-threadpool) +对于这个项目,是否有什么不一样看法,同 [作者](https://hippox.cn/zh-cn/docs/other/exchange.html) 或者创建 [Issues](https://github.com/acmenlt/dynamic-threadpool/issues) 沟通 ## 致谢 @@ -149,26 +63,3 @@ Hippo4J 项目基于或参考以下项目: 3. [ShardingSphere](https://github.com/apache/shardingsphere):Build criterion and ecosystem above multi-model databases. 4. [mzt-biz-log](https://github.com/mouzt/mzt-biz-log):支持 Springboot,基于注解的可使用变量、可以自定义函数的通用操作日志组件. 5. [equator](https://github.com/dadiyang/equator):一个用于比较两个对象的所有属性是否全部相等,并且可以获取所有不相等的属性的比对器. - -## 最后 - -小编是个有代码洁癖的程序员,项目中的代码开发完全遵守阿里巴巴代码规约,也推荐大家使用,培养好的编码习惯 - -对于这个项目,是否有什么不一样看法,欢迎在 Issue 一起沟通交流;或者添加小编微信进交流群 - - - - - - -
- -
- -

-
- -
- -

-