愛(ài)了!螞蟻開(kāi)源的“SpringBoot”框架,新增了這6項(xiàng)功能...

開(kāi)發(fā)背景
Spring Boot 是一個(gè)非常優(yōu)秀的開(kāi)源框架,可以非常方便地就構(gòu)建出一個(gè)基于 Spring 的應(yīng)用程序,但是在使用過(guò)程中,還是會(huì)遇到一些問(wèn)題:
Spring Boot 提供了一個(gè)基礎(chǔ)的健康檢查的能力,中間件和應(yīng)用都可以擴(kuò)展來(lái)實(shí)現(xiàn)自己的健康檢查邏輯。但是 Spring Boot 的健康檢查只有 Liveness Check 的能力,缺少 Readiness Check 的能力,這樣會(huì)有比較致命的問(wèn)題。當(dāng)一個(gè)微服務(wù)應(yīng)用啟動(dòng)的時(shí)候,必須要先保證啟動(dòng)后應(yīng)用是健康的,才可以將上游的流量放進(jìn)來(lái)(來(lái)自于 RPC,網(wǎng)關(guān),定時(shí)任務(wù)等等流量),否則就可能會(huì)導(dǎo)致一定時(shí)間內(nèi)大量的錯(cuò)誤發(fā)生。
Spring Boot 雖然通過(guò)依賴管理(Dependency Management)的方式最大程度的保證了 Spring Boot 管理的 JAR 包之間的兼容性,但是不可避免的,當(dāng)引入一些其他的 JAR 包的時(shí)候,還是可能會(huì)遇到?jīng)_突,而且很多時(shí)候這種沖突解決起來(lái)并不是這么容易,一個(gè)例子是當(dāng)沖突的包是序列化相關(guān)的類庫(kù)時(shí),比如說(shuō) Hessian,如果應(yīng)用中的一個(gè)組件需要使用 Hessian 3,而另一個(gè)則必須要使用 Hessian 4,由于 Hessian 3 和 Hessian 4 之間的不兼容性,并且序列化還涉及到微服務(wù)中的上下游服務(wù),要把 Hessian 統(tǒng)一到一個(gè)版本絕非易事。
在超大規(guī)模微服務(wù)運(yùn)維的場(chǎng)景下,運(yùn)維能力的平臺(tái)化是一定要解決的問(wèn)題,而監(jiān)控又是其中非常主要的一個(gè)點(diǎn),針對(duì)于日志監(jiān)控這種情況,Spring Boot 并沒(méi)有提供任何解決方案。大部分的開(kāi)源組件,具體要打印哪些日志,打印到什么路徑,什么文件下面,都是由應(yīng)用的使用者來(lái)決定,這樣會(huì)導(dǎo)致每一個(gè)應(yīng)用的日志配置都各式各樣,每一個(gè)應(yīng)用都需要去監(jiān)控系統(tǒng)中配置自己應(yīng)用的日志監(jiān)控,導(dǎo)致關(guān)鍵的監(jiān)控的實(shí)施成本特別高。
在企業(yè)級(jí)應(yīng)用場(chǎng)景,模塊化開(kāi)發(fā)是解決多團(tuán)隊(duì)溝通成本的有效解決方案,每個(gè)業(yè)務(wù)團(tuán)隊(duì)專注于開(kāi)發(fā)自己的應(yīng)用模塊,每個(gè)模塊自包含,便于開(kāi)發(fā)及自測(cè),減少團(tuán)隊(duì)間的溝通成本。但是 Spring Boot 默認(rèn)不支持模塊化開(kāi)發(fā),所有 Bean 共用一個(gè) Spring 上下文,在多團(tuán)隊(duì)開(kāi)發(fā)時(shí),如果不同團(tuán)隊(duì)定義了相同 BeanId,運(yùn)行時(shí)將出現(xiàn) BeanId 沖突錯(cuò)誤。
為了解決以上的問(wèn)題,又因?yàn)?SOFA 中間件中的各個(gè)組件本身就需要集成 Spring Boot,所以螞蟻金服基于 Spring Boot 開(kāi)發(fā)并開(kāi)源了 SOFABoot,來(lái)解決以上的問(wèn)題,也方便使用者在 Spring Boot 中方便地去使用 SOFA 中間件。
SOFABoot 是什么鬼?
說(shuō)到 SOFABoot,不得不先說(shuō)下 SOFARPC 框架,SOFARPC 也是大名遠(yuǎn)揚(yáng),最早起源于阿里淘寶 HSF 框架,現(xiàn)在是螞蟻金服開(kāi)源的一款高性能、高可擴(kuò)展性、生產(chǎn)級(jí)別的 RPC 框架,在螞蟻金服,SOFARPC 框架已經(jīng)使用了十多年了,并且已經(jīng)歷經(jīng)了五代。
SOFARPC 開(kāi)源地址:
“https://github.com/sofastack/sofa-rpc
我當(dāng)初第一次看到 SOFABoot 這個(gè)框架的時(shí)候,心里想著,難道是 SOFABoot = SOFA ?+ Spring Boot 的結(jié)合?
不賣關(guān)子了,先來(lái)看下官方介紹:
“SOFABoot 是螞蟻金服開(kāi)源的基于 Spring Boot 的研發(fā)框架,它在 Spring Boot 的基礎(chǔ)上,提供了諸如 Readiness Check,類隔離,日志空間隔離等等能力。
在增強(qiáng)了 Spring Boot 的同時(shí),SOFABoot 提供了讓用戶可以在 Spring Boot 中非常方便地使用 SOFA 中間件的能力。
SOFABoot 開(kāi)源地址:
“https://github.com/sofastack/sofa-boot

