你應該懂的SpringCloud 之 版本與組件
這邊文章筆者寫于一年前,之前發布在xxxx,哎,天下苦 xxxx久矣。
一、SpringCloud 是什么?
1、從架構演變開始講起

單體架構作為一個整體,相較于SOA架構、微服務架構這種拆分的架構,還有兩個明顯的缺點:單體架構存在著因為一個bug而拖死整個系統的風險;單體架構無法針對某一類高峰業務進行硬件擴展,只能作為整體進行擴展。
由單體架構進化而來的垂直架構,其實就是根據業務特性將原有的單體架構項目拆分成多個項目。業務拆分的原則應該滿足可以獨立運行、相互間不影響。垂直架構所拆分出的項目在體量上有所縮減,不過本質上依然是單體架構,具有單體架構固有的優缺點。但是實際中會存在這樣的場景,從商業角度出發,一個大型系統在投標之際就已經被規劃為多個子系統,這些子系統由不同廠商中標,自然而然的形成了垂直架構的模型。
SOA 架構同樣都是對系統進行拆分,SOA在垂直架構的基礎上,抽離出重疊的功能作為公共的服務,來解決重復造輪子的問題(垂直架構中部分功能重疊,比如用戶管理系統管理等。同時垂直架構的信息鼓搗會越加嚴重,一個系統需要集成和對接多個系統)。
SOA 架構可以分為兩種:
- ESB:拆分出的系統或服務,通過ESB(Enterprise Service Bus)企業服務總線來進行規范的、統一的信息交互,解決調用混亂的問題。SOA相較于垂直架構,對于業務的拆分更為清晰,公共的組件服務職責單一,可擴展性強。不再強行打通數據庫層面的壁障,讓數據重新回到隔離狀態,信息孤島問題全部由接口來解決,提高了系統的安全性。ESB將原先的點對點交互模式轉換為了總線式集成的交互模式,降低了系統間的耦合度,同時也降低了系統間相互集成的難度與成本。但是對于各個系統來說,能夠復用輪子真的很重要么?所付出的代價是愿意承受的么?輪子的抽取,使得系統與服務之間高度耦合;通過ESB進行中轉交互,性能一定會有所損耗,且所有系統間的信息都通過ESB來傳遞,ESB很明顯的會成為整個系統內的瓶頸所在,一旦ESB宕了,所有系統都會受到牽連。本質上 ESB 是一種基于消息的中心化架構,雖然它是面向服務的!
- RPC:遠程過程調用協議。早期的 SOA 就是簡單的 RPC 訪問,將業務模塊變成服務,使用 RPC 完成遠程方法調用。
微服務架構將單一的應用程序拆分為一組小型服務,每個服務都是圍繞業務能力進行構建,能夠獨立開發、測試、部署,服務間采用輕量級的通訊機制。從圖上我們看出,如果拋開 ESB 消息總線不談,微服務架構和 SOA 架構是非常相似的,我們可以講微服務看做是 SOA 的子集。但是微服務粒度更細、更有利于復用,服務間通信協議更輕量,再加上互聯網環境以及配套工具鏈對的成熟,微服務才有了最佳實踐。SOA 解決了業務重用,微服務是對已重用的服務進行進一步拆分,微服務的重點是解耦,以及解耦后的 DevOps。微服務是 SOA 的服務拆分粒度的最佳實踐!
?。?!微服務分布式架構尤其固有的復雜性,各個服務間需要互相通信、分布式事務、復雜的服務調用關系等等都是實踐微服務的會遇到的問題。
2、SpringCloud
SpringCloud是若干框架的集合,提供了全套的分布式解決方案,包含了:服務注冊與發現、配置中心、服務網關、智能路由、負載均衡、斷路器、監控跟蹤、分布式消息隊列等等。
SpringCloud讓程序員更專注于業務邏輯。SpringCloud 通過 Springboot風格的封裝,屏蔽掉了復雜的配合和實現原理,給程序員提供了一套簡單易懂,容易部署的開發工具包。
總而言之說人話!SpringCloud并不是一個框架,而是提供了一個生態圈,在這個生態圈中有很多個服務和工具,每一個服務獨立存在互不干擾,都可以單獨運行,但是它們組成了微服務整體架構,也就是說整個 SpringClous架構理論上已經搭建好了,我們獲取之后注入業務代碼即可。
再直白一點,這玩意不是一個你拿來就能跑的框架,他是一堆框架的集合!
最后不要慌,看見SpringCloud的工程不要慌,全是 Springboot工程~~~SpringCloud就是一個基于SpringBoot,用來簡化分布式開發的一個微服務架構開發工具!
3、SpringCloud 有什么?
-
Spring Cloud Netflix Eureka:服務注冊中心。 -
Spring Cloud Zookeeper:服務注冊中心。 -
Spring Cloud Consul:服務注冊和配置管理中心。 -
Spring Cloud Netflix Ribbon:客戶端負載均衡。 -
Spring Cloud Netflix Hystrix:服務容錯保護。 -
Spring Cloud Netflix Feign:聲明式服務調用。 -
Spring Cloud OpenFeign(可替代 Feign):OpenFeign 是 Spring Cloud 在 Feign 的基礎上支持了 Spring MVC 的注解,如 @RequesMapping等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通過動態代理的方式產生實現類,實現類中做負載均衡并調用其他服務。 -
Spring Cloud Netflix Zuul:API 網關服務,過濾、安全、監控、限流、路由。 -
Spring Cloud Gateway(可替代 Zuul):Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發的網關,Spring Cloud Gateway 旨在為微服務架構提供一種簡單而有效的統一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態系中的網關,目標是替代 Netflix Zuul,其不僅提供統一的路由方式,并且基于 Filter 鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等。 -
Spring Cloud Security:安全認證。 -
Spring Cloud Config:分布式配置中心。配置管理工具,支持使用 Git 存儲配置內容,支持應用配置的外部化存儲,支持客戶端配置信息刷新、加解密配置內容等。 -
Spring Cloud Bus:事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態變化,可與 Spring Cloud Config 聯合實現熱部署。 -
Spring Cloud Stream:消息驅動微服務。 -
Spring Cloud Sleuth:分布式服務跟蹤。 -
Spring Cloud Alibaba Nacos:阿里巴巴開源產品,一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。 -
Spring Cloud Alibaba Sentinel:面向分布式服務架構的輕量級流量控制產品,把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。 -
Spring Cloud Alibaba RocketMQ:一款開源的分布式消息系統,基于高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。 -
Spring Cloud Alibaba Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架,用于實現服務通信。 -
Spring Cloud Alibaba Seata:阿里巴巴開源產品,一個易于使用的高性能微服務分布式事務解決方案。 -
Spring Cloud Alibaba OSS:阿里云對象存儲服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。 -
Spring Cloud Alibaba SchedulerX:阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務調度服務。 -
Spring Cloud Alibaba SMS:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。以上這些組件不論是在歷史項目和現在的項目中都是比較常見的 SpringCloud組件,但是人生無常,世事難料,NetFlix 旗下多款組件不是停更就是拖更,導致了 SpringCloud生態中的組件較幾年前已經有了較大變化,截止目前筆者接觸到的項目上比較主流的組合是:
-
服務注冊發現與分布式配置管理:Alibaba Nacos
-
服務調用和負載均衡:LoadBlancer/OpenFeign
-
分布式事務:Alibaba Seata
-
服務熔斷和降級:Alibaba Sentinel
-
服務鏈路追蹤:Mircrometer Tracing
-
服務網關:GateWay
-
消息隊列、削峰填谷:RocketMQ、RabbitMQ
二、SpringBoot3 的崛起
當我們同時使用 Springboot和 SpringCloud 的時候,大家一定要注意是由 Cloud決定你的 boot版本的,有的同學說到,我們公司 jdk8 的項目還在維護和開發,我不用太關注版本,筆者要提醒的是搞微服務如果不注意版本會死的很難看很難看的。。。。絕對不是嚇唬你。

