写在前面
如果你是一名Java开发者,下面说到的这些开源项目应该不陌生了。在实际工作中或多或少都用到过。
趁着周末,特地整理下阿里巴巴旗下开源的10款顶级项目
TOP10 rocketmq
① 简介
RocketMQ
是一个分布式消息中间件。专门负责在不同的软件系统之间传递消息
最初由阿里巴巴开发并在2012年开源,在2017年,RocketMQ
成为了 Apache 软件基金会的顶级项目。
RocketMQ
不仅在阿里巴巴内部广泛使用,也被许多其他公司采用,适用于各种场景,如金融交易、电商订单处理、日志聚合、流数据处理等
② 开源地址
https://github.com/apache/rocketmq
③ 目前stars数
20.8k
⭐
④ 特点,为了能直观说明其特点,这里我们以快递小哥为例来说明
- 速度快: 就像快递小哥不再骑自行车送快递,而是骑的电动车,
RocketMQ
处理消息的速度非常快,可以同时处理很多消息。
- 靠谱: 即使遇到刮风下雨,快递小哥也会想尽办法把快递送到。
RocketMQ
也有类似的能力,即使系统出了点问题,它也能确保消息不会丢失,可靠地送达。
- 灵活: 快递小哥可以根据不同的需求,选择不同的路线和方式送快递。
RocketMQ
也可以根据需要,灵活地部署和配置,适应不同的使用场景。
- 能存很多东西: 快递仓库可以放很多快递包裹。
RocketMQ
也能存储大量的信息,即使一下子来了很多消息,它也能先存起来,慢慢地发送。
- 有序: 快递小哥送快递时,相同地址的快递会放在一起送。
RocketMQ
也能让相同业务的消息按照顺序一个接一个地处理。
- 延时服务: 有时候我们会选择定时派送服务,比如让快递明天再送。
RocketMQ
也支持这种延时发送消息的功能。
- 过滤服务: 快递小哥在送快递时,会根据收件人的要求只送特定的快递。
RocketMQ
也允许消费者只接收他们感兴趣的消息。
- 处理复杂情况: 如果快递在途中遇到问题,快递公司会有一套办法来处理。
RocketMQ
也有类似的机制,比如消息发送失败了可以重试,或者把消息放到一个特殊的地方等待处理。
- 容易监控: 快递公司会有系统来监控快递的状态。
RocketMQ
也有这样的监控系统,可以实时查看消息处理的状态和性能。
TOP9 Sentinel
① 简介
Sentinel 是阿里巴巴开源的一个流量控制框架,就像餐厅或者旅游景点控制流量的“门卫”一样,专门用来保护你的软件服务不被过多的请求压垮
② 开源地址
https://github.com/alibaba/Sentinel
③ 目前stars数
22.2k
⭐
④ 特点
想象一下,你开了一家餐厅,生意特别火,每天都有很多人来吃饭。但是,餐厅的接待能力是有限的,不可能一下子接待所有的顾客。这时候,你需要一个“门卫”,来控制进店的顾客数量,保证餐厅的服务质量不受影响。这个“门卫”,在软件世界里,就是 Sentinel
。
它主要有以下几个作用:
- 流量控制:就像餐厅的门卫控制进店的顾客数量一样,
Sentinel
可以控制进入你的软件服务的请求数量。如果请求太多,它就会拒绝一些请求,避免系统崩溃。
- 熔断机制:如果你的餐厅厨房突然出了问题,门卫会告诉顾客暂时不要进店,等厨房修好了再继续营业。
Sentinel
也有类似的功能,当系统出现问题时,它可以暂时停止服务,避免问题进一步扩大。
- 系统保护:餐厅的门卫不仅要控制人数,还要保护餐厅的安全。
Sentinel
也可以监控系统的运行状态,一旦发现系统负载过高,就会采取措施保护系统,比如减少请求量。
- 灵活配置:餐厅的门卫可以根据实际情况调整接待策略,比如节假日人多就多接待一些。
Sentinel
也支持灵活配置,你可以根据需要调整流量控制的策略。
- 实时监控:餐厅的门卫需要随时了解店内的情况,
Sentinel
也有实时监控的功能,可以实时查看系统的运行状态和流量情况。
- 易于集成:就像餐厅的门卫不需要顾客做太多配合一样,
Sentinel
也很容易集成到现有的系统中,不需要做太多的改动。
总之,Sentinel
就像是一个智能的“门卫”,帮助你管理软件服务的流量,保证系统的稳定运行。
功能概述 如下图所示
TOP8 fastjson
① 简介
fastjson
是一个由阿里巴巴开发并开源的高性能 JSON
处理库,主要用于 Java 应用程序。
它的设计目标是在保证速度的同时简化JSON
数据的序列化和反序列化过程
② 开源地址
https://github.com/alibaba/fastjson
③目前stars数
25.7k
⭐
④ 特点
- 高性能:
FastJSON
通过优化算法和减少反射调用等方式,实现了非常快的 JSON
序列化和反序列化速度。
- 它在处理大量数据时表现出色,尤其适合高并发和大数据量的场景。
- 轻量级:
FastJSON
没有外部依赖,可以直接在任何使用 JDK
的环境中运行,无需添加额外的 jar
文件。
- 功能丰富:
- 支持 Java 中常见的数据类型,包括基本类型、
JavaBeans
、集合、Map
、日期、枚举和泛型等。
- 支持
JSON
格式的数据处理,包括解析、生成和修改 JSON
字符串。
- 安全性:
FastJSON
在安全方面持续改进,修复了多个潜在的安全漏洞,以防止反序列化攻击等安全风险。
- 易用性:
- 提供了简洁的
API
接口,使得 JSON
数据的处理变得简单直观。
- 支持自定义序列化器和反序列化器,以便处理复杂的数据结构或特殊需求。
- 开源许可:
- 使用
Apache License 2.0
许可证发布,这意味着它是完全免费的,可以用于商业项目。
fastjson
的评价,网络上可是褒贬不一,曾经爆出过存在安全漏洞及bug
处于这些原因,作者也是退出了FastJson2
,在FastJson
上做了重大版本更新,旨在解决之前提出的安全性问题及bug修复,
同时还增加了一些新特性及性能也得到了提升
下面是FastJson2
开源地址
https://github.com/alibaba/fastjson2
目前已有**3.6k
** ⭐
TOP7 spring-cloud-alibaba
① 简介
spring-cloud-alibaba
是一套基于 Spring Cloud
和阿里巴巴中间件的微服务开发解决方案。
② 开源地址
https://github.com/alibaba/spring-cloud-alibaba
③目前stars数
27.6k
⭐
④ 特点
想象一下,你是一个餐厅老板,你的餐厅需要提供各种服务,比如点餐、支付、送外卖等。
但是,这些服务不是一下子就能搞定的,你需要很多工具和帮手。
Spring Cloud Alibaba
就像是你开餐厅时的“一站式服务超市”,提供了你需要的所有工具和帮手。
- 一站式服务: 提供了一整套工具和框架,帮助你轻松搭建和管理分布式系统。就像你在一个超市里可以买到所有开餐厅需要的东西一样。
- 分布式系统:如果你的餐厅有很多分店,每个分店都需要独立运作,但又需要互相协作。
Spring Cloud Alibaba
可以帮助你管理这些分店,确保它们能够协同工作。
- 服务发现:就像你需要知道每个分店的位置一样,
Spring Cloud Alibaba
有一个功能叫做“服务发现”,可以帮你找到系统中的各个服务组件。
- 配置管理:餐厅的菜单和价格可能会变,
Spring Cloud Alibaba
可以帮你管理这些变化,确保所有分店的菜单和价格都是最新的。
- 负载均衡:餐厅的客流量大时,需要合理分配顾客到不同的服务员那里。
Spring Cloud Alibaba
也有类似的功能,可以帮你合理分配请求,避免某个服务组件过载。
- 断路器:就像餐厅在遇到问题时会暂时停止服务一样,
Spring Cloud Alibaba
提供了“断路器”功能,当某个服务组件出现问题时,可以暂时切断它的服务,避免影响整个系统。
- 消息队列:餐厅在处理订单时,可能需要传递很多信息。
Spring Cloud Alibaba
支持消息队列,帮助你在不同的服务组件之间传递消息。
- 易于集成:就像超市里的商品可以直接拿回家用一样,
Spring Cloud Alibaba
也很容易集成到你的系统中,不需要太多的改动。
总之,Spring Cloud Alibaba
就像是你开餐厅时的“万能工具箱”,提供了你需要的所有工具和服务,帮助你轻松管理复杂的分布式系统。
TOP6 Druid
① 简介
Druid 是阿里巴巴开源的一款高性能的 Java 数据库连接池和 SQL
监控工具
② 开源地址
https://github.com/alibaba/druid
③目前stars数
27.8k
⭐
④ 特点
Druid
就像是你家里的水管系统。想象一下,如果你住在一个很大的房子里,有很多水龙头,你需要一个系统来确保每个水龙头都能正常供水,而且水压要合适,水管还要结实耐用。
高效:Druid
特别高效,就像你家里的水管系统,水能快速流到每一个水龙头,Druid
也能快速处理数据库的请求。
监控:水管系统如果漏水或者堵塞,你会很头疼。Druid
可以监控数据库的访问情况,就像你检查水管有没有问题一样,让你及时发现并解决问题。
连接池:Druid
提供了一个连接池,这就像是你家里有很多备用水管,需要用水的时候,直接拿一个来用,用完再放回去,不用每次都去新买一根水管。
安全性:水管如果随便接,可能会漏水或者影响其他水龙头的使用。Druid
可以加密数据库的密码,保护你的数据不被外人随便访问。
灵活性:水管系统需要适应不同的情况,比如有时候需要分流,有时候需要增压。Druid
也很灵活,可以根据不同的数据库操作需求进行调整。
SQL
日志:就像你会记录家里每个月的用水量,Druid
可以记录执行的SQL
语句,帮助你分析和优化数据库的使用。
易用性:安装和使用 Druid
就像安装家里的水管系统一样,不需要太复杂的操作,按照说明一步步来就行。
总之,Druid
就像是一个高级的水管系统,不仅保证你的数据库操作高效、安全,还能帮你监控和管理数据流动,让数据库的使用更加顺畅和可靠。
TOP5 canal
① 简介
Canal
是阿里巴巴开源的一个数据同步工具,它的主要作用是“监控”和“同步”数据库的变化
② 开源地址
https://github.com/alibaba/canal
③目前stars数
28.1k
⭐
④ 特点
想象一下,你有一个大鱼塘,里面养了很多鱼。
但是,你想知道鱼塘里到底发生了什么,比如哪些鱼长大了,哪些鱼生病了,或者有没有新鱼进来。
这时候,你需要一个“水下观察站”,帮你监控鱼塘里的情况。
而Canal
就充当了“水下观察站”的角色
数据变化监控:就像你用观察站监控鱼塘,Canal
监控数据库的变化,比如数据的增加、删除、修改等。
实时同步:如果鱼塘里发生了新情况,你肯定希望立刻知道。
Canal
可以实时地把数据库的变化同步到别的地方,比如另一个数据库或者消息队列。
增量订阅:你不需要知道鱼塘里所有鱼的情况,可能只关心新进来的鱼或者生病的鱼。
Canal
支持增量订阅,只同步你关心的数据变化。
易于扩展:如果你的鱼塘越来越大,一个观察站可能不够用。
Canal
很容易扩展,可以增加更多的“观察站”来满足需求。
多种数据库支持:你的鱼塘可能有很多种类的鱼,Canal
支持多种数据库,比如 MySQL
、Oracle
等。
轻量级:虽然功能强大,但 Canal
很轻量级,不会占用太多资源,就像一个小巧的观察站,不会影响鱼塘的生态。
易用性:搭建和使用 Canal
就像搭建一个观察站一样,按照说明一步步来,不需要太复杂的操作。
总之,Canal
就像一个高效的“水下观察站”,帮你实时监控和同步数据库的变化,让你对数据流动的情况了如指掌。
TOP4 nacos
① 简介
Nacos
是一个服务发现与配置管理平台,旨在帮助开发者更轻松地构建、部署和管理云原生应用。
目前国内大部分公司都在使用
② 开源地址
https://github.com/alibaba/nacos
③目前stars数
29.6k
⭐
④ 特点
想象一下,你是一个大型购物中心的经理。
这个购物中心有很多店铺,每个店铺都有自己的营业时间和服务内容。
你需要一个系统来管理这些店铺,确保顾客能够找到他们需要的服务。
Nacos
像是你管理购物中心的“智能助手”。它主要做以下几件事:
- 服务发现:就像顾客需要知道哪些店铺开门了,
Nacos
可以帮助你的应用程序发现系统中的其他服务。比如,一个在线购物网站需要知道支付服务和物流服务是否可用。
- 服务配置:每个店铺可能有不同的服务标准和价格。
Nacos
可以管理这些配置信息,确保所有的服务都按照统一的标准运行。
- 服务管理:购物中心的店铺需要定期检查和维护。
Nacos
可以帮助你管理和维护系统中的服务,比如自动重启失败的服务或者扩展服务的容量。
- 流量管理:购物中心在节假日可能会迎来大量顾客。
Nacos
可以通过流量控制和负载均衡,确保所有的服务都能够平稳运行,不会因为突然增加的请求而崩溃。
- 服务健康检查:就像你需要定期检查店铺的卫生和服务质量,
Nacos
可以监控服务的健康状态,及时发现并处理问题。
- 易于集成:就像购物中心可以很容易地增加新的店铺,
Nacos
也很容易集成到现有的系统中,不需要做太多的改动。
- 跨语言支持:购物中心可能有不同的店铺类型,比如餐厅、服装店、电子产品店。
Nacos
支持多种编程语言,比如 Java
、.NET
、Go
等,适合各种类型的服务。
总之,Nacos
就像是一个智能的购物中心管理系统,帮助你轻松管理复杂的微服务架构,确保所有的服务都能够高效、稳定地运行。
TOP3 easyexcel
① 简介
EasyExcel
是一个专门用于处理 Excel
文件。
Java解析、生成Excel比较有名的框架有Apache poi
、jxl
。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。
easyexcel
重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便
② 开源地址
https://github.com/alibaba/easyexcel
③目前stars数
31.5k
⭐
④ 特点
低内存消耗:
EasyExcel
通过流式读写 Excel 文件,不会一次性将整个文件加载到内存中,因此可以处理包含百万行数据的大文件,而不会导致内存溢出。
16M内存23秒读取75M(46W行25列)的Excel
易用性:
- 提供了简洁的
API
,使得读写 Excel 文件变得简单直观,减少了开发工作量。
⑤ 使用
easyexcel
的使用在之前的文章中介绍过,感兴趣的小伙伴可以看过来
传送门
TOP2 arthas
① 简介
一款强大的 Java 诊断工具,当遇到复杂或难以复现的故障时,Arthas
绝对可以帮助到你
② 开源地址
https://github.com/alibaba/arthas
③目前stars数
35.1k
⭐
④ 特点
方法跟踪:
- 可以查看方法的执行轨迹,包括调用层级、耗时、参数和返回值,帮助理解方法的执行流程和性能瓶颈。
类和方法字节码修改:
- 允许在运行时修改类和方法的字节码,无需重新编译和部署应用,便于快速验证代码修改的效果。
JVM 参数调整:
- 可以在线修改
JVM
参数,如垃圾回收策略、堆大小等,以优化应用性能或解决内存泄漏等问题。
线程分析:
- 提供了线程堆栈信息、线程状态和锁信息,帮助分析线程死锁和阻塞等问题。
内存泄漏检测:
代码热更新:
- 支持代码热更新,可以在不停机的情况下更新类的实现。
丰富的命令行工具:
Arthas
提供了诸如 trace
, watch
, thread
, dashboard
, telnet
等命令,涵盖了 Java 应用诊断的各个方面。
自动补全和历史记录:
Arthas
的命令行界面支持 Tab 键自动补全和命令历史记录,提高了使用效率。
IDEA 插件:
- 提供了
IntelliJ IDEA
插件,可以更方便地在 IDE
内部使用 Arthas
进行诊断。
跨平台:
Arthas
可以在 Linux
、macOS
和 Windows
等平台上运行,适用于各种开发和生产环境。
至于怎么使用,由于文章篇幅原因,这里就不展开了。如果小伙伴们感兴趣,可以在后面的文章中说一说。
TOP1 dubbo
① 简介
一个高性能的 Java RPC
框架,用来帮助不同的服务之间进行通信
并于 2008 年开源。2017 年,Dubbo
正式成为 Apache
软件基金会的顶级项目。
② 开源地址
https://github.com/apache/dubbo
③目前stars数
40.3k
⭐
④ 特点
想象一下,你开了一家餐厅,生意非常火爆。
为了提高效率,你决定把一些工作外包出去,比如让附近的面包店帮你做面包,让附近的蔬菜供应商每天给你送新鲜的蔬菜。
但是,你和这些供应商之间的沟通需要一个系统来协调和管理,这就是 Dubbo
的作用。
- 远程调用:就像你给供应商打电话下订单,
Dubbo
允许你的程序远程调用其他服务的方法,就像是直接调用本地方法一样简单。
- 服务注册与发现:你的餐厅需要知道哪些供应商是可用的,
Dubbo
提供了一个服务注册中心,供应商(服务提供者)会在这里注册自己,你的餐厅(服务消费者)可以发现这些供应商。
- 负载均衡:假设你有多个面包供应商,
Dubbo
可以帮助你决定从哪个供应商那里采购面包,以平衡每个供应商的负载,避免某个供应商过载。
- 容错机制:如果某个供应商突然不能供货了,
Dubbo
可以帮助你的餐厅自动切换到其他供应商,确保餐厅的运营不受影响。
- 监控和管理:
Dubbo
提供了丰富的监控和管理工具,让你可以实时了解各个服务的状态,比如响应时间、调用次数等。
- 扩展性:随着餐厅生意的扩展,你可能需要更多的供应商。
Dubbo
的设计使得扩展服务变得非常容易,你可以轻松地增加新的服务或者修改现有的服务。
- 协议支持:
Dubbo
支持多种通信协议,比如 Dubbo
协议、RMI
协议等,就像是你和供应商可以通过电话、邮件或者微信等多种方式沟通。
- 易于集成:就像是你可以很容易地和新的供应商建立合作关系,
Dubbo
也很容易集成到现有的 Java 应用中,不需要太多的改动。
总之,Dubbo
就像是你餐厅的“供应链协调员”,帮助你高效、可靠地管理和协调与各个服务提供者的通信,确保你的餐厅能够顺利运营。
架构图如下
本期内容到这儿就结束了 ★,°:.☆( ̄▽ ̄)/$:.°★ 。 希望对您有所帮助
我们下期再见 ヾ(•ω•`)o (●’◡’●)