SOFABoot基于 Spring Boot 的研發(fā)框架
SOFABoot 是螞蟻金服開源的基于 Spring Boot 的研發(fā)框架,它在 Spring Boot 的基礎(chǔ)上,提供了諸如 Readiness Check,類隔離,日志空間隔離等等能力。在增強(qiáng)了 Spring Boot 的同時,SOFABoot 提供了讓用戶可以在 Spring Boot 中非常方便地使用 SOFAStack 相關(guān)中間件的能力。
一、背景
Spring Boot 是一個非常優(yōu)秀的開源框架,可以非常方便地就構(gòu)建出一個基于 Spring 的應(yīng)用程序,但是在使用過程中,還是會遇到一些問題:
-
Spring Boot 提供了一個基礎(chǔ)的健康檢查的能力,中間件和應(yīng)用都可以擴(kuò)展來實(shí)現(xiàn)自己的健康檢查邏輯。但是 Spring Boot 的健康檢查只有 Liveness Check 的能力,缺少 Readiness Check 的能力,這樣會有比較致命的問題。當(dāng)一個微服務(wù)應(yīng)用啟動的時候,必須要先保證啟動后應(yīng)用是健康的,才可以將上游的流量放進(jìn)來(來自于 RPC,網(wǎng)關(guān),定時任務(wù)等等流量),否則就可能會導(dǎo)致一定時間內(nèi)大量的錯誤發(fā)生。
-
Spring Boot 雖然通過依賴管理(Dependency Management)的方式最大程度的保證了 Spring Boot 管理的 JAR 包之間的兼容性,但是不可避免的,當(dāng)引入一些其他的 JAR 包的時候,還是可能會遇到?jīng)_突,而且很多時候這種沖突解決起來并不是這么容易,一個例子是當(dāng)沖突的包是序列化相關(guān)的類庫時,比如說 Hessian,如果應(yīng)用中的一個組件需要使用 Hessian 3,而另一個則必須要使用 Hessian 4,由于 Hessian 3 和 Hessian 4 之間的不兼容性,并且序列化還涉及到微服務(wù)中的上下游服務(wù),要把 Hessian 統(tǒng)一到一個版本絕非易事。
-
在超大規(guī)模微服務(wù)運(yùn)維的場景下,運(yùn)維能力的平臺化是一定要解決的問題,而監(jiān)控又是其中非常主要的一個點(diǎn),針對于日志監(jiān)控這種情況,Spring Boot 并沒有提供任何解決方案。大部分的開源組件,具體要打印哪些日志,打印到什么路徑,什么文件下面,都是由應(yīng)用的使用者來決定,這樣會導(dǎo)致每一個應(yīng)用的日志配置都各式各樣,每一個應(yīng)用都需要去監(jiān)控系統(tǒng)中配置自己應(yīng)用的日志監(jiān)控,導(dǎo)致關(guān)鍵的監(jiān)控的實(shí)施成本特別高。
為了解決以上的問題,又因為 SOFAStack 中的諸多中間件本身就需要集成 Spring Boot,所以螞蟻金服基于 Spring Boot 開發(fā)并開源了 SOFABoot,來解決以上的問題,也方便使用者在 Spring Boot 中方便地去使用 SOFAStack 中間件。
二、功能簡介
為了解決 Spring Boot 在實(shí)施大規(guī)模微服務(wù)架構(gòu)時候的問題,SOFABoot 提供了以下的能力:
2.1 增強(qiáng) Spring Boot 的健康檢查能力
針對 Spring Boot 缺少 Readiness Check 能力的情況,SOFABoot 增加了 Spring Boot 現(xiàn)有的健康檢查的能力,提供了 Readiness Check 的能力。利用 Readiness Check 的能力,SOFAStack 下各種中間件只有在 Readiness Check 通過之后,才將流量引入到應(yīng)用的實(shí)例中,比如 RPC,只有在 Readiness Check 通過之后,才會向服務(wù)注冊中心注冊,后面來自上游應(yīng)用的流量才會進(jìn)入。
除了中間件可以利用 Readiness Check 的事件來控制流量的進(jìn)入之外,PAAS 系統(tǒng)也可以通過訪問 http://localhost:8080/health/readiness 來獲取應(yīng)用的 Readiness Check 的狀況,用來控制例如負(fù)載均衡設(shè)備等等的流量。
2.2 提供類隔離的能力
為了解決 Spring Boot 下的類依賴沖突的問題,SOFABoot 基于 SOFAArk 提供了 Spring Boot 上的類隔離的能力,在一個 SOFABoot 的系統(tǒng)中,只要引入 SOFAArk 相關(guān)的依賴,就可以將 SOFAStack 的中間件相關(guān)的類和應(yīng)用相關(guān)的類的 ClassLoader 進(jìn)行隔離,防止出現(xiàn)類沖突。當(dāng)然,用戶也可以基于 SOFAArk,將其他的中間件、第三方的依賴和應(yīng)用的類進(jìn)行隔離。
2.3 日志空間隔離能力
為了統(tǒng)一大規(guī)模微服務(wù)場景下的中間件日志的打印,SOFABoot 提供了日志空間隔離的能力給各個 SOFAStack 的中間件,各個 SOFAStack 的中間件采用日志空間隔離的能力之后,自動就會將本身的日志和應(yīng)用的普通日志隔離開來,并且打印的日志的路徑也是相對固定,非常方便進(jìn)行統(tǒng)一地監(jiān)控。
2.4 SOFAStack 中間件的集成管理
基于 Spring Boot 的自動配置能力,SOFABoot 提供了 SOFAStack 中間件統(tǒng)一易用的編程接口以及 Spring Boot 的 Starter,方便在 Spring Boot 環(huán)境下使用 SOFAStack 中間件,每一個 SOFAStack 中間件都是獨(dú)立可插拔的組件,節(jié)約開發(fā)時間,和后期維護(hù)的成本。
