国内优秀的java开源saas项目分享
国外的优秀开源项目没啥好说的,支持国产,今天重点聊聊国内优秀的 Java 开源项目。在国内开源项目做得最好的莫非于阿里巴巴了,今天特地给大家整理了阿里的 11 个神级项目。最后还有一个 java 全开源的 saas 新零售小程序系统,研究微信生态的技术爱好者可以关注一下,有很多值得学习的地方。
不看会后悔喔!
这些开源项目中的绝大多数,我都在实际工作中用过,或者有同事用过。确实挺不错,挺有价值的,现在推荐给大家。
1. Druid
Druid 自称是 Java 语言中最好的数据库连接池,它能够提供强大的监控和扩展功能。监控后台如下图所示:
Druid 的主要优点如下:
- 它能监控数据库访问性能。
- 它提供了 WallFilter,它是基于 SQL 语义分析来实现防御 SQL 注入攻击的。
- 它提供了多种监测连接泄漏的手段。
- 它提供了数据库密码加密的功能。
- 它能打印 SQL 执行日志。
github 地址: https://github.com/alibaba/druid maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/druid
配置 maven 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
2. fastjson
fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
fastjson 的主要优点如下:
- 速度快,fastjson 相对其他 JSON 库的特点是快,从 2011 年 fastjson 发布 1.1.x 版本之后,其性能从未被其他 Java 实现的 JSON 库超越。
- 使用广泛,fastjson 在阿里巴巴大规模使用,在数万台服务器上部署,fastjson 在业界被广泛接受。在 2012 年被开源中国评选为最受欢迎的国产开源软件之一。
- 使用简单,fastjson 的 API 十分简洁。
//序列化
String text = JSON.toJSONString(obj);
//反序列化
VO vo = JSON.parseObject("{...}", VO.class);
- 功能完备,支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。
github 地址: https://github.com/alibaba/fastjson maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/fastjson
配置 maven 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
3. Dubbo
Apache Dubbo 是一款微服务开发框架,它提供了 RPC 通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。
同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。它目前已交给 Apache 管理和维护。
架构图如下:
Dubbo 的主要优点如下:
- 基于透明接口的 RPC
- 智能负载均衡
- 自动服务注册和发现
- 高扩展性
- 运行时流量路由
- 可视化服务治理
- 云原生友好
github 地址: https://github.com/apache/dubbo maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/dubbo/
配置 maven 依赖:
<properties>
<dubbo.version>3.0.3</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
4. Rocketmq
Apache RocketMQ 是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。
它提供了多种功能:
- 消息传递模式,包括发布 / 订阅、请求 / 回复和流媒体
- 金融级交易消息
- 基于 DLedger 的内置容错和高可用配置选项
- 多种跨语言客户端,如 Java、C/C++、Python、Go
- 可插拔传输协议,例如 TCP、SSL、AIO
- 内置消息追踪能力,也支持 opentracing
- 多功能大数据和流媒体生态系统集成
- 按时间或偏移量的消息追溯
- 可靠的 FIFO 和同一队列中的严格有序消息传递
- 高效的拉推式消费模式
- 单个队列百万级消息累积能力
- 多种消息传递协议,如 JMS 和 OpenMessaging
- 灵活的分布式横向扩展部署架构
- 闪电般的批量消息交换系统
- 各种消息过滤机制,例如 SQL 和 Tag
- 用于隔离测试和云隔离集群的 Docker 镜像
- 用于配置、指标和监控的功能丰富的管理仪表板
- 认证和授权
- 免费的开源连接器,用于源和接收器
rocketmq 后台管理界面:
github 地址: https://github.com/apache/rocketmq maven 中央仓库: https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter
rocketmq 包含:服务端和客户端,在我们的项目中主要关注客户端的代码即可。
配置 maven 依赖:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
5. Arthas
Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到 JVM 的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
- 怎样直接从 JVM 内查找某个类的实例?
分析代码消耗时间:
Arthas 支持 JDK 6+,能够运行在多种操作系统上,比如:Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
github 地址: https://alibaba.github.io/arthas/ maven 中央仓库: https://mvnrepository.com/artifact/com.taobao.arthas/arthas-spring-boot-starter
在目标机器执行如下命令即可启动 arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
6. Nacos
Nacos 是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。它可以帮助您轻松构建云原生应用程序和微服务平台。
服务是 Nacos 的一等公民。Nacos 支持几乎所有类型的服务,例如 Dubbo/gRPC 服务、Spring Cloud RESTFul 服务或 Kubernetes 服务。
Nacos 提供了四大功能。
- 服务发现和服务健康检查。Nacos 使服务通过 DNS 或 HTTP 接口注册自己和发现其他服务变得简单。Nacos 还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
- 动态配置管理。动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos 无需在更新配置时重新部署应用程序和服务,这使得配置更改更加高效和敏捷。
- 动态 DNS 服务。Nacos 支持加权路由,让您更容易在数据中心内的生产环境中实现中层负载均衡、灵活的路由策略、流量控制和简单的 DNS 解析服务。它可以帮助您轻松实现基于 DNS 的服务发现,并防止应用程序耦合到特定于供应商的服务发现 API。
- 服务和元数据管理。Nacos 提供了一个易于使用的服务仪表板,帮助您管理您的服务元数据、配置、kubernetes DNS、服务健康和指标统计。
Nacos 地图:
Nacos 生态图:
github 地址: https://github.com/alibaba/nacos maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery
7. easyexcel
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 模式,在上层做了模型转换的封装,让使用者更加简单方便。
64M 内存 1 分钟内读取 75M (46W 行 25 列) 的 Excel
github 地址: https://github.com/alibaba/easyexcel maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/easyexcel
配置 maven 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
8. Sentinel
随着分布式系统变得越来越流行,服务之间的可靠性变得比以往任何时候都更加重要。
Sentinel 以 “流量” 为切入点,在流量控制、 流量整形、熔断、系统自适应保护等多个领域开展工作,保障微服务的可靠性和弹性。
Sentinel 具有以下特点:
- 丰富的适用场景:Sentinel 在阿里巴巴得到了广泛的应用,几乎覆盖了近 10 年双 11(11.11)购物节的所有核心场景,比如需要限制突发流量的 “秒杀” 满足系统容量、消息削峰填谷、下游不可靠业务断路、集群流量控制等。
- 实时监控:Sentinel 还提供实时监控能力。可以实时查看单台机器的运行时信息,以及 500 个节点以下集群的运行时信息汇总。
- 广泛的开源生态系统:Sentinel 提供与 Spring Cloud、Dubbo 和 gRPC 等常用框架和库的开箱即用集成。您只需将适配器依赖项添加到您的服务即可轻松使用 Sentinel。
- 多语言支持:Sentinel 为 Java、Go 和 C++ 提供了本机支持。
- 丰富的 SPI 扩展:Sentinel 提供简单易用的 SPI 扩展接口,可以让您快速自定义逻辑,例如自定义规则管理、适配数据源等。
功能概述:
生态系统景观:
github 地址: https://github.com/alibaba/Sentinel maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core
配置 maven 依赖:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.2</version>
</dependency>
9. otter
阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双 A,两边均可写,由此诞生了 otter 这样一个产品。
otter 第一版本可追溯到 04~05 年,此次外部开源的版本为第 4 版,开发时间从 2011 年 7 月份一直持续到现在,目前阿里巴巴 B2B 内部的本地 / 异地机房的同步需求基本全上了 otte4。
目前同步规模:
- 同步数据量 6 亿
- 文件同步 1.5TB (2000w 张图片)
- 涉及 200 + 个数据库实例之间的同步
- 80 + 台机器的集群规模
otter 能解决什么?
- 异构库同步。mysql -> mysql/oracle. (目前开源版本只支持 mysql 增量,目标库可以是 mysql 或者 oracle,取决于 canal 的功能)
- 单机房同步 (数据库之间 RTT < 1ms) a. 数据库版本升级 b. 数据表迁移 c. 异步二级索引
- 异地机房同步 (比如阿里巴巴国际站就是杭州和美国机房的数据库同步,RTT> 200ms,亮点) a. 机房容灾
- 双向同步 a. 避免回环算法 (通用的解决方案,支持大部分关系型数据库) b. 数据一致性算法 (保证双 A 机房模式下,数据保证最终一致性,亮点)
- 文件同步站点镜像 (进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片).
工作原理图:
单机房复制示意图:
异地机房复制示意图:
github 地址: https://github.com/alibaba/otter maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.otter/canal.client
10. P3C
P3C 插件呈现了阿里巴巴 Java 编码指南,它整合了阿里巴巴集团技术团队多年来的最佳编程实践。由于我们鼓励重用和更好地理解彼此的程序,因此大量 Java 编程团队对跨项目的代码质量提出了苛刻的要求。
阿里巴巴过去见过很多编程问题。例如,有缺陷的数据库表结构和索引设计可能会导致软件架构缺陷和性能风险。另一个例子是混乱的代码结构难以维护。此外,未经身份验证的易受攻击的代码容易受到黑客的攻击。为了解决这些问题,我们为阿里巴巴的 Java 开发人员编写了这份文档。
更多信息请参考阿里巴巴 Java 编码指南:
- 中文版:阿里巴巴 Java 开发手册
- 英文版:Alibaba Java Coding Guidelines
该项目由 3 部分组成:
- PMD 实现
- IntelliJ IDEA 插件
- Eclipse 插件
四十九条规则是基于 PMD 实现的,更多详细信息请参考 P3C-PMD 文档。IDE 插件(IDEA 和 Eclipse)中实现的四个规则如下:
- [Mandatory] 禁止使用已弃用的类或方法。注意:例如,应该使用 decode(String source, String encode) 而不是不推荐使用的方法 decode (String encodeStr)。一旦接口被弃用,接口提供者就有义务提供一个新的接口。同时,客户端程序员有义务检查它的新实现是什么。
- [Mandatory] 来自接口或抽象类的重写方法必须用 @Override 注释标记。反例:对于 getObject () 和 get0bject (),第一个是字母 “O”,第二个是数字 “0”。为了准确判断覆盖是否成功,需要一个 @Override 注解。同时,一旦抽象类中的方法签名发生变化,实现类将立即报告编译时错误。
- [Mandatory] 静态字段或方法应直接通过其类名而不是其对应的对象名来引用。
- [Mandatory] hashCode 和 equals 的用法应该遵循:
- 如果 equals 被覆盖,则覆盖 hashCode。
- 这两个方法必须为 Set 重写,因为它们用于确保不会在 Set 中插入重复的对象。
- 如果使用自定义对象作为 Map 的键,则必须覆盖这两个方法。注意:String 可以用作 Map 的键,因为这两个方法已经被重写。
使用 p3c 插件的效果:
最新版阿里巴巴 Java 开发手册下载地址:https://github.com/alibaba/p3c/blob/master/Java 开发手册(嵩山版).pdf
github 地址: https://github.com/alibaba/p3c/tree/master/idea-plugin
11. Spring Cloud Alibaba
Spring Cloud Alibaba 为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用 Spring Cloud 开发应用程序。
使用 Spring Cloud Alibaba,您只需添加一些注解和少量配置,即可将 Spring Cloud 应用连接到阿里巴巴的分布式解决方案,并通过阿里巴巴中间件构建分布式应用系统。
主要功能如下:
- 流量控制和服务降级:默认支持 HTTP 服务的流量控制。您还可以使用注释自定义流量控制和服务降级规则。规则可以动态更改。
- 服务注册和发现:可以注册服务,客户端可以使用 Spring 管理的 bean,自动集成 Ribbon 来发现实例。
- 分布式配置:支持分布式系统中的外化配置,配置变化时自动刷新。
- 事件驱动:支持构建与共享消息系统连接的高度可扩展的事件驱动微服务。
- 分布式事务:支持高性能、易用的分布式事务解决方案。
- 阿里云对象存储:海量、安全、低成本、高可靠的云存储服务。支持随时随地在任何应用程序中存储和访问任何类型的数据。
- 阿里云 SchedulerX:精准、高可靠、高可用的定时作业调度服务,响应时间秒级。
- 阿里云短信:覆盖全球的短信服务,阿里短信提供便捷、高效、智能的通讯能力,帮助企业快速联系客户。
主要包含如下组件:
- Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
- Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
github 地址: https://github.com/alibaba/spring-cloud-alibaba
配置 maven 依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
12. weiit-saas
weiit-saas 是一款 Java 开源项目,属于 weiit 团队自研产品,意在通过技术封装,让企业无需代码开发,帮助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。
基于 layui 前后端分离的企业级架构
兼容 spring cloud netflix & spring cloud alibaba
优化 Spring Security 内部实现,实现 API 调用的统一出口和权限认证授权中心
提供完善的企业微服务流量监控,日志监控能力
提供完善的压力测试方案
提供完善的灰度发布方案
提供完善的微服务部署方案
主要特点如下:
- 项目采用 Spring+SpringMVC+Mybatis 主流开源框架,遵循 MVC 架构,设计轻巧,使用简单,开发人员接手与二次开发简单易懂;
- 项目依赖的核心支持 jar 包,核心框架 weiit-frame 也都已经完全开源,下载地址见下方 Maven 仓库地址;
- 项目完成了对阿里云、腾讯云、微信生态的快速接入与代码示例,并成功运用到了商业中,方便大家学习对 OSS/COS/ 短信服务 / 快递服务 / 公众号 / 小程序 / 微信开放平台 / 微信支付的技术点与应用场景的学习;
- 小程序与公众号第三方授权集成,让开发者与企业省去繁琐的配置,对 AppId/AppSecret 集成彻底告别;
- 微信支付第三方授权集成,让开发者与企业省去繁琐的配置,让企业服务成本大大降低;
- 小程序代码自动 push 与升级,公众号基本常规功能(自定义菜单、图文、素材,群发)全部接管,让企业无需登录微信官方入口,统一化管理企业信息与数据;
- 微信消息通知与模板自动同步与管理,让企业场景融合无障碍;
- 自定义装修功能,实现企业电商场景多元化,解决不同行业不同模板,让企业需求得到真正解决;
- 丰富的营销工具,解决企业微营销需求,并集中化管理。拼团活动、积分活动、砍价,优惠券,卡券,礼品卡,邀请有礼等营销活动,方便二次开发;
- 不同企业数据隔离,真正实现 SAAS 数据隔离模型,让企业数据互不干扰。
- 不同企业不同域名自动分配,让企业小程序、公众号前端隔离,避免因为公众号或者小程序推广时导致域名被检测导致的封号问题出现,即不同企业不同域,意在防止 saas 平台中的企业受到其他企业的影响。
gitee 地址: weiit-saas: 是一款Java开源项目,属于weiit团队自研产品,意在通过技术封装,让企业无需代码开发,帮助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。
好了,今天的分享就到这里,喜欢研究技术的朋友赶紧行动起来吧!