Spring Boot 3.3 正式發布了,3.1.x 在24 年 5 月 18 日也停止維護了。當前商業版支持的也只有 2.7+了,這就意味著 2.6 及以下版本將徹底成為歷史。
當前 SpringBoot3最低要求 java17,還在緊緊擁抱 JDK8 的公司是該考慮考慮怎么辦了。

三、SpringCloud的版本命名規則
Spring Cloud 采用了英國倫敦地鐵站的名稱來命名,并由地鐵站名稱字母A-Z依次類推的形式來發布迭代版本。
SpringCloud是一個由許多子項目組成的綜合項目,各子項目有不同的發布節奏。為了管理SpringCloud與各子項目的版本依賴關系,發布了一個清單,其中包括了某個SpringCloud版本對應的子項目版本。為了避免SpringCloud版本號與子項目版本號混淆,SpringCloud版本采用了名稱而非版本號的命名,這些版本的名字采用了倫敦地鐵站的名字,根據字母表的順序來對應版本時間順序。例如Angel是第一個版本, Brixton是第二個版本。
當SpringCloud的發布內容積累到臨界點或者一個重大BUG被解決后,會發布一個"service releases"版本,簡稱SRX版本,比如Greenwich.SR2就是SpringCloud發布的Greenwich版本的第2個SRX版本。
2020 年后改了命名規則,使用了全新的 “日歷化” 版本命名方式。
日歷式命名:
Spring Cloud 使用了 YYYY.MINOR.MICRO 的命名規則
YYYY:表示 4 位年份
MINOR:代表一個遞增的數字,每年以 0 開始遞增
MICRO:代表版本號后綴,就和之前使用的 .0 類似于 .RELEASE 一樣,.2 類似于 .SR2。
預發布版本的后綴分隔符也從 . 變更為 -,如:2020.0.0-M1 和 2020.0.0-RC2 命名所示。
同時,Spring Cloud 將停止給快照版本添加 BUILD- 前綴,如:2020.0.0-SNAPSHOT 命名所示。
四、從官網看 Cloud版本
從官網看 Cloud版本與 Boot版本的對應關系。

