最近,有很多同学在微信上问我这么一个问题:
Hippo4j 动静线程池框架是美团开源的么 ?
相似于这样的问题还挺多,在这里对立回复下:
美团官网并没有开源任何对于动静线程池的框架 。
美团官网对于对动静线程池框架的惟一产出,来自于大家基本上看过或者有印象的一篇博客。
Java 线程池实现原理及其在美团业务中的实际
如果不理解动静线程池概念的同学能够深刻理解下。文章深入浅出,讲的很透彻,同时也是美团罪受欢迎的文章之一。
在此之后, 美团官网并没有基于动静线程池这个 IDEA 做任何的产出 。不过,开源社区基于美团这篇文章做了很多开源框架,比方笔者开源的 Hippo4j,以及另外一位开源作者 DynamicTP 框架等。
说完 Hippo4j 是否美团动静线程池开源后,接下来和大家聊两件和平时工作无关并且有意思的事。
公众号:马丁玩编程,关注回复:材料,支付后端技术专家成长手册。
美团动静线程池框架为什么没有开源
依据我的想法,如果当初美团推出动静线程池概念后,趁势推出一款开源框架,必定会“爆火”。
毕竟,对于工作这么多年的开发来说,谁的线上环境还没有被线程池“坑”过呢。
然而,理论却没有依照这种构想倒退,我就找了在美团工作的敌人聊了聊,上面依据我的理解说下是怎么回事。
1. 依赖办公软件大象
动静参数告诉和线程池运行中报警,都须要通过办公通信软件或者邮件进行告诉。
通过下面提到的美团动静线程池文章可知,在线程池变更告诉和过载告警性能上,依赖了美团办公通信软件大象。
<img src=”https://images-machen.oss-cn-beijing.aliyuncs.com/image-20230214214820444.png” style=”zoom:50%;” />
如果要开源,如何进行革新呢?
基于告诉报警计划,其实很好解决,形象进来一个告诉接口以及外围参数,并提供 SPI 加载形式,基本上就能实现开源兼容适配。
2. 依赖监控工具 Cat
美团线程池反对查看外部工作级别的执行状况,进行细粒度工作级别监控。
外围原理是通过 Cat Transaction 打点进行的反对,下图表就是从 Cat 上汇总进行展现。
Cat 这种依赖,不太好替换,因为会对原有业务代码进行侵入。如果说开源计划的话,可能就须要就义一部分功能性或者针对动静线程池框架底层实现这一性能。
3. 依赖音讯队列 Kafka
通过美团文章中看到线程池框架应用了 Kafka 音讯队列,这里暂且当一个存疑点,动静线程池中哪局部业务须要应用 Kafka 呢?
如果说应用动静线程池性能,还须要依赖音讯队列,这可能对于大部分场景来说是说不通用的。
如果要进行开源,我的倡议和想法是将这里设置为可替换项。也就是说默认不反对 MQ 性能,同时对市场上支流 MQ 进行适配。如果客户端我的项目想用的话,可依据我的项目理论抉择。
比拟常见的是 Seata 和 SkyWalking 的做法,以 SkyWalking 举例,链路数据存储反对 H2、MySQL、ElasticSearch 等数据库,让用户依据场景以及服务体量灵便抉择。
4. 动静线程池是监控体系中的“小”模块
之前有和美团的一位技术敌人沟通过,为什么美团的动静线程池框架没有开源进去?
他给我的回复是,动静线程池框架只是美团监控体系下一个“小”模块。
而且,依据不可靠消息,仿佛外部该框架的实现不止一个,如果有美团的哥们看到能够评论下。
5. 小结
通过下面的剖析,在这里我得出一个论断: 美团在最后设计开发动静线程池时,仿佛就没有打算对外开源。因而才会依赖如此多的组件以及美团外部的产品 。
上文中所有想法都是笔者主观想法,理论状况有待讲究。
如何辨认框架是否官网开源
1. 开源仓库
国内公司中开源框架比拟多的,基本上都会在 GitHub 命名空间下运维我的项目。
这里列举一些大厂开源公司对应的官网 GitHub 地址。
- 阿里巴巴:https://github.com/alibaba
- 腾讯:https://github.com/tencent
- 美团:https://github.com/meituan
- ……
2. 依赖包地址
在咱们导入依赖包的时候,会输出 groupId、artifactId、version 三种信息,是否官网开源在 groupId 上根本就能体现进去。
groupId:个别由三局部组成, 标识. 公司名. 我的项目名
,拿 Apache、Alibaba 两个组织的 groupId 举例子阐明。
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>${shardingsphere-jdbc-core-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-starter-alibaba-nacos-discovery.version}</version>
</dependency>
所以,如果说我的项目为官网开源,那么通过 groupId 很容易就能辨别出来。
3. 非官方地址就不是官网开源的么
非官方地址就不是官网开源的么,也不肯定,并不是所有我的项目都在公司命名空间下倒退。
有些我的项目是独立于公司创立的命名空间,比如说阿里的 seata、ant-design 等。
- https://github.com/ant-design/ant-design
- https://github.com/seata/seata
再比方美团一篇比拟火的文章,讲的是操作日志如何记录,置信大多数同学也都有看到。
如何优雅地记录操作日志?
GitHub:https://github.com/mouzt/mzt-biz-log
同样不是官网开源,然而开源我的项目是由文章自己进行保护,代码品质和我的项目活跃度不输官网保护我的项目。
什么是 Hippo4j
下面说了很多对于开源的小常识,接下来向大家介绍下笔者开源的动静线程池框架 Hippo4j。
原理:通过对 JDK 线程池的加强,以及扩大三方框架底层线程池等性能,为业务零碎进步线上运行保障能力。
Hippo4j 提供了两种模式,一种是 依赖配置核心,另一种是 无中间件依赖,部署个 Jar 包就能带来 Web 端控制台应用。
GitHub:https://github.com/opengoofy/hippo4j
Gitee:https://gitee.com/magestack/hippo4j
1. 线程池痛点
如果有在我的项目中理论应用线程池,置信你可能会遇到以下痛点:
- 线程池轻易定义,线程资源过多,造成服务器高负载。
- 线程池参数不易评估,随着业务的并发晋升,业务面临呈现故障的危险。
- 线程池工作执行工夫超过均匀执行周期,开发人员无奈感知。
- 线程池工作沉积,触发回绝策略,影响既有业务失常运行。
- 当业务呈现超时、熔断等问题时,因为没有监控,无奈确定是不是线程池引起。
- 原生线程池不反对运行时变量的传递,比方 MDC 上下文遇到线程池就 GG。
- 无奈执行优雅敞开,当我的项目敞开时,大量正在运行的线程池工作被抛弃。
- 线程池运行中,工作执行进行,狐疑产生死锁或执行耗时操作,然而无从下手。
2. 性能反对
基于以上痛点,Hippo4j 提供以下线程池性能扩大反对:
- 全局管控 – 治理利用线程池实例。
- 动静变更 – 利用运行时动静变更线程池参数,包含但不限于:外围、最大线程数、阻塞队列容量、回绝策略等。
- 告诉报警 – 内置四种报警告诉策略,线程池活跃度、容量水位、回绝策略以及工作执行工夫超长。
- 数据采集 – 反对多种形式采集线程池数据,包含但不限于:日志、内置采集、Prometheus、InfluxDB、ElasticSearch 等。
- 运行监控 – 实时查看线程池运行时数据,自定义工夫内线程池运行数据图表展现。
- 性能扩大 – 反对线程池工作传递上下文;我的项目敞开时,反对期待线程池在指定工夫内实现工作。
- 多种模式 – 内置两种应用模式:依赖配置核心 和 无中间件依赖。
- 容器治理 – Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更。
- 框架适配 – Dubbo、Hystrix、RabbitMQ、RocketMQ 等生产线程池运行时数据查看和线程数变更。
- 变更审核 – 提供多种用户角色,普通用户变更线程池参数须要 Admin 用户审核方可失效。
- 动态化插件 – 内置多种线程池插件,反对用户自定义插件以及运行时扩大。
- 多版本适配 – 通过理论测试,已反对客户端 SpringBoot 1.5.x => 2.7.5 版本(更高版本未测试)。
3. 小结
截止目前,共计 30+ 公司 线上应用 Hippo4j 治理利用线程池,应用公司中包含领取、电商、快递、保险以及教育等行业。
同时,共有 86 名 开源同学对 Hippo4j 进行了代码奉献,有 10 名 小伙伴继续投入较多精力保护,晋升为 Hippo4j Committer,失去官网反对 Jetbrains 全家桶 Licenses。
最初总结
对于动静线程池的热度始终居高不下,本篇文章讲述了美团动静线程池的上下文,以及对为什么没有开源进行了简略剖析。
最终得出的论断是: 美团最后设计动静线程池时就没有打算开源,所以才会依赖美团相干中间件以及 Kafka 等“重量级”组件 。
同时针对有些同学说无奈分辨框架是否官网开源,笔者针对这个话题做了几项总结输入。
最初,介绍了下 GitHub 开源畛域中比拟火的我的项目 Hippo4j,如果各位同学感觉不错能够继续关注。
GitHub:https://github.com/opengoofy/hippo4j
Gitee:https://gitee.com/magestack/hippo4j