Spring Cloud 是什么
概述
Spring Cloud 是一系列框架的集合,為開(kāi)發(fā)人員提供了微服務(wù)系統(tǒng)架構(gòu)中的一些常見(jiàn)模型,例如:配置管理、服務(wù)發(fā)現(xiàn)、斷路器、路由、微代理、控制總線、一次性令牌、全局鎖、Leader選舉、分布式會(huì)話、集群狀態(tài)路由、分布式消息等。
Spring Cloud 構(gòu)建與Spring Boot之上,利用Spring Boot的便利性簡(jiǎn)化了微服務(wù)系統(tǒng)開(kāi)發(fā)、啟動(dòng)和部署。使得開(kāi)發(fā)者可以快速啟動(dòng)實(shí)現(xiàn)這些模型的服務(wù)和應(yīng)用程序。
特性
SpringCloud 致力于為典型用例提供良好的開(kāi)箱即用體驗(yàn),并提供覆蓋其他用例的擴(kuò)展機(jī)制。
- 分布式/版本化配置-Distributed/versioned configuration
- 服務(wù)注冊(cè)發(fā)現(xiàn)-Service registration and discovery
- 網(wǎng)關(guān)路由-Routing
- 服務(wù)調(diào)用-Service-to-service calls
- 負(fù)載均衡-Load balancing
- 服務(wù)熔斷-Circuit Breakers
- 全局鎖-Global locks
- Leader選舉和集群狀態(tài)-Leadership election and cluster state
- 分布式消息-Distributed messaging
項(xiàng)目
從Spring Cloud 官網(wǎng)可以看到包含的子項(xiàng)目眾多(30個(gè)),讓人望而生怯,直接勸退。但真正需要掌握的其實(shí)不多(6個(gè)),只要能滿足上面所說(shuō)特性即可,剩下的按需加入。下面從Spring Cloud的發(fā)展歷程來(lái)聊聊,看下這些項(xiàng)目都是干啥的以及是什么時(shí)候加入的。

