爱了!蚂蚁开源的“SpringBoot”框架,新增了这6项功能...

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。

开发背景

Spring Boot 是一个非常优秀的开源框架,可以非常方便地就构建出一个基于 Spring 的应用程序,但是在使用过程中,还是会遇到一些问题:

  • Spring Boot 提供了一个基础的健康检查的能力,中间件和应用都可以扩展来实现自己的健康检查逻辑。但是 Spring Boot 的健康检查只有 Liveness Check 的能力,缺少 Readiness Check 的能力,这样会有比较致命的问题。当一个微服务应用启动的时候,必须要先保证启动后应用是健康的,才可以将上游的流量放进来(来自于 RPC,网关,定时任务等等流量),否则就可能会导致一定时间内大量的错误发生。

  • Spring Boot 虽然通过依赖管理(Dependency Management)的方式最大程度的保证了 Spring Boot 管理的 JAR 包之间的兼容性,但是不可避免的,当引入一些其他的 JAR 包的时候,还是可能会遇到冲突,而且很多时候这种冲突解决起来并不是这么容易,一个例子是当冲突的包是序列化相关的类库时,比如说 Hessian,如果应用中的一个组件需要使用 Hessian 3,而另一个则必须要使用 Hessian 4,由于 Hessian 3 和 Hessian 4 之间的不兼容性,并且序列化还涉及到微服务中的上下游服务,要把 Hessian 统一到一个版本绝非易事。

  • 在超大规模微服务运维的场景下,运维能力的平台化是一定要解决的问题,而监控又是其中非常主要的一个点,针对于日志监控这种情况,Spring Boot 并没有提供任何解决方案。大部分的开源组件,具体要打印哪些日志,打印到什么路径,什么文件下面,都是由应用的使用者来决定,这样会导致每一个应用的日志配置都各式各样,每一个应用都需要去监控系统中配置自己应用的日志监控,导致关键的监控的实施成本特别高。

  • 在企业级应用场景,模块化开发是解决多团队沟通成本的有效解决方案,每个业务团队专注于开发自己的应用模块,每个模块自包含,便于开发及自测,减少团队间的沟通成本。但是 Spring Boot 默认不支持模块化开发,所有 Bean 共用一个 Spring 上下文,在多团队开发时,如果不同团队定义了相同 BeanId,运行时将出现 BeanId 冲突错误。

为了解决以上的问题,又因为 SOFA 中间件中的各个组件本身就需要集成 Spring Boot,所以蚂蚁金服基于 Spring Boot 开发并开源了 SOFABoot,来解决以上的问题,也方便使用者在 Spring Boot 中方便地去使用 SOFA 中间件。

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

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

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.x1.4.2.RELEASE
2.4.x1.4.2.RELEASE
2.5.x1.5.16.RELEASE
3.0.x2.0.3.RELEASE
3.1.x2.1.0.RELEASE
3.2.x2.1.0.RELEASE
3.3.0~3.3.12.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 种方式。

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

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

引入 SOFA 组件

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

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

中间件starter
SOFARPCrpc-sofa-boot-starter
SOFATracertracer-sofa-boot-starter
SOFALookoutlookout-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>

注意下,和 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 的来龙去脉,关注我后面会更新更多好玩的技术。


往期推荐

SpringBoot集成Google开源图片处理框架,贼好用!


Docker部署SpringBoot的两种方法,后一种一键部署超好用!


Socket粘包问题的3种解决方案,最后一种最完美!


Spring Boot 解决跨域问题的 3 种方案!


关注我,每天陪你进步一点点!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PUC的完整形式是什么?

PUC&#xff1a;大学预科/污染控制/个人解锁码 (PUC: Pre University Course / Pollution Under Control / Personal Unlock Code) 1)PUC&#xff1a;大学预科课程 (1) PUC: Pre University Course) PUC is an abbreviation of the Pre University Course. It alludes to an in…

过滤器VS拦截器的4个区别,看完豁然开朗!

Spring的拦截器与Servlet的Filter有相似之处&#xff0c;比如二者都是AOP编程思想的体现&#xff0c;都能实现权限检查、日志记录等。但它们之间又有很大区别&#xff0c;所以本文磊哥就带大家全面了解一下什么是过滤器&#xff1f;什么是拦截器&#xff1f;以及二者有什么区别…

分布式ID生成的9种方法,特好用!

前言业务量小于500W或数据容量小于2G的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分离也可以应付过来。但当主从同步也扛不住的是就需要分表分库了&#xff0c;但分库分表后需要有一个唯一ID来标识一条数据&#xff0c;数据库的自增ID显然不能满足需求&…

8051 管脚定义_8051微控制器的引脚说明

8051 管脚定义8051微控制器的引脚说明 (Pin Description of 8051 Microcontroller) Pins from 1-8 1-8针 Port 1: The pins in this port are bi-directional and can be used for input and output. The pins are individually controlled; some are used for input while ot…

android 事件分发

2019独角兽企业重金招聘Python工程师标准>>> 文章来源于CSDN http://blog.csdn.net/lanhuzi9999/article/details/26515421 转载于:https://my.oschina.net/lhjtianji/blog/398998

对象复制的7种方法,还是Spring的最好用!

日常编程中&#xff0c;我们会经常会碰到对象属性复制的场景&#xff0c;就比如下面这样一个常见的三层 MVC 架构。当我们在上面的架构下编程时&#xff0c;我们通常需要经历对象转化&#xff0c;将业务请求流程经历三层机构后需要把 DTO 转为DO然后在数据库中保存。当需要从数…

