SpringCloud微服務架構剖析 五 服務保護

2021-10-03 15:30:19 字數 2667 閱讀 2940

2.服務限流(sentinel)

微服務中的服務保護主要分為熔斷、降級和限流三種方式。其中熔斷和降級功能由hystrix提供。

在微服務架構中,存在著許多的服務單元,若其中乙個單元出現故障,就很容易以為依賴關係而引發故障的蔓延,最終導致整個系統癱瘓,這樣的架構相較傳統的架構更加不穩定,為了解決這樣的問題,斷路器等一系列的服務保護機制就產生了。

spring cloud hystrix實現了斷路器、執行緒隔離等一系列服務保護功能。它是基於netflix的開源框架hystrix實現的,該框架的目標在於通過控制那些訪問遠端系統、服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力,hystrix具備服務降級、服務熔斷、執行緒和訊號量隔離、請求快取、請求合併以及服務監控等強大功能。

1.3.1 建立hystrixcommand或 hystrixobservablecommand
hystrixcommand:用在依賴的服務返回單個操作結果的時候

hystrixobservablecommand:用在依賴的服務返回多個操作結果的時候

1.3.2 執行命令
hystrix在執行時會根據建立的command物件以及具體的情況來選擇乙個命令模式執行方式來執行。

①其中 hystrixcommand實現了下面兩個執行方式:

execute():同步執行,從依賴的服務返回乙個單一的結果物件,或是在發生錯誤時丟擲異常。

queue() :非同步執行,直接返回乙個future物件,其中包含了服務執行結果時要返回的單一結果物件。

r value=command.execute();

future< r > fvalue=command.queue();

② 而hystrixobservablecommand實現了另外兩種執行方式

observe():返回observable物件,他代表了操作的對個結果,他是乙個hot observable

toobservable():同樣會返回observable物件,也代表了操作的多個結果,但它返回的是乙個cold observable。

observable< r > ohvalue=command.observe();

observable< r >ocvalue=command.toobservable()

1.3.3 結果是否被快取
若當前命令的請求快取是被啟用的,並且該命令快取命中,那麼快取的結果會立即以observable物件的形式返回

1.3.4 斷路器是否開啟
在命令結果沒有快取命中的時候,hystrix在執行前要檢查斷路器是否為開啟狀態。

①如果斷路器是開啟的,那麼hystrix不會執行命令,而是跳轉到fallback處理邏輯(對應1.3.8)

②如果斷路器是關閉的,那麼hystrix跳到1.3.5,檢查是否有可用資源來執行命令。

1.3.5 執行緒池/請求佇列/訊號量是否佔滿
若執行緒池/請求佇列/訊號量已經佔滿(這裡的執行緒池是每個依賴服務專有的執行緒池),那麼hystrix不會執行命令,而是跳轉到fallback處理邏輯(對應1.3.8)

1.3.6 hystrixobservablecommand.construct()或者hystrixcommand.run()
hystrix會根據我們編寫的方法來決定採用什麼樣的方式去請求依賴服務。

hystrixcommand.run():返回乙個單一的結果,或丟擲異常

hystrixobservablecommand.construct():返回乙個observable物件來發射多個結果,或通過onerror傳送錯誤通知

若run()或.construct()方法執行時超過了命令設定的超時閾值,則會丟擲timoutexception,這種情況下hystrix會轉接到fallbask處理邏輯(1.3.8)。

1.2.7 計算斷路器的健康度
hystrix會將「成功」、「失敗」、「超時」、「拒絕」等資訊報告給斷路器,而斷路器會維護一組資料來統計這些資料。

斷路器會使用這些統計資料來決定是否要將斷路器開啟,來對某個依賴服務的請求進行「熔斷/短路」,直到恢復期結束。若恢復期結束後,根據統計資料判斷結果還是未達到健康指標,就再次「熔斷/短路」。

1.2.8 fallback處理(服務降級)
當命令執行失敗時,hystrix就會進入fallback嘗試回退處理,這個操作被稱為「服務降級」。引起伺服器降級的原因如下:

①在1.2.4中,當前命令處於「熔斷/短路「狀態,斷路器開啟的時候。

②在1.2.5中當前命令的執行緒池/請求佇列或訊號量被佔滿的時候。

③在1.2.6中執行hystrixobservablecommand.construct()或者hystrixcommand.run()丟擲異常的時候

1.2.9返回成功的響應
對於hystrix命令的響應總是observable的形式來返回,但是它可以被轉換成你需要的使用方式來進行命令呼叫。

SpringCloud 微服務與微服務對接心德

對方已經提供好乙個api文件,然後傳一堆傳輸,返回給我一些資訊。如下 我這邊建立實體類,返回值這些東西,如下 介面如下 feignclient還有以下標籤 name 指定feignclient的名稱,如果專案使用了ribbon,name屬性會作為微服務的名稱,用於服務發現 url url一般用於除錯...

微服務架構 spring cloud

微服務架構搭建步驟 1.建立服務註冊中心 1 填加依賴 org.springframework.cloudgroupid spring cloud starter eureka serverartifactid dependency org.springframework.cloudgroupid ...

SpringCloud微服務框架

因為springcloud出現,對微服務技術提供了非常大的幫助,因為springcloud 提供了一套完整的微服務解決方案,不像其他框架只是解決了微服務中某個問題.springcloud是基於springboot基礎之上開發的微服務框架,springcloud是一套目前非常完整的微服務解決方案框架,...