­

Spring cloud是什麼? 核心總結

  • 2022 年 2 月 23 日
  • 筆記

Spring Cloud 是一套完整的微服務解決方案,基於 Spring Boot 框架,準確的說,它不是一個框架,而是一個大的容器,它將市面上較好的微服務框架集成進來,從而簡化了開發者的程式碼量。

 

Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務發現、服務網關、服務路由、鏈路追蹤等。Spring Cloud 並不重複造輪子,而是將市面上開發得比較好的模組集成進去,進行封裝,從而減少了各模組的開發成本。換句話說:Spring Cloud 提供了構建分散式系統所需的「全家桶」。

Spring Cloud 優缺點

其主要優點有:

  1. 集大成者,Spring Cloud 包含了微服務架構的方方面面。
  2. 約定優於配置,基於註解,沒有配置文件。
  3. 輕量級組件,Spring Cloud 整合的組件大多比較輕量級,且都是各自領域的佼佼者。
  4. 開發簡便,Spring Cloud 對各個組件進行了大量的封裝,從而簡化了開發。
  5. 開發靈活,Spring Cloud 的組件都是解耦的,開發人員可以靈活按需選擇組件。

缺點:

  1. 項目結構複雜,每一個組件或者每一個服務都需要創建一個項目。
  2. 部署門檻高,項目部署需要配合 Docker 等容器技術進行集群部署,而要想深入了解 Docker,學習成本高。

Spring Cloud 和 Dubbo 對比

Dubbo 只是實現了服務治理,而 Spring Cloud 實現了微服務架構的方方面面,服務治理只是其中的一個方面。下面通過一張圖對其進行比較:

 

 

 可以看出,Spring Cloud 比較全面,而 Dubbo 由於只實現了服務治理,需要集成其他模組,需要單獨引入,增加了學習成本和集成成本。

 

五大常用組件

  • 服務發現——Netflix Eureka
  • 客服端負載均衡——Netflix Ribbon
  • 斷路器——Netflix Hystrix
  • 服務網關——Netflix Zuul
  • 分散式配置——Spring Cloud Config

Eureka

 

 

作用:實現服務治理(服務註冊與發現)

簡介:Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模組。

由兩個組件組成:Eureka服務端和Eureka客戶端。

Eureka服務端用作服務註冊中心。支援集群部署。

Eureka客戶端是一個java客戶端,用來處理服務註冊與發現。

在應用啟動時,Eureka客戶端向服務端註冊自己的服務資訊,同時將服務端的服務資訊快取到本地。客戶端會和服務端周期性的進行心跳交互,以更新服務租約和服務資訊。

 

Ribbon

 

 

 

作用:Ribbon,主要提供客戶側的軟體負載均衡演算法。

簡介:Spring Cloud Ribbon是一個基於HTTP和TCP的客戶端負載均衡工具,它基於Netflix Ribbon實現。通過Spring Cloud的封裝,可以讓我們輕鬆地將面向服務的REST模版請求自動轉換成客戶端負載均衡的服務調用。

注意看上圖,關鍵點就是將外界的rest調用,根據負載均衡策略轉換為微服務調用。Ribbon有比較多的負載均衡策略,以後專門講解。

 

Hystrix

 

 

 

作用:斷路器,保護系統,控制故障範圍。

簡介:為了保證其高可用,單個服務通常會集群部署。由於網路原因或者自身的原因,服務並不能保證100%可用,如果單個服務出現問題,調用這個服務就會出現執行緒阻塞,此時若有大量的請求湧入,Servlet容器的執行緒資源會被消耗完畢,導致服務癱瘓。服務與服務之間的依賴性,故障會傳播,會對整個微服務系統造成災難性的嚴重後果,這就是服務故障的「雪崩」效應。

 

Zuul

 

 

 

作用:api網關,路由,負載均衡等多種作用

簡介:類似nginx,反向代理的功能,不過netflix自己增加了一些配合其他組件的特性。

在微服務架構中,後端服務往往不直接開放給調用端,而是通過一個API網關根據請求的url,路由到相應的服務。當添加API網關後,在第三方調用端和服務提供方之間就創建了一面牆,這面牆直接與調用方通訊進行許可權控制,後將請求均衡分發給後台服務端。

 

Config

 

 

 

作用:配置管理

簡介:SpringCloud Config提供伺服器端和客戶端。伺服器存儲後端的默認實現使用git,因此它輕鬆支援標籤版本的配置環境,以及可以訪問用於管理內容的各種工具。

這個還是靜態的,得配合Spring Cloud Bus實現動態的配置更新。