一文讀懂Spring Cloud

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

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 應用程序。
  • 制定規(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)全景圖

微服務生態(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組件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容