蚂蚁开源的 SOFABoot,和 Spring Boot 有啥关系?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一、SOFABoot 是什么鬼?

一、SOFABoot 是什么鬼?

说到 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

image.png

看完介绍,栈长才发现其实并不是,两者并不能直接划等号。


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 版本依赖关系:


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 走的。

image.png

可以看出和 Spring Boot 如出一辙!


当然,Spring Boot 依赖引入还有另外一种方式,参考:Spring Boot 开启的 2 种方式。


Spring Boot 基本介绍这里就不介绍了,关注公众号Java技术栈回复关键字 "boot",可以阅读我写的几十篇往期实战文章。这个 Spring Boot 实战仓库,也欢迎 Star 关注学习:


https://github.com/javastacks/spring-boot-best-practice


三、引入 SOFA 组件

遵循 Spring Boot 命名规范,SOFABoot 所有中间件组件命名都是以 -sofa-boot-starter 来标示的。


SOFABoot 目前提供的中间件组件如下:


中间件 starter

SOFARPC rpc-sofa-boot-starter

SOFATracer tracer-sofa-boot-starter

SOFALookout lookout-sofa-boot-starter

SOFABoot 目前提供的扩展组件如下:


扩展组件 starter

健康检查 healthcheck-sofa-boot-starter

模块化隔离 isle-sofa-boot-starter

类隔离 sofa-ark-springboot-starter

测试扩展 test-sofa-boot-starter

比如想引入 SOFARPC 中间件,只需增加下面的 Maven 依赖即可:


<dependency>

   <groupId>com.alipay.sofa</groupId>

   <artifactId>rpc-sofa-boot-starter</artifactId>

</dependency>

1

2

3

注意下,和 Spring Boot 管理自身依赖的理念一致,SOFA 中间件的引入也不需要版本号,因为所有 SOFA 中间件的依赖管理已经在 sofaboot-dependencies 中定义好了,这样做的好处就是统一管理和升级,防止出现依赖冲突以及兼容性的问题。


SOFABoot 框架中的每个组件并不是全部必须的,每个组件都是可选的,可以根据需要灵活的选择其中的部分组件使用,比如你只想引入 SOFABoot 框架中的类隔离、日志空间隔离功能 ,而不想引入任何 SOFA 中间件,这完全是没问题的。


四、应用场景

话说 SOFABoot 框架有哪些应用场景?


SOFABoot 框架本身就脱胎于蚂蚁金服内部对于 Spring Boot 框架的运用实践的成果,又解决了 Spring Boot 在大规模金融级微服务架构生产场景下遇到的各种问题,又经历了蚂蚁金服这样大规模金融服务的打磨和生产验证,所以 SOFABoot 在大规模金融级微服务架构下的运用是非常合适的。


另外,SOFABoot 框架集成了所有蚂蚁金服金融科技中间件,同时又能与 Spring Boot 框架无缝集成,大大降低了用户的迁移成本。


如果不想自研,又对 Spring Boot + 蚂蚁金服技术栈情有独钟的,完全可以利用 SOFABoot 轻松搭建稳定、可靠、安全、可扩展的分布式应用,以减少开发、测试、集成成本。


最后,你们公司有用 SOFABoot 或者其他 SOFA 框架的么?欢迎分享使用经验~


参考文档:


https://github.com/sofastack/sofa-boot

https://www.sofastack.tech/projects/sofa-boot/overview/

好了,今天的 SOFABoot 的体验分享就到这里了,大致摸清了 SOFABoot 的来龙去脉,后面栈长我会更新更多好玩的技术,公众号Java技术栈第一时间推送。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
16天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
30 2
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
58 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
|
2月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
阿里云开源 Spring AI Alibaba,旨在帮助 Java 开发者快速构建 AI 应用,共同构建物理新世界。
|
2月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
68 2
|
6月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
55 2
|
6月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
66 2
|
6月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
440 1
|
6月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
56 1
|
6月前
|
人工智能 自然语言处理 Java
Spring AI是一个开源的多模态AI模型平台
Spring AI是一个开源的多模态AI模型平台
362 2