您现在的位置是:亿华云 > 数据库
美团的动态线程池,不依赖中间件可以实现么?
亿华云2025-10-03 22:29:56【数据库】0人已围观
简介为什么写这个项目?大家好,我是龙台。美团线程池文章[1] 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而引发了一系列思考。最终决定封装线程池动态参数调整,扩展线程池监控以及消息报警
为什么写这个项目?美团
大家好,我是态线龙台。
美团线程池文章[1] 介绍中,程池因为业务对线程池参数没有合理配置,不依触发过几起生产事故,赖中进而引发了一系列思考。间件最终决定封装线程池动态参数调整,可实扩展线程池监控以及消息报警等功能
在开源平台找了挺多动态线程池项目,美团从功能性以及健壮性而言,态线个人感觉不满足企业级应用
因为对动态线程池比较感兴趣,程池加上想写一个有意义的不依项目,所以决定自己来造一个轻量级的赖中轮子
想给项目起一个简单易记的名字,类似于 Eureka、间件Nacos、可实Redis;后来和朋友商量,美团决定以动物命名:Hippo(河马)
GitHub:https://github.com/acmenlt/dynamic-threadpool(建议复制到电脑查看)
├── dynamic-threadpool │ ├── dynamic-threadpool-common -- 公共模块 │ ├── dynamic-threadpool-config -- 配置中心 │ ├── dynamic-threadpool-console -- 控制台 │ ├── dynamic-threadpool-discovery -- 注册中心 │ ├── dynamic-threadpool-spring-boot-starter -- Client 依赖组件 │ ├── dynamic-threadpool-example -- 示例项目 │ └── dynamic-threadpool-server -- 服务端 │ └── dynamic-threadpool-tools -- 抽象工具类它解决了什么问题?
线程池在业务系统应该都有使用到,帮助业务流程提升效率以及管理线程,多数场景应用于大量的异步任务处理
虽然线程池提供了我们许多便利,但也并非尽善尽美,比如下面这些问题就无法很好解决
如果线程池的配置涉及到上述问题,那么就有可能需要发布业务系统来解决;如果发布后参数仍不合理,继续发布......
Hippo 很好解决了这个问题,它将业务中所有线程池统一管理,遇到上述问题不需要发布系统就可以替换线程池参数
它有什么特性?
应用系统中线程池并不容易管理
参考美团的设计,云服务器提供商Hippo 按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作
举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目
Hippo 除去动态修改线程池,还包含实时查看线程池运行时指标、负载报警、配置日志管理等。具体功能如下图
如何运行 Demo?
目前动态线程池功能已经完成,可以直接把代码拉到本地运行。项目中数据库是作者 ECS Docker 搭建,大家直接使用即可
启动 dynamic-threadpool-server 模块下 ServerApplication 应用类 启动 dynamic-threadpool-example 模块下 ExampleApplication 应用类通过接口修改线程池中的配置。HTTP POST 路径:http://localhost:6691/v1/cs/configs,Body 请求体如下:
{ "ignore": "tenantId、itemId、tpId 代表唯一线程池,高防服务器请不要修改", "tenantId": "common", "itemId": "message-center", "tpId": "message-produce", "coreSize": 10, "maxSize": 15, "queueType": 9, "capacity": 100, "keepAliveTime": 10, "rejectedType": 7, "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 等中间件项目的优雅设计
总结回顾
小编是个有代码洁癖的程序员,项目中的代码开发完全遵守阿里巴巴代码规约,也推荐大家使用,培养好的编码习惯
参考资料
[1]美团线程池文章: https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
云服务器很赞哦!(9515)
相关文章
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 到底该用Kotlin开发Android应用,还是用Java?
- 我从读源码中收获到了什么?阅读源码那点小事
- 什么是解决方案架构师?IT业务协调的关键角色
- 小白注册网站域名该怎么办?有什么步骤?
- 期待已久!高德地图AR步行导航来了:走路再不怕迷路
- SpringMVC 源码分析之 FrameworkServlet
- VR虚拟现实技术遇上文旅将擦出什么火花 ?
- 为什么喜欢国外注册域名?国外注册域名注意什么?
- Java 16 正式发布,已经是Java 8的两倍了