天天看點

SpringCloud Hystrix 容錯保護

提高系統容錯的常見方法

逾時機制

限流

服務降級

斷路器

hystrix簡介

hystrix的2種使用方式

使用feign自帶的hystrix

直接使用hystrix

雪崩效應:也叫作級聯故障,下遊服務故障,拖跨上遊服務,沿着服務調用鍊路逐級向上傳播,造成上遊服務大規模故障。

容錯: 在分布式系統中,某些服務出現問題時,不會影響、拖垮其它服務(上遊服務),其它服務依然可用、可對外提供服務。

設定逾時時間,如果在指定時間内未完成自動釋放占用的資源。

限制請求數量,當大量請求湧入時使部分請求快速失敗,防止大量請求湧入沖垮服務。

可以設定不同層面的限流

nginx

網關:常見限流架構比如guava

服務消費者:限制的是對提供者發起的調用請求

可用性指的是服務能完成請求的處理,快速失敗也是一種處理方式,此時也認為服務是可用的。

服務調用請求快速失敗之後,執行預案(回退方法)代替服務調用。

監控服務調用的失敗率,失敗率達到門檻值時斷路器打開、熔斷鍊路,防止下遊服務的故障影響到上遊服務,後續的服務調用請求直接快速失敗。

斷路器打開5min後,會開啟5min的視窗期,視窗期内斷路器半開、放行部分服務調用請求,以檢測下遊服務是否已修複,如果已修複則關路器關閉、鍊路恢複;如果未修複則打開斷路器,等下一個視窗期再進行檢測,循環往複,直到鍊路恢複。5min是預設值,數值可調。

常常多種方式搭配使用。

hystrix是一個容錯架構,提供了服務限流、服務降級、斷路器、服務監控等功能。

hystrix将對不同的調用請求隔離開,某個調用請求失敗時也不會影響到其它的調用請求。

hystrix的隔離政策有2種

THREAD:線程池,預設的隔離政策。将每個服務調用請求都包裝為一個線程,放到線程池中。線程池中的服務調用請求都是正在執行的,線程池滿了就放到隊列中排隊等待,如果隊列也滿了就讓後續的服務調用請求直接快速失敗。

SEMAPHORE:信号量,信号量即可同時執行的調用請求個數,預設值10。發起一個調用請求時,将信号量-1;完成一個調用請求時将信号量+1;信号量為0時使後續的調用請求直接快速失敗。

信号量适用于高并發的調用,因為高并發時線程池中線程數極多,資源開銷大。信号量一般隻用于非網絡調用。

feign內建了hystrix,可以使用feign内置的hystrix,也可以直接使用hystrix。

在消費者中搭配feign使用,隻能對服務調用進行容錯保護。

1、yml

2、在feign包下編寫服務調用的回退類

3、在feign接口中指定回退類

不局限于服務調用,不局限于在消費者中使用,可以作用于所有的方法調用,可以給所有方法調用指定回退方法、添加容錯保護。

1、建立時勾選Spring Cloud Circuit Breaker -> Hystrix [Maintenance],或者手動添加依賴

2、引導類上加 @EnableCircuitBreaker或@EnableHystrix

3、指定回退方法

4、yml

使用feign内置的hystrix時不能在yml配置hystrix的相關參數,直接使用hystrix則可以

繼續閱讀