Spring Cloud 是什么
概述
Spring Cloud 是一系列框架的集合涝登,為開發(fā)人員提供了微服務(wù)系統(tǒng)架構(gòu)中的一些常見模型雄家,例如:配置管理、服務(wù)發(fā)現(xiàn)胀滚、斷路器趟济、路由、微代理咽笼、控制總線顷编、一次性令牌、全局鎖剑刑、Leader選舉媳纬、分布式會話、集群狀態(tài)路由施掏、分布式消息等钮惠。
Spring Cloud 構(gòu)建與Spring Boot之上,利用Spring Boot的便利性簡化了微服務(wù)系統(tǒng)開發(fā)七芭、啟動和部署素挽。使得開發(fā)者可以快速啟動實現(xiàn)這些模型的服務(wù)和應(yīng)用程序。
特性
SpringCloud 致力于為典型用例提供良好的開箱即用體驗狸驳,并提供覆蓋其他用例的擴展機制毁菱。
- 分布式/版本化配置-Distributed/versioned configuration
- 服務(wù)注冊發(fā)現(xiàn)-Service registration and discovery
- 網(wǎng)關(guān)路由-Routing
- 服務(wù)調(diào)用-Service-to-service calls
- 負載均衡-Load balancing
- 服務(wù)熔斷-Circuit Breakers
- 全局鎖-Global locks
- Leader選舉和集群狀態(tài)-Leadership election and cluster state
- 分布式消息-Distributed messaging
項目
從Spring Cloud 官網(wǎng)可以看到包含的子項目眾多(30個)米死,讓人望而生怯,直接勸退贮庞。但真正需要掌握的其實不多(6個)峦筒,只要能滿足上面所說特性即可,剩下的按需加入窗慎。下面從Spring Cloud的發(fā)展歷程來聊聊物喷,看下這些項目都是干啥的以及是什么時候加入的。
Spring Cloud 發(fā)展歷程
起源
說起Spring Cloud遮斥,不得不提起大名鼎鼎的Netflix峦失。2014年,當時Netflix公司推出了一系列開源的微服務(wù)工具包(俗稱Netflix OSS)术吗,其中包括 Eureka(服務(wù)注冊和發(fā)現(xiàn))尉辑、Hystrix(熔斷器)、Zuul(網(wǎng)關(guān))较屿、Ribbon(負載均衡)隧魄、Feign(服務(wù)間調(diào)用)等工具。
Spring Cloud 創(chuàng)始人Spencer Gibb 和 Josh Long 在學習 Netflix OSS 工具包時隘蝎,意識到可以與 Spring 框架無縫集成购啄,從而降低開發(fā)人員在構(gòu)建微服務(wù)時的技術(shù)難度和成本。于是嘱么,他們開始開發(fā) Spring Cloud狮含,并將 Netflix OSS 的技術(shù)和 Spring 框架相結(jié)合,提供了一套全面的微服務(wù)解決方案曼振。
主版本列表
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 預(yù)覽版。內(nèi)部測試版务荆,主要給開發(fā)人員和測試人員使用妆距。 |
RC | Release Candidate 發(fā)行候選版本『埃基本不再加入新的功能娱据,主要是修復(fù)bug,是最終發(fā)行正式版的前一個版本盅惜,將bug修復(fù)完就可以發(fā)行正式版本了中剩。 |
GA | General Availability 正式發(fā)布版本忌穿。官方開始推薦廣泛使用,國外有的也用GA表示Release版本结啼。 |
SR | Service Release 修正版或更新版掠剑。在正式版本推出后又發(fā)現(xiàn)bug,對Bug的修復(fù)郊愧。 |
發(fā)布內(nèi)容
說明:
以下列的新增項目并不是嚴格的只在某個版本及其以后版本中出現(xiàn)朴译,也可能出現(xiàn)在之前版本的更新版中。只是說首次出現(xiàn)時在那個版本發(fā)布属铁,因為同一時間之前的版本也在更新維護眠寿,會發(fā)布SRx版會將新的特性合并進來。
例如:Spring Cloud Function首次在2018年6月18日發(fā)布的Finchley.RELEASE中出現(xiàn)焦蘑,但是在他之前的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
- 用于連接服務(wù)和服務(wù)實例以及分布式消息傳遞的事件總線蝶防。支持RabbitMQ
- Spring Cloud Security
- 在 Zuul 代理中提供對負載平衡的 OAuth2靜態(tài)客戶端和身份驗證頭中繼的支持甚侣。
- Spring Cloud AWS
- 提供與Amazon Web Services集成
- Spring Cloud Connectors
- 便于各種平臺上的PaaS應(yīng)用程序容易連接到后端服務(wù)
- Spring Cloud Starters
- Spring Boot 風格的啟動項目明吩,簡化Spring Cloud的依賴管理间学,已經(jīng)中止了,后續(xù)和其他項目合并了
- Spring Cloud CLI
- SpringBootCLI 插件印荔,用于在 Groovy 中快速創(chuàng)建 SpringCloud 組件應(yīng)用程序低葫。
- Spring Cloud Commons
- 在不同的Spring Cloud實現(xiàn)中使用了一組抽象和公共類。包含對服務(wù)發(fā)現(xiàn)仍律,斷路器嘿悬,負載均衡的抽象。
Brixton(布里克斯頓)2016年5月發(fā)布
新增項目:
- 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 提供了對異步消息發(fā)送和接收的抽象實現(xiàn),提供統(tǒng)一API方式草则,允許開發(fā)人員底層使用不同的MQ钢拧,例如Redis,Rabbit,Kafka
- Spring Cloud Task
- 短生命周期的微服務(wù)。簡單的聲明炕横,用于向 Spring Boot 應(yīng)用程序添加功能性和非功能性特性源内。
- Spring Cloud Cluster
- 集群的領(lǐng)導選舉、鎖和公共的狀態(tài)模式份殿。為Zookeeper膜钓、Redis嗽交、Hazelcast、Consul提供抽象和實現(xiàn)颂斜。(已被廢棄夫壁,并被Spring Integration取代)
部分項目更新:
- Spring Cloud Bus
- 從新基于Spring Cloud Stream實現(xiàn)
Camden(卡梅登)2016年9月發(fā)布
新增項目:
- Spring Cloud Contract
- 該項目是一個總括性項目,持有解決方案焚鲜,幫助用戶成功實現(xiàn)消費者驅(qū)動的契約方法掌唾。目前,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實現(xiàn)該API
- @LoadBalanced AsyncRestTemplate 支持
- Configuration driven DiscoveryClient
Edgware(艾奇韋爾)2017年12月發(fā)布
新增項目:
- Spring Cloud Gateway
- 這個項目提供了一個在 SpringWebFlux 之上構(gòu)建 API 網(wǎng)關(guān)的庫葱她。Spring Cloud Gateway 旨在提供一種簡單而有效的方法來路由到 API撩扒,并向它們提供橫切關(guān)注點,例如: 安全性吨些、監(jiān)視/度量和彈性搓谆。
Finchley(芬奇利)2018年6月發(fā)布
新增項目:
- Spring Cloud OpenFeign
- Feign雖然是Netflix公司開源的,但已經(jīng)移交給OpenFeign組織管理豪墅,不從屬于Netflix OSS范疇泉手。
- 原先所有的Spring Cloud Netflix Feign全部移到Spring Cloud OpenFeign。
- Spring Cloud Function
- 是基于 Spring Boot 的函數(shù)計算框架偶器,它抽象出所有傳輸細節(jié)和基礎(chǔ)架構(gòu)斩萌,允許開發(fā)人員保留所有熟悉的工具和流程,并專注于業(yè)務(wù)邏輯屏轰。
Greenwich(格林威治)2019年4月發(fā)布
新增項目:
- Spring Cloud Gcp
- Spring Cloud Gcp 項目使得 Spring 框架成為了 Google 云平臺(gCP)的一等公民颊郎。
- Spring Cloud GCP 提供了大量的庫,使得從 Spring Framework 應(yīng)用程序使用 Google Cloud Platform 變得更加容易霎苗。
- Spring Cloud Kubernetes
- Spring Cloud Kubernetes 提供了Spring Cloud 接口的實現(xiàn)姆吭,允許開發(fā)人員在 Kubernetes 上構(gòu)建和運行 Spring Cloud 應(yīng)用程序。
- 雖然這個項目在構(gòu)建云本地應(yīng)用程序時可能對您有用唁盏,但是在 Kubernetes 上部署 Spring Boot 應(yīng)用程序不是必需的内狸。你只需要一個基本的 Spring Boot 應(yīng)用程序和 Kubernetes 本身就可以完成很多事情。
Hoxton(霍克斯頓)2019年11月發(fā)布
增強了kubernetes和服務(wù)網(wǎng)格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
- 代碼重構(gòu)
- Kubernetes 客戶端實現(xiàn)
- 配置更改監(jiān)聽器
- 更名spring-cloud-starter-kubernetes-xx命名為spring-cloud-starter-kubernetes-fabric8-xx
新增項目:
- Spring Cloud Circuit Breaker
- Spring Cloud 斷路器渤涌,取代hystrix佩谣。提供了跨不同斷路器實現(xiàn)的抽象。提供了一致的 API实蓬,允許開發(fā)人員選擇最適合應(yīng)用程序的斷路器實現(xiàn)茸俭。
- 目前支持的斷路器: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 現(xiàn)在使用 org.springframework.http. HttpStatusCode腾窝。
- 刪除@EnableCircuitBreaker,因為它只被 Hystrix 在不再支持的 Spring Cloud Netflix 中使用
- 刪除@SpringCloudApplication 注釋居砖。不再需要@EnableDiscover yClient 和@EnableCircuitBreaker虹脯。
- Spring Cloud Sleuth
- 該項目已經(jīng)從發(fā)布系列中移除。這個項目的核心已經(jīng)移動到Micrometer Tracing項目和instrumentations將被移動到 Micrometer 和所有各自的項目(不再是所有的instrumentations將在一個單一的存儲庫完成)
- Spring Cloud Kubernetes
- 在3.0.0-M1之前的版本中奏候,Kubernetes 感知是使用 spring.clod.Kubernetes.able 屬性實現(xiàn)的循集。此屬性已被刪除且不受支持。相反蔗草,我們使用 SpringBootAPI: ConditionalOnCloudPlatform咒彤。如果需要顯式啟用或禁用這種感知,請使用 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)刪除了對 ApacheHttpClient4的支持。ApacheHttpClient5是推薦的替代品彬犯。
- Spring Cloud OpenFeign 的屬性前綴已經(jīng)從 feign 更改為 Spring.clod.OpenFeign向楼。
- Spring Cloud Netflix
- 刪除了不必要的@EnableEurekaClient 注釋
- 已刪除不推薦的 RestTemplateDiscover yClientOptionalArgs # RestTemplateDiscover yClientOptionalArgs ()構(gòu)造函數(shù)
- 切換到默認的@FeignClient 屬性解析。如果您希望回到惰性屬性解析(例如谐区,對于與 Spring Cloud Contracts 集成的測試) 湖蜕,請將 spring.cloud.openfeign.lazy-attributes-resolution 設(shè)置為 true。
消失的Spring Cloud Netflix
消失的原因
Spring Cloud 的興起和Netflix OSS密不可分宋列,從Spring Cloud 在2015年3月發(fā)布的第一個版本Angel (安吉爾)中可以看出昭抒,最核心的項目就是Spring Cloud Netflix,其中包含的Archarus、Eureka灭返、Hystrix盗迟、Ribbon、Zuul熙含、Feign等都是微服務(wù)系統(tǒng)架構(gòu)經(jīng)典的解決方案罚缕,而這些方案則是在2014年由Netflix公司開源的,俗稱Netflix OSS怎静。但是在2020年12月發(fā)布的2020.0.0版本中則移除了大部分Netflix OSS組件邮弹,只剩下了Eureka,這期間到底發(fā)生了什么蚓聘?要想解釋清楚腌乡,還是得從Netflix公司說起。
2014年Netflix公司開源了自己的微服務(wù)解決套件也就是Netflix OSS夜牡,在當時這也是微服務(wù)系統(tǒng)架構(gòu)最成功的落地方案导饲,被各個大廠廣泛使用,但是在微服務(wù)興起不久氯材,也就是2018年前后Netflix公司宣布其核心組件Hystrix渣锦、Ribbon、Zuul氢哮、Eureka等進入維護狀態(tài)袋毙,不再進行新特性開發(fā),只修復(fù)bug冗尤,這直接影響了Spring Cloud項目的發(fā)展規(guī)范听盖,使Spring官網(wǎng)不得不采取應(yīng)對措施,在 2019 年的在 SpringOne 2019 大會中裂七,Spring Cloud宣布 Spring Cloud Netflix 項目進入維護模式皆看,并在 2020 年移除相關(guān)的Netflix OSS組件。
目前的最新版2022.0.x中Spring Cloud Netflix中只剩下了Eureka背零,但Eureka預(yù)計也會在將來被徹底移除腰吟,畢竟不在維護了。而Feign雖說是Netflix開源的徙瓶,但是在Spring Cloud 2018年6月發(fā)布的Finchley(芬奇利)中可以看出原先所有Spring Cloud Netflix Feign全部移到Spring Cloud OpenFeign中毛雇,也就是不在屬于Netflix OSS了,至此侦镇,大名鼎鼎的Netflix OSS差不多都落下了帷幕灵疮。
替代方案
接下來說一說替代方案,畢竟Netflix好多組件都不在維護了壳繁。從2018年之后發(fā)現(xiàn)的版本中也可以看出Spring Cloud做出的努力:
- 開發(fā)自己的項目替代Netflix中的相關(guān)組件震捣。例如:
- Spring Cloud Gateway 網(wǎng)關(guān)荔棉,替代Zuul
- Spring Cloud Circuit Breaker 斷路器,替代Hystrix
- Spring Cloud LoadBalancer 負載均衡蒿赢,替代Ribbon
- 和更多云廠商集成江耀,分擔分險。例如:
-
Spring Cloud Azure-微軟
- 和微軟的Azure集成诉植,使的在 Spring 應(yīng)用程序中使用 Azure 服務(wù)更加容易祥国。
-
Spring Cloud Alibaba-阿里巴巴
- 和阿里巴巴的一站式分布式解決方案集成,使的在Spring應(yīng)用程序中使用阿里巴巴的中間件變得容易晾腔。
-
Spring Cloud for Amazon Web Services-亞馬遜
- 和亞馬遜的AmazonWeb集成舌稀,使得開發(fā)人員可以圍繞宿主服務(wù)構(gòu)建應(yīng)用程序,而不必關(guān)心基礎(chǔ)設(shè)施或維護灼擂。
-
Spring Cloud GCP-谷歌平臺
- 和谷歌平臺集成壁查,使得在 Spring 應(yīng)用程序中使用 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 上構(gòu)建和運行 Spring Cloud 應(yīng)用程序。
-
Spring Cloud Azure-微軟
- 制定規(guī)范纤控,提供一致API和跨不同實現(xiàn)的抽象挂捻,對開發(fā)人員屏蔽掉底層差異。例如:
- Spring Cloud CricuitBreaker船万。定義了斷路器抽象刻撒。支持:Resilience4J 和 Spring Retry。
- Spring Cloud Stream耿导。定義了異步消息通信抽象声怔。支持Redis、Rabbit舱呻、Kafka醋火、RocketMQ等
- Spring Cloud Commons。定義了服務(wù)注冊和發(fā)現(xiàn)抽象狮荔。支持Nacos胎撇,Zookeeper等
- Spring Environment 定義了配置抽象介粘。支持Nacos殖氏、Apollo、Spring Cloud Config等姻采。
方案總覽
紅色背景:已經(jīng)被Spring Cloud移除雅采。
黃色背景:維護模式,不再開發(fā)
藍色背景:Spring Cloud 抽象的編程模型,提供統(tǒng)一的API婚瓜,實現(xiàn)細節(jié)交由各云廠商宝鼓。
從上面表格也可以看出,Spring Cloud Netflix下線后巴刻,最好的替代品就是Spring Cloud Alibaba了愚铡。
微服務(wù)生態(tài)全景圖
上圖是阿里云網(wǎng)站提供的全景圖,供參考胡陪。
下面介紹下使用Spring Cloud Alibaba 作為微服務(wù)系統(tǒng)的架構(gòu)時沥寥,作為一名開發(fā)人員需要學習和掌握的技能。
- 分布式配置:Nacos柠座,Apollo目前這兩種使用居多邑雅。可選:Spring Cloud Config妈经。
- 服務(wù)注冊/發(fā)現(xiàn):Nacos淮野,Spring Cloud Zookeeper〈蹬荩可選:Spring Cloud Consul
- 服務(wù)調(diào)用:OpenFeign和RestTemplate(HTTP協(xié)議)骤星、Dubbo(TCP協(xié)議)
- 負載均衡: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)用腳手架,方便開發(fā)者快速創(chuàng)建應(yīng)用:https://start.aliyun.com
參考
起底Spring Boot/Cloud背后豪華的研發(fā)團隊 ——獨角獸公司Pivotal
Spring Cloud 移除了Hystrix萝勤、Zuul等Netflix組件