Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力
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.
 
 
 
 
 
Go to file
chen.ma fa6d05f748
docs: 补充 Hippo SQL 表注释及表顺序调节.
3 years ago
common optimize: 非 spring 环境启动自定义线程池时不发送报警消息. 3 years ago
config feature: 线程池新增或修改接口添加拒绝策略字段. 3 years ago
console feature: 服务端提供获取 ThreadPool 集群环境具体实例功能. 3 years ago
discovery Change the directory and use revision. 3 years ago
dynamic-threadpool-spring-boot-starter feature: 开发线程池报警频率限制, 默认推送间隔五分钟(可通过配置修改). 3 years ago
example feature: 开发线程池报警频率限制, 默认推送间隔五分钟(可通过配置修改). 3 years ago
server docs: 补充 Hippo SQL 表注释及表顺序调节. 3 years ago
tools feature: 抽象通用组件, 源码阅读者可以很方便集成到各自项目. 3 years ago
.gitignore first commit 3 years ago
LICENSE Change license. 3 years ago
README.md Update README.md 3 years ago
pom.xml feature: 借鉴 @mouzt、@dadiyang 两位大佬开源框架实现操作日志工具. 3 years ago

README.md

🔥   动态线程池DTP系统包含 Server 端及 SpringBoot Client 端需引入的 Starter.

LICENSE


为什么写这个项目?

美团线程池文章 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而引发了一系列思考。最终决定封装线程池动态参数调整,扩展线程池监控以及消息报警等功能

在开源平台找了挺多动态线程池项目,从功能性以及健壮性而言,个人感觉不满足企业级应用

因为对动态线程池比较感兴趣,加上想写一个有意义的项目,所以决定自己来造一个轻量级的轮子

想给项目起一个简单易记的名字,类似于 Eureka、Nacos、Redis后来和朋友商量决定以动物命名Hippo河马


它解决了什么问题?

线程池在业务系统应该都有使用到,帮助业务流程提升效率以及管理线程,多数场景应用于大量的异步任务处理

虽然线程池提供了我们许多便利,但也并非尽善尽美,比如下面这些问题就无法很好解决


如果线程池的配置涉及到上述问题,那么就有可能需要发布业务系统来解决;如果发布后参数仍不合理,继续发布......

Hippo 很好解决了这个问题,它将业务中所有线程池统一管理,遇到上述问题不需要发布系统就可以替换线程池参数


它有什么特性?

应用系统中线程池并不容易管理。参考美团的设计Hippo 按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作

举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目


模块 模块名称 注释
dynamic-threadpool-common 公共模块 -
dynamic-threadpool-config 配置中心 提供线程池准实时更新功能
dynamic-threadpool-console 控制台 对接前端项目
dynamic-threadpool-discovery 注册中心 提供线程池项目实例注册、续约、下线等功能
dynamic-threadpool-spring-boot-starter SpringBoot Starter -
dynamic-threadpool-example 示例项目 -
dynamic-threadpool-server 服务端 Server 集成各组件
dynamic-threadpool-tools 抽象工具类 Swagger、操作日志等组件

Hippo 除去动态修改线程池,还包含实时查看线程池运行时指标、负载报警、配置日志管理等


如何运行 Demo

目前动态线程池功能已经完成,可以直接把代码拉到本地运行。导入 Hippo 初始化 SQL 语句

  1. 启动 dynamic-threadpool-server 模块下 ServerApplication 应用类
  2. 启动 dynamic-threadpool-example 模块下 ExampleApplication 应用类

通过接口修改线程池中的配置。HTTP POST 路径:http://localhost:6691/v1/cs/configs Body 请求体如下:

{
    "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 控制台日志输出,日志输出包括不限于此信息即为成功

[🔥 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 等中间件项目的优雅设计


Github Stars 趋势

如果小伙伴查看源码设计有所收获,辛苦点个 🚀 Star ,方便后续查看

Stargazers over time


最后

小编是个有代码洁癖的程序员,项目中的代码开发完全遵守阿里巴巴代码规约,也推荐大家使用,培养好的编码习惯

对于这个项目,是否有什么不一样看法,欢迎在 Issue 一起沟通交流;或者添加小编微信进交流群