Spring Cloud 發(fā)展歷程
起源
說(shuō)起Spring Cloud,不得不提起大名鼎鼎的Netflix。2014年,當(dāng)時(shí)Netflix公司推出了一系列開(kāi)源的微服務(wù)工具包(俗稱(chēng)Netflix OSS),其中包括 Eureka(服務(wù)注冊(cè)和發(fā)現(xiàn))、Hystrix(熔斷器)、Zuul(網(wǎng)關(guān))、Ribbon(負(fù)載均衡)、Feign(服務(wù)間調(diào)用)等工具。
Spring Cloud 創(chuàng)始人Spencer Gibb 和 Josh Long 在學(xué)習(xí) Netflix OSS 工具包時(shí),意識(shí)到可以與 Spring 框架無(wú)縫集成,從而降低開(kāi)發(fā)人員在構(gòu)建微服務(wù)時(shí)的技術(shù)難度和成本。于是,他們開(kāi)始開(kāi)發(fā) Spring Cloud,并將 Netflix OSS 的技術(shù)和 Spring 框架相結(jié)合,提供了一套全面的微服務(wù)解決方案。
主版本列表
Spring Cloud 版本都是倫敦地鐵站的名詞,直到2020年才采用了新的命名方式。在SR版本發(fā)布之前,會(huì)先發(fā)布一個(gè)Release版本。
| 發(fā)布時(shí)間 | Spring Cloud 版本 | Spring Boot 版本 |
|---|---|---|
| 2015年3月發(fā)布 | Angel (安吉爾) | 1.2.x |
| 2016年5月發(fā)布 | Brixton(布里克斯頓) | 1.3.x |
| 2016年9月發(fā)布 | Camden(卡梅登) | 1.4.x |
| 2017年4月發(fā)布 | Dalston(達(dá)斯頓) | 1.5.x |
| 2017年12月發(fā)布 | Edgware(艾奇韋爾) | 1.5.x |
| 2018年6月發(fā)布 | Finchley(芬奇利) | 2.0.x |
| 2019年4月發(fā)布 | Greenwich(格林威治) | 2.1.x |
| 2019年11月發(fā)布 | Hoxton(霍克斯頓) | 2.2.x,2.3.x (Starting with SR5) |
| 2020年12月發(fā)布 | 2020.0.x aka Ilford(埃福的) | 2.4.x,2.5.x (Starting with 2020.0.3) |
| 2021年6月發(fā)布 | 2021.0.x aka Jubilee(朱比利) | 2.6.x,2.7.x (Starting with 2021.0.3) |
| 2022年12月發(fā)布 | 2022.0.x aka Kiburn(基爾伯恩) | 3.0.x |
版本說(shuō)明
| 版本 | 描述 |
|---|---|
| SNAPSHOT | 快照版。可以穩(wěn)定使用,且仍在繼續(xù)改進(jìn)版本 |
| PRE | Preview Edition 預(yù)覽版。內(nèi)部測(cè)試版,主要給開(kāi)發(fā)人員和測(cè)試人員使用。 |
| RC | Release Candidate 發(fā)行候選版本。基本不再加入新的功能,主要是修復(fù)bug,是最終發(fā)行正式版的前一個(gè)版本,將bug修復(fù)完就可以發(fā)行正式版本了。 |
| GA | General Availability 正式發(fā)布版本。官方開(kāi)始推薦廣泛使用,國(guó)外有的也用GA表示Release版本。 |
| SR | Service Release 修正版或更新版。在正式版本推出后又發(fā)現(xiàn)bug,對(duì)Bug的修復(fù)。 |
發(fā)布內(nèi)容
說(shuō)明:
以下列的新增項(xiàng)目并不是嚴(yán)格的只在某個(gè)版本及其以后版本中出現(xiàn),也可能出現(xiàn)在之前版本的更新版中。只是說(shuō)首次出現(xiàn)時(shí)在那個(gè)版本發(fā)布,因?yàn)橥粫r(shí)間之前的版本也在更新維護(hù),會(huì)發(fā)布SRx版會(huì)將新的特性合并進(jìn)來(lái)。
例如:Spring Cloud Function首次在2018年6月18日發(fā)布的Finchley.RELEASE中出現(xiàn),但是在他之前的Edgware版本,在隨后的更新版Edgware.SR4(2018年6月29)中也包含了Spring Cloud Function。
Angel (安吉爾)2015年3月發(fā)布
新增的項(xiàng)目:
- Spring Cloud Config
- 分布式配置,支持giv,svn存儲(chǔ)
- Spring Cloud Netflix
- 提供對(duì)Netflix OSS的集成。
- 包含了大部分Netflix OSS 的項(xiàng)目:Eureka,Hystrix,Zuul,Feign,Ribbon等。
- Spring Cloud Bus
- 用于連接服務(wù)和服務(wù)實(shí)例以及分布式消息傳遞的事件總線。支持RabbitMQ
- Spring Cloud Security
- 在 Zuul 代理中提供對(duì)負(fù)載平衡的 OAuth2靜態(tài)客戶端和身份驗(yàn)證頭中繼的支持。
- Spring Cloud AWS
- 提供與Amazon Web Services集成
- Spring Cloud Connectors
- 便于各種平臺(tái)上的PaaS應(yīng)用程序容易連接到后端服務(wù)
- Spring Cloud Starters
- Spring Boot 風(fēng)格的啟動(dòng)項(xiàng)目,簡(jiǎn)化Spring Cloud的依賴(lài)管理,已經(jīng)中止了,后續(xù)和其他項(xiàng)目合并了
- Spring Cloud CLI
- SpringBootCLI 插件,用于在 Groovy 中快速創(chuàng)建 SpringCloud 組件應(yīng)用程序。
- Spring Cloud Commons
- 在不同的Spring Cloud實(shí)現(xiàn)中使用了一組抽象和公共類(lèi)。包含對(duì)服務(wù)發(fā)現(xiàn),斷路器,負(fù)載均衡的抽象。
Brixton(布里克斯頓)2016年5月發(fā)布
新增項(xiàng)目:
- Spring Cloud Zookeeper
- 基于Apache Zookeeper的服務(wù)發(fā)現(xiàn)和配置管理
- Spring Cloud Consul
- 基于Hashicorp Consul的服務(wù)發(fā)現(xiàn)和配置管理
- Spring Cloud Sleuth
- 分布式跟蹤,兼容Zipkin,HTrace和基于日志的跟蹤(ELK)
- Spring Cloud Cloudfoundry
- 提供和Pivotal Cloudfoundry集成。
- Spring Cloud Stream
- Spring Cloud Stream 提供了對(duì)異步消息發(fā)送和接收的抽象實(shí)現(xiàn),提供統(tǒng)一API方式,允許開(kāi)發(fā)人員底層使用不同的MQ,例如Redis,Rabbit,Kafka
- Spring Cloud Task
- 短生命周期的微服務(wù)。簡(jiǎn)單的聲明,用于向 Spring Boot 應(yīng)用程序添加功能性和非功能性特性。
- Spring Cloud Cluster
- 集群的領(lǐng)導(dǎo)選舉、鎖和公共的狀態(tài)模式。為Zookeeper、Redis、Hazelcast、Consul提供抽象和實(shí)現(xiàn)。(已被廢棄,并被Spring Integration取代)
部分項(xiàng)目更新:
- Spring Cloud Bus
- 從新基于Spring Cloud Stream實(shí)現(xiàn)
Camden(卡梅登)2016年9月發(fā)布
新增項(xiàng)目:
- Spring Cloud Contract
- 該項(xiàng)目是一個(gè)總括性項(xiàng)目,持有解決方案,幫助用戶成功實(shí)現(xiàn)消費(fèi)者驅(qū)動(dòng)的契約方法。目前,SpringCloud 契約由 SpringCloud Contract Verifier項(xiàng)目組成。
Dalston(達(dá)斯頓)2017年4月發(fā)布
新增項(xiàng)目:
- Spring Cloud Vault Config
- SpringCloudVault 配置通過(guò) Hashicorp Vault 為分布式系統(tǒng)中的外部化私密管理提供客戶端支持。
部分項(xiàng)目更新:
- Spring Cloud Commons
- @EnableDiscoveryClient(autoRegister=false)
- 新增ServiceRegistry API,Spring Cloud Zookeeper和Spring Cloud Consul實(shí)現(xiàn)該API
- @LoadBalanced AsyncRestTemplate 支持
- Configuration driven DiscoveryClient
Edgware(艾奇韋爾)2017年12月發(fā)布
新增項(xiàng)目:
- Spring Cloud Gateway
- 這個(gè)項(xiàng)目提供了一個(gè)在 SpringWebFlux 之上構(gòu)建 API 網(wǎng)關(guān)的庫(kù)。Spring Cloud Gateway 旨在提供一種簡(jiǎn)單而有效的方法來(lái)路由到 API,并向它們提供橫切關(guān)注點(diǎn),例如: 安全性、監(jiān)視/度量和彈性。
Finchley(芬奇利)2018年6月發(fā)布
新增項(xiàng)目:
- Spring Cloud OpenFeign
- Feign雖然是Netflix公司開(kāi)源的,但已經(jīng)移交給OpenFeign組織管理,不從屬于Netflix OSS范疇。
- 原先所有的Spring Cloud Netflix Feign全部移到Spring Cloud OpenFeign。
- Spring Cloud Function
- 是基于 Spring Boot 的函數(shù)計(jì)算框架,它抽象出所有傳輸細(xì)節(jié)和基礎(chǔ)架構(gòu),允許開(kāi)發(fā)人員保留所有熟悉的工具和流程,并專(zhuān)注于業(yè)務(wù)邏輯。
Greenwich(格林威治)2019年4月發(fā)布
新增項(xiàng)目:
- Spring Cloud Gcp
- Spring Cloud Gcp 項(xiàng)目使得 Spring 框架成為了 Google 云平臺(tái)(gCP)的一等公民。
- Spring Cloud GCP 提供了大量的庫(kù),使得從 Spring Framework 應(yīng)用程序使用 Google Cloud Platform 變得更加容易。
- Spring Cloud Kubernetes
- Spring Cloud Kubernetes 提供了Spring Cloud 接口的實(shí)現(xiàn),允許開(kāi)發(fā)人員在 Kubernetes 上構(gòu)建和運(yùn)行 Spring Cloud 應(yīng)用程序。
- 雖然這個(gè)項(xiàng)目在構(gòu)建云本地應(yīng)用程序時(shí)可能對(duì)您有用,但是在 Kubernetes 上部署 Spring Boot 應(yīng)用程序不是必需的。你只需要一個(gè)基本的 Spring Boot 應(yīng)用程序和 Kubernetes 本身就可以完成很多事情。
Hoxton(霍克斯頓)2019年11月發(fā)布
增強(qiáng)了kubernetes和服務(wù)網(wǎng)格Service Mesh的支持
2020.0.x aka Ilford(埃福的)2020年12月發(fā)布
2020.0.0是第一個(gè)使用新的版本命名方案的Spring Cloud發(fā)行版本。
重要變更:
- Spring Cloud Netflix 大部分組件被移除。archaius、hystrix、ribbon、turbine、zuul等移除,只保留了eureka。
- Spring Cloud Gcp 不再是Spring Cloud發(fā)布系列的一部分,單獨(dú)維護(hù)發(fā)布。
- Spring Cloud Kubernetes
- 代碼重構(gòu)
- Kubernetes 客戶端實(shí)現(xiàn)
- 配置更改監(jiān)聽(tīng)器
- 更名spring-cloud-starter-kubernetes-xx命名為spring-cloud-starter-kubernetes-fabric8-xx
新增項(xiàng)目:
- Spring Cloud Circuit Breaker
- Spring Cloud 斷路器,取代hystrix。提供了跨不同斷路器實(shí)現(xiàn)的抽象。提供了一致的 API,允許開(kāi)發(fā)人員選擇最適合應(yīng)用程序的斷路器實(shí)現(xiàn)。
- 目前支持的斷路器:Resilience4J 和 Spring Retry。
- Spring Cloud Loadbalancer
- 負(fù)載均衡,取代ribbon
2021.0.x aka Jubilee(朱比利)2021年6月發(fā)布
正常維護(hù)更新
2022.0.x aka Kiburn(基爾伯恩)2022年12月發(fā)布
重要變更:
- Spring Cloud CLI
- 該項(xiàng)目從發(fā)布系列中移除
- Spring Cloud Cloudfoundry
- 該項(xiàng)目從發(fā)布系列中移除
- Spring Cloud Commons
- AsyncRestTemplate 在 SpringFramework6中已被刪除,因此 LoadBalancer 的自動(dòng)配置已被刪除。
- Token Relay 遷移到新的Spring Security OAuth 2。
- LoadBalancer ResponseData 現(xiàn)在使用 org.springframework.http. HttpStatusCode。
- 刪除@EnableCircuitBreaker,因?yàn)樗槐?Hystrix 在不再支持的 Spring Cloud Netflix 中使用
- 刪除@SpringCloudApplication 注釋。不再需要@EnableDiscover yClient 和@EnableCircuitBreaker。
- Spring Cloud Sleuth
- 該項(xiàng)目已經(jīng)從發(fā)布系列中移除。這個(gè)項(xiàng)目的核心已經(jīng)移動(dòng)到Micrometer Tracing項(xiàng)目和instrumentations將被移動(dòng)到 Micrometer 和所有各自的項(xiàng)目(不再是所有的instrumentations將在一個(gè)單一的存儲(chǔ)庫(kù)完成)
- Spring Cloud Kubernetes
- 在3.0.0-M1之前的版本中,Kubernetes 感知是使用 spring.clod.Kubernetes.able 屬性實(shí)現(xiàn)的。此屬性已被刪除且不受支持。相反,我們使用 SpringBootAPI: ConditionalOnCloudPlatform。如果需要顯式啟用或禁用這種感知,請(qǐng)使用 spring.main.cloud-Platform = NONE/KUBERNETES。
- Spring Cloud OpenFeign
- LoadBalancer ResponseData 現(xiàn)在使用 org.springframework.http. HttpStatusCode。
- OAuth2支持已遷移到 SpringSecurityOAuth2客戶端。
- spring.cloud.openfeign.metrics 屬性前綴已經(jīng)被更改為spring.cloud.openfeign.micrometer.
- 為了與 SpringFramework 中的更改保持一致,已經(jīng)刪除了對(duì) ApacheHttpClient4的支持。ApacheHttpClient5是推薦的替代品。
- Spring Cloud OpenFeign 的屬性前綴已經(jīng)從 feign 更改為 Spring.clod.OpenFeign。
- Spring Cloud Netflix
- 刪除了不必要的@EnableEurekaClient 注釋
- 已刪除不推薦的 RestTemplateDiscover yClientOptionalArgs # RestTemplateDiscover yClientOptionalArgs ()構(gòu)造函數(shù)
- 切換到默認(rèn)的@FeignClient 屬性解析。如果您希望回到惰性屬性解析(例如,對(duì)于與 Spring Cloud Contracts 集成的測(cè)試) ,請(qǐng)將 spring.cloud.openfeign.lazy-attributes-resolution 設(shè)置為 true。
消失的Spring Cloud Netflix
消失的原因
Spring Cloud 的興起和Netflix OSS密不可分,從Spring Cloud 在2015年3月發(fā)布的第一個(gè)版本Angel (安吉爾)中可以看出,最核心的項(xiàng)目就是Spring Cloud Netflix,其中包含的Archarus、Eureka、Hystrix、Ribbon、Zuul、Feign等都是微服務(wù)系統(tǒng)架構(gòu)經(jīng)典的解決方案,而這些方案則是在2014年由Netflix公司開(kāi)源的,俗稱(chēng)Netflix OSS。但是在2020年12月發(fā)布的2020.0.0版本中則移除了大部分Netflix OSS組件,只剩下了Eureka,這期間到底發(fā)生了什么?要想解釋清楚,還是得從Netflix公司說(shuō)起。
2014年Netflix公司開(kāi)源了自己的微服務(wù)解決套件也就是Netflix OSS,在當(dāng)時(shí)這也是微服務(wù)系統(tǒng)架構(gòu)最成功的落地方案,被各個(gè)大廠廣泛使用,但是在微服務(wù)興起不久,也就是2018年前后Netflix公司宣布其核心組件Hystrix、Ribbon、Zuul、Eureka等進(jìn)入維護(hù)狀態(tài),不再進(jìn)行新特性開(kāi)發(fā),只修復(fù)bug,這直接影響了Spring Cloud項(xiàng)目的發(fā)展規(guī)范,使Spring官網(wǎng)不得不采取應(yīng)對(duì)措施,在 2019 年的在 SpringOne 2019 大會(huì)中,Spring Cloud宣布 Spring Cloud Netflix 項(xiàng)目進(jìn)入維護(hù)模式,并在 2020 年移除相關(guān)的Netflix OSS組件。
目前的最新版2022.0.x中Spring Cloud Netflix中只剩下了Eureka,但Eureka預(yù)計(jì)也會(huì)在將來(lái)被徹底移除,畢竟不在維護(hù)了。而Feign雖說(shuō)是Netflix開(kāi)源的,但是在Spring Cloud 2018年6月發(fā)布的Finchley(芬奇利)中可以看出原先所有Spring Cloud Netflix Feign全部移到Spring Cloud OpenFeign中,也就是不在屬于Netflix OSS了,至此,大名鼎鼎的Netflix OSS差不多都落下了帷幕。
替代方案
接下來(lái)說(shuō)一說(shuō)替代方案,畢竟Netflix好多組件都不在維護(hù)了。從2018年之后發(fā)現(xiàn)的版本中也可以看出Spring Cloud做出的努力:
- 開(kāi)發(fā)自己的項(xiàng)目替代Netflix中的相關(guān)組件。例如:
- Spring Cloud Gateway 網(wǎng)關(guān),替代Zuul
- Spring Cloud Circuit Breaker 斷路器,替代Hystrix
- Spring Cloud LoadBalancer 負(fù)載均衡,替代Ribbon
- 和更多云廠商集成,分擔(dān)分險(xiǎn)。例如:
-
Spring Cloud Azure-微軟
- 和微軟的Azure集成,使的在 Spring 應(yīng)用程序中使用 Azure 服務(wù)更加容易。
-
Spring Cloud Alibaba-阿里巴巴
- 和阿里巴巴的一站式分布式解決方案集成,使的在Spring應(yīng)用程序中使用阿里巴巴的中間件變得容易。
-
Spring Cloud for Amazon Web Services-亞馬遜
- 和亞馬遜的AmazonWeb集成,使得開(kāi)發(fā)人員可以圍繞宿主服務(wù)構(gòu)建應(yīng)用程序,而不必關(guān)心基礎(chǔ)設(shè)施或維護(hù)。
-
Spring Cloud GCP-谷歌平臺(tái)
- 和谷歌平臺(tái)集成,使得在 Spring 應(yīng)用程序中使用 Google Cloud Platform 變得更加容易。
-
Spring Cloud Consul-Hashicorp
- 和Hashicorp的Consul集成。通過(guò)自動(dòng)配置和綁定到 Spring 環(huán)境和其他 Spring 編程模型習(xí)慣用法集成Consul。
-
Spring Cloud Zookeeper-Apache
- 和Apache的Zookeeper集成。通過(guò)自動(dòng)配置和綁定到 Spring 環(huán)境和其他 Spring 編程模型習(xí)慣用法集成ZooKeeper。
-
Spring Cloud Kubernetes
- 和Kubernetes的集成,允許在 Kubernetes 上構(gòu)建和運(yùn)行 Spring Cloud 應(yīng)用程序。
-
Spring Cloud Azure-微軟
- 制定規(guī)范,提供一致API和跨不同實(shí)現(xiàn)的抽象,對(duì)開(kāi)發(fā)人員屏蔽掉底層差異。例如:
- Spring Cloud CricuitBreaker。定義了斷路器抽象。支持:Resilience4J 和 Spring Retry。
- Spring Cloud Stream。定義了異步消息通信抽象。支持Redis、Rabbit、Kafka、RocketMQ等
- Spring Cloud Commons。定義了服務(wù)注冊(cè)和發(fā)現(xiàn)抽象。支持Nacos,Zookeeper等
- Spring Environment 定義了配置抽象。支持Nacos、Apollo、Spring Cloud Config等。
方案總覽
紅色背景:已經(jīng)被Spring Cloud移除。
黃色背景:維護(hù)模式,不再開(kāi)發(fā)
藍(lán)色背景:Spring Cloud 抽象的編程模型,提供統(tǒng)一的API,實(shí)現(xiàn)細(xì)節(jié)交由各云廠商。

