springcloud(四):熔斷器Hystrix
說起springcloud熔斷讓我想起了去年股市中的熔斷,多次痛的領悟,隨意實施的熔斷對整個系統的影響是災難性的,好了接下來我們還是說正事。願意瞭解原始碼的朋友直接求求交流分享技術:二一四七七七五六三三
雪崩效應
在微服務架構中通常會有多個服務層呼叫,基礎服務的故障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱為服務雪崩效應。服務雪崩效應是一種因“服務提供者”的不可用導致“服務消費者”的不可用,並將不可用逐漸放大的過程。
如果下圖所示:A作為服務提供者,B為A的服務消費者,C和D是B的服務消費者。A不可用引起了B的不可用,並將不可用像滾雪球一樣放大到C和D時,雪崩效應就形成了。
熔斷器(CircuitBreaker)
熔斷器的原理很簡單,如同電力過載保護器。它可以實現快速失敗,如果它在一段時間內偵測到許多類似的錯誤,會強迫其以後的多個呼叫快速失敗,不再訪問遠端伺服器,從而防止應用程式不斷地嘗試執行可能會失敗的操作,使得應用程式繼續執行而不用等待修正錯誤,或者浪費CPU時間去等到長時間的超時產生。熔斷器也可以使應用程式能夠診斷錯誤是否已經修正,如果已經修正,應用程式會再次嘗試呼叫操作。
熔斷器模式就像是那些容易導致錯誤的操作的一種代理。這種代理能夠記錄最近呼叫發生錯誤的次數,然後決定使用允許操作繼續,或者立即返回錯誤。 熔斷器開關相互轉換的邏輯如下圖:
熔斷器就是保護服務高可用的最後一道防線。
Hystrix特性
1.斷路器機制
斷路器很好理解, 當Hystrix Command請求後端服務失敗數量超過一定比例(預設50%), 斷路器會切換到開路狀態(Open). 這時所有請求會直接失敗而不會傳送到後端服務. 斷路器保持在開路狀態一段時間後(預設5秒), 自動切換到半開路狀態(HALF-OPEN). 這時會判斷下一次請求的返回情況, 如果請求成功, 斷路器切回閉路狀態(CLOSED), 否則重新切換到開路狀態(OPEN). Hystrix的斷路器就像我們家庭電路中的保險絲, 一旦後端服務不可用, 斷路器會直接切斷請求鏈, 避免傳送大量無效請求影響系統吞吐量, 並且斷路器有自我檢測並恢復的能力.
2.Fallback
Fallback相當於是降級操作. 對於查詢操作, 我們可以實現一個fallback方法, 當請求後端服務出現異常的時候, 可以使用fallback方法返回的值. fallback方法的返回值一般是設定的預設值或者來自快取.
3.資源隔離
在Hystrix中, 主要透過執行緒池來實現資源隔離. 通常在使用的時候我們會根據呼叫的遠端服務劃分出多個執行緒池. 例如呼叫產品服務的Command放入A執行緒池, 呼叫賬戶服務的Command放入B執行緒池. 這樣做的主要優點是執行環境被隔離開了. 這樣就算呼叫服務的程式碼存在bug或者由於其他原因導致自己所線上程池被耗盡時, 不會對系統的其他服務造成影響. 但是帶來的代價就是維護多個執行緒池會對系統帶來額外的效能開銷. 如果是對效能有嚴格要求而且確信自己呼叫服務的客戶端程式碼不會出問題的話, 可以使用Hystrix的訊號模式(Semaphores)來隔離資源.
技術架構圖如下:
整體程式碼結構如下:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31539957/viewspace-2222067/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- springcloud之Hystrix熔斷器SpringGCCloud
- 跟我學SpringCloud | 第四篇:熔斷器HystrixSpringGCCloud
- 《SpringCloud專題17》-Hystrix熔斷器案例SpringGCCloud
- SpringCloud原始碼學習之Hystrix熔斷器SpringGCCloud原始碼
- SpringCloud學習筆記:熔斷器Hystrix(5)SpringGCCloud筆記
- (24)SpringCloud-Hystrix(熔斷器)介紹及使用SpringGCCloud
- springcloud(五):熔斷監控Hystrix DashboardSpringGCCloud
- springcloud之hystrix熔斷器-Finchley.SR2版SpringGCCloud
- Spring Cloud實戰系列(四) - 熔斷器HystrixSpringCloud
- SpringCloud-Hystrix 服務降級、熔斷SpringGCCloud
- springcloud(五):熔斷監控Hystrix Dashboard和TurbineSpringGCCloud
- 熔斷器 Hystrix 原始碼解析 —— 斷路器 HystrixCircuitBreaker原始碼UI
- 微服務SpringCloud之熔斷監控Hystrix Dashboard和Turbine微服務SpringGCCloud
- SpringCloud(三)Hystrix斷路器SpringGCCloud
- 微服務SpringCloud之熔斷器微服務SpringGCCloud
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(四):熔斷器HystrixJavaSpringGCCloud架構
- Spring cloud(4)-熔斷(Hystrix)SpringCloud
- SpringCloud Netflix (五) : Hystrix 服務熔斷和服務降級SpringGCCloud
- 熔斷器 Hystrix 原始碼解析 —— 執行命令方式原始碼
- 跟我學SpringCloud | 第五篇:熔斷監控Hystrix Dashboard和TurbineSpringGCCloud
- 微服務熔斷限流Hystrix之流聚合微服務
- 微服務熔斷限流Hystrix之Dashboard微服務
- 熔斷器 Hystrix 原始碼解析 —— 除錯環境搭建原始碼除錯
- 史上最簡單的 SpringCloud 教程 | 第四篇: 斷路器(Hystrix)SpringGCCloud
- 熔斷器 Hystrix 原始碼解析 —— 執行結果快取原始碼快取
- 業餘草 SpringCloud教程 | 第四篇:斷路器(Hystrix)(Finchley版本)SpringGCCloud
- SpringCloud之斷路器聚合監控(Hystrix Turbine)SpringGCCloud
- 分散式服務防雪崩熔斷器,Hystrix理論+實戰。分散式
- 使用springcloud gateway搭建閘道器(分流,限流,熔斷)SpringGCCloudGateway
- springcloud(六):熔斷監控TurbineSpringGCCloud
- SpringCloud分散式微服務雲架構 第四篇:斷路器(Hystrix)(Finchley版本)SpringGCCloud分散式微服務架構
- SpringCloud微服務系列(5): 服務容錯斷路器HystrixSpringGCCloud微服務
- 五. SpringCloud服務降級與熔斷SpringGCCloud
- java spring cloud 版b2b2c社交電商-熔斷器HystrixJavaSpringCloud
- 熔斷器 Hystrix 原始碼解析 —— 命令執行(二)之執行隔離策略原始碼
- 熔斷器 Hystrix 原始碼解析 —— 命令執行(一)之正常執行邏輯原始碼
- 熔斷器設計模式設計模式
- 微服務11:熔斷、降級的Hystrix實現(附原始碼)微服務原始碼