大家好,我是mikechen。
微服務是分布式架構很重要的元件,而且大廠也特别喜歡考察。
談到微服務就不得不談到SpringCloud,本篇就重點詳解SpringCloud的5大核心元件,希望對你掌握好微服務有所幫助@mikechen
Spring Cloud
Spring Cloud 是一套完整的微服務解決方案,基于 Spring Boot 架構,準确的說,它不是一個架構,而是一個大的容器,它将市面上較好的微服務架構內建進來,進而簡化了開發者的代碼量。
它利用 Spring Boot 的開發便利性簡化了分布式系統的開發,比如服務發現、服務網關、服務路由、鍊路追蹤等。Spring Cloud 并不重複造輪子,而是将市面上開發得比較好的子產品內建進去,進行封裝,進而減少了各子產品的開發成本。
一句話總結:Spring Cloud 提供了建構分布式系統所需的“全家桶”。
Spring Cloud核心元件
Spring Cloud Netflix 內建衆多Netflix的開源軟體:Eureka, Hystrix, Zuul, Archaius,組成了微服務的最重要的核心元件,這裡主要介紹5大常用元件。
1.Eureka
Eureka 作為 Spring Cloud 架構的注冊中心,與之對應的是 Dubbo 架構的Zookeeper。
上圖簡要描述了Eureka的基本架構,由3個角色組成:
1)Service Provider: 暴露服務的服務提供方。
2)Service Consumer:調用遠端服務的服務消費方。
3)EureKa Server: 服務注冊中心和服務發現中心。
2.Hystrix
熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,進而對延遲和故障提供更強大的容錯能力。
分布式系統環境下,服務間類似依賴非常常見,一個業務調用通常依賴多個别的服務,如下圖:
如果各個服務正常運作,那大家齊樂融融,但是如果其中一個服務Service C崩壞掉會出現什麼樣的情況呢?如下圖:
ServiceB依賴于ServiceC,由于ServiceC通路量比較大,由于ServiceC挂了,很可能ServiceB也會被拖累挂。
同理上遊的ServiceA還依賴于ServiceB,同樣也會被涉及。
最終一個服務失敗,導緻整條鍊路的服務都失敗的情形,為造成大面積的服務雪崩效應。
這就給之前我們的大A股熔斷是一個道理,是以針對這種情況需要考慮引入Hystrix 熔斷機制,避免大面積雪崩等場景。
Hystrix 斷路器是一種開關裝置,當某個服務單元發生故障之後,通過斷路器的故障監控,向調用方傳回一個符合預期的、可處理的備選響應(FallBack),而不是長時間的等待或者抛出調用方無法處理的異常,這樣就保證了服務調用方不會長時間、不必要占用,進而避免了故障在分布式系統中的蔓延,乃至雪崩。
3.Netflix Zuul
Zuul是Spring Cloud全家桶中的微服務API網關。
所有從裝置或網站來的請求都會經過Zuul到達後端的應用程式。作為一個邊界性質的應用程式,Zuul提供了動态路由、監控、彈性負載和安全功能。
簡單的話,Zuul 就是樓下保安亭的大爺,所有進入大樓的人,都需要大爺檢查,得到大爺的許可。我們可以通過一張圖了解。
4.Ribbon
Zuul預設和Ribbon結合實作了負載均衡的功能,Ribbon就可基于某種負載均衡算法,自動地幫助服務消費者去請求。
5.Spring Cloud Config
實際工作中,我們可能會有幾十上百的微服務節點,每一個節點有需要有配置資訊,比如資料庫的連接配接,服務中心的位址等等,當中資訊變化的時候,我們可能面臨手動一台一台修改的囧境。為了解決上述問題,我們能否借鑒 Git 的思想,有一個标準的配置,當我們配置修改,我們隻需要同步重新整理一下即可,不用手動搬運呢?答案是有的,我們可以通過 Spring Cloud Config 達到同步更新配置資訊。
Spring Cloud架構實作
通過這張圖,可以比較清楚的了解到各元件配置使用運作機制:
1、請求統一通過API網關(Zuul)來通路内部服務.
2、網關接收到請求後,從注冊中心(Eureka)擷取可用服務
3、由Ribbon進行均衡負載後,分發到後端具體執行個體
4、微服務之間通過Feign進行通信處理業務
5、Hystrix負責處理服務逾時熔斷
6、Turbine監控服務間的調用和熔斷相關名額。
更多分布式架構系列、阿裡架構師進階系列,請檢視以下文章:
阿裡架構師進階從0到1全部合集(建議收藏)