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

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

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

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