看完介紹,我才發(fā)現(xiàn)其實(shí)并不是,兩者并不能直接劃等號(hào)。
SOFABoot 和 SOFARPC 都是螞蟻金服開(kāi)源的 SOFA 技術(shù)棧的開(kāi)源項(xiàng)目,SOFARPC 只是其 SOFA 技術(shù)棧體系(SOFAStack)中的一個(gè) RPC 框架。
“SOFAStack?(Scalable Open Financial Architecture Stack)是一套用于快速構(gòu)建金融級(jí)云原生架構(gòu)的中間件,也是在金融場(chǎng)景里錘煉出來(lái)的最佳實(shí)踐。
SOFABoot 也是 SOFA 技術(shù)棧體系中一個(gè)框架,但和 SOFARPC 沒(méi)有直接關(guān)系,SOFABoot 是一個(gè) Spring Boot 加強(qiáng)版,還提供了方便使用 SOFA 中間件的能力,SOFARPC 只是其中之一而已。
功能描述
Spring Boot 雖然是一個(gè)非常優(yōu)秀的主流開(kāi)源框架,但在螞蟻內(nèi)部會(huì)遇到很多問(wèn)題,比如說(shuō) Spring Boot 在實(shí)施大規(guī)模微服務(wù)架構(gòu)時(shí)候的就會(huì)遇到很多問(wèn)題,所以 SOFABoot 應(yīng)運(yùn)而生。
SOFABoot 基于 Spring Boot 的基礎(chǔ)上進(jìn)行構(gòu)建,并且是完全兼容 Spring Boot 的。
SOFABoot 在 Spring Boot 上還提供了哪些能力?
1)擴(kuò)展 Spring Boot 的健康檢查,額外提供了 Readiness Check 的能力,以保證應(yīng)用實(shí)例安全上線;
2)增加基于 Spring 上下文隔離的模塊化開(kāi)發(fā)能力,每個(gè) SOFABoot 模塊使用獨(dú)立的 Spring 上下文,避免不同 SOFABoot 模塊間的 BeanId 沖突;
3)增加模塊并行加載和 Spring Bean 異步初始化能力,加速應(yīng)用啟動(dòng);
4)增加日志空間隔離的能力,中間件框架自動(dòng)發(fā)現(xiàn)應(yīng)用的日志實(shí)現(xiàn)依賴并獨(dú)立打印日志,避免中間件和應(yīng)用日志實(shí)現(xiàn)綁定;
5)增加基于 SOFAArk 框架提供類隔離能力,方便解決各種類沖突問(wèn)題;
6)增加中間件集成管理的能力,統(tǒng)一管控、提供中間件統(tǒng)一易用的編程接口、每一個(gè) SOFA 中間件都是獨(dú)立可插拔的組件;
依賴環(huán)境
SOFABoot 和 Spring Boot 版本依賴關(guān)系:
| 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 的版本肯定應(yīng)該也是根據(jù) Spring Boot 走的。
目前的 Spring Boot 版本已經(jīng)到了 2.4.x,想兼容最新的 Spring Boot 版本貌似還早。
SOFABoot 還使用了其他主要第三方開(kāi)源組件:
Spring Spring Boot SLF4j sofa-common-tools
一些擴(kuò)展依賴:
nuxeo ......
SOFABoot 支持 Maven 和 Gradle 依賴管理,類似 Spring Boot 的依賴引入方式,如在 Maven 配置文件中增加如下 標(biāo)簽配置的方式:
<parent>
????<groupId>com.alipay.sofagroupId>
????<artifactId>sofaboot-dependenciesartifactId>
????<version>3.4.6version>
parent>
Spring Boot 的依賴引入是這樣的:
<parent>
????<groupId>org.springframework.bootgroupId>
????<artifactId>spring-boot-starter-parentartifactId>
????<version>2.4.0version>
parent>
可以看出和 Spring Boot 如出一轍!
當(dāng)然,Spring Boot 依賴引入還有另外一種方式,參考:Spring Boot 開(kāi)啟的 2 種方式。
Spring Boot 基本介紹這里就不介紹了,關(guān)注公眾號(hào)Java技術(shù)棧回復(fù)關(guān)鍵字 "boot",可以閱讀我寫(xiě)的幾十篇往期實(shí)戰(zhàn)文章。這個(gè) Spring Boot 實(shí)戰(zhàn)倉(cāng)庫(kù),也歡迎 Star 關(guān)注學(xué)習(xí):
“https://github.com/javastacks/spring-boot-best-practice
引入 SOFA 組件
遵循 Spring Boot 命名規(guī)范,SOFABoot 所有中間件組件命名都是以 -sofa-boot-starter 來(lái)標(biāo)示的。
SOFABoot 目前提供的中間件組件如下:
| 中間件 | starter |
|---|---|
| SOFARPC | rpc-sofa-boot-starter |
| SOFATracer | tracer-sofa-boot-starter |
| SOFALookout | lookout-sofa-boot-starter |
SOFABoot 目前提供的擴(kuò)展組件如下:
| 擴(kuò)展組件 | starter |
|---|---|
| 健康檢查 | healthcheck-sofa-boot-starter |
| 模塊化隔離 | isle-sofa-boot-starter |
| 類隔離 | sofa-ark-springboot-starter |
| 測(cè)試擴(kuò)展 | test-sofa-boot-starter |
比如想引入 SOFARPC 中間件,只需增加下面的 Maven 依賴即可:
<dependency>
????<groupId>com.alipay.sofagroupId>
????<artifactId>rpc-sofa-boot-starterartifactId>
dependency>
注意下,和 Spring Boot 管理自身依賴的理念一致,SOFA 中間件的引入也不需要版本號(hào),因?yàn)樗?SOFA 中間件的依賴管理已經(jīng)在 sofaboot-dependencies 中定義好了,這樣做的好處就是統(tǒng)一管理和升級(jí),防止出現(xiàn)依賴沖突以及兼容性的問(wèn)題。
SOFABoot 框架中的每個(gè)組件并不是全部必須的,每個(gè)組件都是可選的,可以根據(jù)需要靈活的選擇其中的部分組件使用,比如你只想引入 SOFABoot 框架中的類隔離、日志空間隔離功能 ,而不想引入任何 SOFA 中間件,這完全是沒(méi)問(wèn)題的。
應(yīng)用場(chǎng)景
話說(shuō) SOFABoot 框架有哪些應(yīng)用場(chǎng)景?
SOFABoot 框架本身就脫胎于螞蟻金服內(nèi)部對(duì)于 Spring Boot 框架的運(yùn)用實(shí)踐的成果,又解決了 Spring Boot 在大規(guī)模金融級(jí)微服務(wù)架構(gòu)生產(chǎn)場(chǎng)景下遇到的各種問(wèn)題,又經(jīng)歷了螞蟻金服這樣大規(guī)模金融服務(wù)的打磨和生產(chǎn)驗(yàn)證,所以 SOFABoot 在大規(guī)模金融級(jí)微服務(wù)架構(gòu)下的運(yùn)用是非常合適的。
另外,SOFABoot 框架集成了所有螞蟻金服金融科技中間件,同時(shí)又能與 Spring Boot 框架無(wú)縫集成,大大降低了用戶的遷移成本。
如果不想自研,又對(duì) Spring Boot + 螞蟻金服技術(shù)棧情有獨(dú)鐘的,完全可以利用 SOFABoot 輕松搭建穩(wěn)定、可靠、安全、可擴(kuò)展的分布式應(yīng)用,以減少開(kāi)發(fā)、測(cè)試、集成成本。
最后,你們公司有用 SOFABoot 或者其他 SOFA 框架的么?歡迎分享使用經(jīng)驗(yàn)~
參考文檔:
https://github.com/sofastack/sofa-boot https://www.sofastack.tech/projects/sofa-boot/overview/
好了,今天的 SOFABoot 的體驗(yàn)分享就到這里了,大致摸清了 SOFABoot 的來(lái)龍去脈,關(guān)注我后面會(huì)更新更多好玩的技術(shù)。

往期推薦

SpringBoot集成Google開(kāi)源圖片處理框架,賊好用!

Docker部署SpringBoot的兩種方法,后一種一鍵部署超好用!

Socket粘包問(wèn)題的3種解決方案,最后一種最完美!

Spring Boot 解決跨域問(wèn)題的 3 種方案!