從上面表格也可以看出,Spring Cloud Netflix下線后,最好的替代品就是Spring Cloud Alibaba了。
微服務(wù)生態(tài)全景圖

上圖是阿里云網(wǎng)站提供的全景圖,供參考。
下面介紹下使用Spring Cloud Alibaba 作為微服務(wù)系統(tǒng)的架構(gòu)時(shí),作為一名開(kāi)發(fā)人員需要學(xué)習(xí)和掌握的技能。
- 分布式配置:Nacos,Apollo目前這兩種使用居多??蛇x:Spring Cloud Config。
- 服務(wù)注冊(cè)/發(fā)現(xiàn):Nacos,Spring Cloud Zookeeper。可選:Spring Cloud Consul
- 服務(wù)調(diào)用:OpenFeign和RestTemplate(HTTP協(xié)議)、Dubbo(TCP協(xié)議)
- 負(fù)載均衡:Spring Cloud Loadbalancer、Dubbo
- 服務(wù)熔斷:Spring Cloud Circuit Breaker、Sentinel。
- 服務(wù)網(wǎng)關(guān):Higress,Apache ShenYu
- 分布式消息:Spring Cloud Stream(提供了統(tǒng)一抽象)、RocketMQ
- 消息總線:Spring Cloud Bus(提供了統(tǒng)一抽象)、Spring Cloud Bus RocketMQ
- 鏈路跟蹤:Micrometer Tracing
- 分布式事務(wù):Seata
阿里云提供了自己的應(yīng)用腳手架,方便開(kāi)發(fā)者快速創(chuàng)建應(yīng)用:https://start.aliyun.com
參考
起底Spring Boot/Cloud背后豪華的研發(fā)團(tuán)隊(duì) ——獨(dú)角獸公司Pivotal
Spring Cloud 移除了Hystrix、Zuul等Netflix組件