天天看點

5大SpringCloud核心元件詳解(圖文版)

作者:mikechen的網際網路架構
5大SpringCloud核心元件詳解(圖文版)

大家好,我是mikechen。

微服務是分布式架構很重要的元件,而且大廠也特别喜歡考察。

談到微服務就不得不談到SpringCloud,本篇就重點詳解SpringCloud的5大核心元件,希望對你掌握好微服務有所幫助@mikechen

Spring Cloud

Spring Cloud 是一套完整的微服務解決方案,基于 Spring Boot 架構,準确的說,它不是一個架構,而是一個大的容器,它将市面上較好的微服務架構內建進來,進而簡化了開發者的代碼量。

它利用 Spring Boot 的開發便利性簡化了分布式系統的開發,比如服務發現、服務網關、服務路由、鍊路追蹤等。Spring Cloud 并不重複造輪子,而是将市面上開發得比較好的子產品內建進去,進行封裝,進而減少了各子產品的開發成本。

一句話總結:Spring Cloud 提供了建構分布式系統所需的“全家桶”。

Spring Cloud核心元件

5大SpringCloud核心元件詳解(圖文版)

Spring Cloud Netflix 內建衆多Netflix的開源軟體:Eureka, Hystrix, Zuul, Archaius,組成了微服務的最重要的核心元件,這裡主要介紹5大常用元件。

1.Eureka

Eureka 作為 Spring Cloud 架構的注冊中心,與之對應的是 Dubbo 架構的Zookeeper。

5大SpringCloud核心元件詳解(圖文版)

上圖簡要描述了Eureka的基本架構,由3個角色組成:

1)Service Provider: 暴露服務的服務提供方。

2)Service Consumer:調用遠端服務的服務消費方。

3)EureKa Server: 服務注冊中心和服務發現中心。

2.Hystrix

熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,進而對延遲和故障提供更強大的容錯能力。

分布式系統環境下,服務間類似依賴非常常見,一個業務調用通常依賴多個别的服務,如下圖:

5大SpringCloud核心元件詳解(圖文版)

如果各個服務正常運作,那大家齊樂融融,但是如果其中一個服務Service C崩壞掉會出現什麼樣的情況呢?如下圖:

5大SpringCloud核心元件詳解(圖文版)

ServiceB依賴于ServiceC,由于ServiceC通路量比較大,由于ServiceC挂了,很可能ServiceB也會被拖累挂。

同理上遊的ServiceA還依賴于ServiceB,同樣也會被涉及。

最終一個服務失敗,導緻整條鍊路的服務都失敗的情形,為造成大面積的服務雪崩效應。

這就給之前我們的大A股熔斷是一個道理,是以針對這種情況需要考慮引入Hystrix 熔斷機制,避免大面積雪崩等場景。

Hystrix 斷路器是一種開關裝置,當某個服務單元發生故障之後,通過斷路器的故障監控,向調用方傳回一個符合預期的、可處理的備選響應(FallBack),而不是長時間的等待或者抛出調用方無法處理的異常,這樣就保證了服務調用方不會長時間、不必要占用,進而避免了故障在分布式系統中的蔓延,乃至雪崩。

3.Netflix Zuul

Zuul是Spring Cloud全家桶中的微服務API網關。

所有從裝置或網站來的請求都會經過Zuul到達後端的應用程式。作為一個邊界性質的應用程式,Zuul提供了動态路由、監控、彈性負載和安全功能。

簡單的話,Zuul 就是樓下保安亭的大爺,所有進入大樓的人,都需要大爺檢查,得到大爺的許可。我們可以通過一張圖了解。

5大SpringCloud核心元件詳解(圖文版)

4.Ribbon

Zuul預設和Ribbon結合實作了負載均衡的功能,Ribbon就可基于某種負載均衡算法,自動地幫助服務消費者去請求。

5大SpringCloud核心元件詳解(圖文版)

5.Spring Cloud Config

5大SpringCloud核心元件詳解(圖文版)

實際工作中,我們可能會有幾十上百的微服務節點,每一個節點有需要有配置資訊,比如資料庫的連接配接,服務中心的位址等等,當中資訊變化的時候,我們可能面臨手動一台一台修改的囧境。為了解決上述問題,我們能否借鑒 Git 的思想,有一個标準的配置,當我們配置修改,我們隻需要同步重新整理一下即可,不用手動搬運呢?答案是有的,我們可以通過 Spring Cloud Config 達到同步更新配置資訊。

Spring Cloud架構實作

通過這張圖,可以比較清楚的了解到各元件配置使用運作機制:

5大SpringCloud核心元件詳解(圖文版)

1、請求統一通過API網關(Zuul)來通路内部服務.

2、網關接收到請求後,從注冊中心(Eureka)擷取可用服務

3、由Ribbon進行均衡負載後,分發到後端具體執行個體

4、微服務之間通過Feign進行通信處理業務

5、Hystrix負責處理服務逾時熔斷

6、Turbine監控服務間的調用和熔斷相關名額。

更多分布式架構系列、阿裡架構師進階系列,請檢視以下文章:

阿裡架構師進階從0到1全部合集(建議收藏)

5大SpringCloud核心元件詳解(圖文版)