五、SpringCloud Alibaba 的版本選擇
Spring Cloud 是分布式微服務架構的一站式解決方案,它提供了一套簡單易用的編程模型,使我們能在 Spring Boot 的基礎上輕松地實現微服務系統的構建。 Spring Cloud 提供以微服務為核心的分布式系統構建標準。

Spring Cloud 本身并不是一個開箱即用的框架,它是一套微服務規范,共有兩代實現。
-
Spring Cloud Netflix 是 Spring Cloud 的第一代實現,主要由 Eureka、Ribbon、Feign、Hystrix 等組件組成。
-
Spring Cloud Alibaba 是 Spring Cloud 的第二代實現,主要由 Nacos、Sentinel、Seata 等組件組成。
SpringCloud Alibaba的版本發布說明:
2023.x 分支
適配 Spring Boot 3.2,Spring Cloud 2023.x 版本及以上的 Spring Cloud Alibaba 版本按從新到舊排列如下表(最新版本用*標記):
Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version 2023.0.1.0* Spring Cloud 2023.0.1 3.2.4 2023.0.0.0-RC1 Spring Cloud 2023.0.0 3.2.0 組件版本關系
每個 Spring Cloud Alibaba 版本及其自身所適配的各組件對應版本如下表所示:
Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Seata Version 2023.0.1.0 1.8.6 2.3.2 5.1.4 2.0.0 2023.0.0.0-RC1 1.8.6 2.3.0 5.1.4 2.0.0
六、關于Cloud各種組件的停更、升級、替換
2018 年前后Netflix公司宣布其核心組件Hystrix、Ribbon、Zuul、Eureka等進入維護狀態,不再進行新特性開發,只修 BUG。
這直接影響了Spring Cloud項目的發展路線,Spring 官方不得不采取了應對措施,在 2019 年的在 SpringOne 2019 大會中,Spring Cloud宣布 Spring Cloud Netflix 項目進入維護模式,并在 2020 年移除相關的Netflix OSS組件。
以下是被移除的組件:

Spring Cloud Alibaba 是阿里巴巴結合自身豐富的微服務實踐而推出的微服務開發的一站式解決方案,是 Spring Cloud 第二代實現的主要組成部分。吸收了 Spring Cloud Netflix 微服務框架的核心架構思想,并進行了高性能改進。自 Spring Cloud Netflix 進入停更維護后,Spring Cloud Alibaba 逐漸代替它成為主流的微服務框架。
同時 Spring Cloud Alibaba 也是國內首個進入 Spring 社區的開源項目。2018 年 7 月,Spring Cloud Alibaba 正式開源,并進入 Spring Cloud 孵化器中孵化;2019 年 7 月,Spring Cloud 官方宣布 Spring Cloud Alibaba 畢業,并將倉庫遷移到 Alibaba Github OSS 下。
讀到這里大家應該對 SpringCloud有了一個宏觀的認識,應該不會照著 20 年左右的博客教程照本宣科用 Eureka 入門(我沒有任何詆毀 Eureka 和這種學習方法的意思,只是想讓大家在悶頭學習的時候也能抬頭看看。),覺著使用了 Eureka 就是微服務了,希望能幫到大家:)

浙公網安備 33010602011771號