说到 SOFABoot,不得不先说下 SOFARPC 框架,SOFARPC 也是大名远扬,最早起源于阿里淘宝 HSF 框架,现在是蚂蚁金服开源的一款高性能、高可扩展性、生产级别的 RPC 框架,在蚂蚁金服,SOFARPC 框架已经使用了十多年了,并且已经历经了五代。
SOFARPC 开源地址:
https://github.com/sofastack/sofa-rpc
栈长当初第一次看到 SOFABoot 这个框架的时候,心里想着,难道是 SOFABoot = SOFA + Spring Boot 的结合?
不卖关子了,先来看下官方介绍:
SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。
在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。
SOFABoot 开源地址:
https://github.com/sofastack/sofa-boot
看完介绍,栈长才发现其实并不是,两者并不能直接划等号。
SOFABoot 和 SOFARPC 都是蚂蚁金服开源的 SOFA 技术栈的开源项目,SOFARPC 只是其 SOFA 技术栈体系(SOFAStack)中的一个 RPC 框架。
SOFAStack™(Scalable Open Financial Architecture Stack)是一套用于快速构建金融级云原生架构的中间件,也是在金融场景里锤炼出来的最佳实践。
SOFABoot 也是 SOFA 技术栈体系中一个框架,但和 SOFARPC 没有直接关系,SOFABoot 是一个 Spring Boot 加强版,还提供了方便使用 SOFA 中间件的能力,SOFARPC 只是其中之一而已。
二、功能描述Spring Boot 虽然是一个非常优秀的主流开源框架,但在蚂蚁内部会遇到很多问题,比如说 Spring Boot 在实施大规模微服务架构时候的就会遇到很多问题,所以 SOFABoot 应运而生。
SOFABoot 基于 Spring Boot 的基础上进行构建,并且是完全兼容 Spring Boot 的。
SOFABoot 在 Spring Boot 上还提供了哪些能力?
1)扩展 Spring Boot 的健康检查,额外提供了 Readiness Check 的能力,以保证应用实例安全上线;
2)增加基于 Spring 上下文隔离的模块化开发能力,每个 SOFABoot 模块使用独立的 Spring 上下文,避免不同 SOFABoot 模块间的 BeanId 冲突;
3)增加模块并行加载和 Spring Bean 异步初始化能力,加速应用启动;
4)增加日志空间隔离的能力,中间件框架自动发现应用的日志实现依赖并独立打印日志,避免中间件和应用日志实现绑定;
5)增加基于 SOFAArk 框架提供类隔离能力,方便解决各种类冲突问题;
6)增加中间件集成管理的能力,统一管控、提供中间件统一易用的编程接口、每一个 SOFA 中间件都是独立可插拔的组件;
三、依赖环境SOFABoot 和 Spring Boot 版本依赖关系:
SOFABoot 版本 Spring Boot 版本2.3.x 1.4.2.RELEASE
2.4.x 1.4.2.RELEASE
2.5.x 1.5.16.RELEASE
3.0.x 2.0.3.RELEASE
3.1.x 2.1.0.RELEASE
3.2.x 2.1.0.RELEASE
3.3.0~3.3.1 2.1.11.RELEASE
3.3.2 及以后 2.1.13.RELEASE
SOFABoot 目前最新版本已到 v3.4.6,最低支持 JDK 7,SOFABoot 3.1.0 基于 Spring Boot 2.1.0.RELEASE 已支持 JDK 11,所以其依赖的 JDK 的版本肯定应该也是根据 Spring Boot 走的。
目前的 Spring Boot 版本已经到了 2.4.x,想兼容最新的 Spring Boot 版本貌似还早。
SOFABoot 还使用了其他主要第三方开源组件:
Spring
Spring Boot
SLF4j
sofa-common-tools
一些扩展依赖:
nuxeo
......
SOFABoot 支持 Maven 和 Gradle 依赖管理,类似 Spring Boot 的依赖引入方式,如在 Maven 配置文件中增加如下 <parent/> 标签配置的方式:
<parent> <groupId>com.alipay.sofa</groupId> <artifactId>sofaboot-dependencies</artifactId> <version>3.4.6</version> </parent>Spring Boot 的依赖引入是这样的:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.0</version> </parent>可以看出和 Spring Boot 如出一辙!
当然,Spring Boot 依赖引入还有另外一种方式,参考:Spring Boot 开启的 2 种方式。