Java中的Switch都支持String了,为什么不支持long?

来源 | jitwxs.cn/6f3eddff.html我们知道 Java Switch 支持byte、short、int 类型&#xff0c;在 JDK 1.5 时&#xff0c;支持了枚举类型&#xff0c;在 JDK 1.7 时&#xff0c;又支持了 String类型。那么它为什么就不能支持 long 类型呢&#xff0c;明明它跟 byte、short、int…

什么是WebSocket,以及如何在Python中使用它?

什么是WebSocket&#xff1f; (What is WebSocket?) WebSocket is a communications protocol which provides a full-duplex communication channel over a single TCP connection. WebSocket protocol is standardized by the IETF as RFC 6455. WebSocket是一种通信协议&am…

final的8个小细节,听说只有高手才知道!你知道几个?

final关键字是一个常用的关键字&#xff0c;可以修饰变量、方法、类&#xff0c;用来表示它修饰的类、方法和变量不可改变&#xff0c;下面就聊一下使用 final 关键字的一些小细节。细节一、final 修饰类成员变量和实例成员变量的赋值时机对于类变量&#xff1a;声明变量的时候…

java实现的简单程序登录界面

2019独角兽企业重金招聘Python工程师标准>>> 这是我写的简单代码&#xff1a; 简单&#xff0c;没什么嚼头&#xff0c;作业贴&#xff0c;直接上代码。文件保存用户名和密码&#xff0c;输入密码错误3次退出程序。 [java] view plaincopy 01.public Login() throws…

try-catch-finally中的4个巨坑,老程序员也搞不定!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 Java 语言中 try-catch-finally 看似简单&#xff0c;一副人畜无害的样子&#xff0c;但想要真正的“掌控”它&#xff0…

CentOS7安装Python3.4 ,让Python2和3共存

为什么80%的码农都做不了架构师&#xff1f;>>> #CentOS7安装Python3.4 &#xff0c;让Python2和3共存 环境&#xff1a;CentOS7.1 需求&#xff1a;网络畅通 编译需要的一些包&#xff0c;酌情安装 yum groupinstall "Development tools" yum install z…

字节二面:优化 HTTPS 的手段,你知道几个?

由裸数据传输的 HTTP 协议转成加密数据传输的 HTTPS 协议&#xff0c;给应用数据套了个「保护伞」&#xff0c;提高安全性的同时也带来了性能消耗。因为 HTTPS 相比 HTTP 协议多一个 TLS 协议握手过程&#xff0c;目的是为了通过非对称加密握手协商或者交换出对称加密密钥&…

求首位相连一维数组最大子数组的和

结对成员&#xff1a; 朱少辉&#xff1a;主要负责代码编写 侯涛亮&#xff1a;主要负责程序测试 题目:一个首尾相接的一维整型数组&#xff0c;其中有正有负&#xff0c;求它的最大子数组并返回它的位置。 思路&#xff1a;在求一维子数组的基础上&#xff0c;先输入一个含有N…

SpringBoot接口幂等性实现的4种方案!

作者 | 超级小豆丁来源 | www.mydlq.club/article/94目录什么是幂等性什么是接口幂等性为什么需要实现幂等性引入幂等性后对系统的影响Restful API 接口的幂等性如何实现幂等性方案一&#xff1a;数据库唯一主键方案二&#xff1a;数据库乐观锁方案三&#xff1a;防重 Token 令…

Redis为什么变慢了?一文详解Redis性能问题 | 万字长文

Redis 作为优秀的内存数据库&#xff0c;其拥有非常高的性能&#xff0c;单个实例的 OPS 能够达到 10W 左右。但也正因此如此&#xff0c;当我们在使用 Redis 时&#xff0c;如果发现操作延迟变大的情况&#xff0c;就会与我们的预期不符。你也许或多或少地&#xff0c;也遇到过…

蜕变成蝶~Linux设备驱动之字符设备驱动

一、linux系统将设备分为3类&#xff1a;字符设备、块设备、网络设备。使用驱动程序&#xff1a; 字符设备&#xff1a;是指只能一个字节一个字节读写的设备&#xff0c;不能随机读取设备内存中的某一数据&#xff0c;读取数据需要按照先后数据。字符设备是面向流的设备&#x…

感动哭了!《Java 编程思想》最新中文版开源!

前言还记得这本书吗&#xff1f;是不是已经在你的桌上铺满厚厚的一层灰了&#xff1f;随着 Java 8 的出现&#xff0c;这门语言在许多地方发生了翻天覆地的变化。最新版已经出来了&#xff0c;在新的版本中&#xff0c;代码的运用和实现上与以往不尽相同。本书可作为编程入门书…

韩信大招:一致性哈希

作者 | 悟空聊架构来源 | 悟空聊架构韩信点兵的成语来源淮安民间传说。常与多多益善搭配。寓意越多越好。我们来看下主公刘邦和韩信大将军的对话。刘邦&#xff1a;“你觉得我可以带兵多少&#xff1f;”韩信&#xff1a;“最多十万。”刘邦不解的问&#xff1a;“那你呢&#…

mysql连接非常慢的觖决办法及其它常见问题解决办法

2019独角兽企业重金招聘Python工程师标准>>> 编辑/etc/mysql/my.cnf 在[mysqld]段中加入 skip-name-resolve 重启mysql 禁用DNS反响解析&#xff0c;就能大大加快MySQL连接的速度。 转载于:https://my.oschina.net/ydsakyclguozi/blog/401768