Java知識分享網 - 輕松學習從此開始!????

Java知識分享網

Java1234官方群25:java1234官方群25
Java1234官方群25:838462530
     

GIT視頻教程(結合github,碼云)免費領取

BAT一線大廠筆試面試打包下載

java1234.vip企業級站點全新上線(可以領取站點源碼)

SpringBoot打造企業級進銷存

Java1234 VIP課程

領取微信掃碼登錄Java實現視頻教程

Java1234至尊VIP(特價活動)
當前位置: 主頁 > Java文檔 > 大數據云計算 >

SpringCloud服務容錯保護(Hystrix)介紹與使用示例


分享到:
時間:2020-07-17 12:28來源:http://www.luygg.com 作者:小鋒  侵權舉報
SpringCloud服務容錯保護(Hystrix)介紹與使用示例 PDF 下載
失效鏈接處理
SpringCloud服務容錯保護(Hystrix)介紹與使用示例  PDF 下載

本站整理下載:
 
相關截圖:
 
主要內容:

前言
 
前一章節,我們知道了如何利用RestTemplate+Ribbon和Feign的方式進行服務的調用。在微服務架構中,一個服務可能會調用很多的其他微服務應用,雖然做了多集群部署,但可能還會存在諸如網絡原因或者服務提供者自身處理的原因,或多或少都會出現請求失敗或者請求延遲問題,若服務提供者長期未對請求做出回應,服務消費者又不斷的請求下,可能就會造成服務提供者服務崩潰,進而服務消費者也一起跟著不可用,嚴重的時候就發生了系統雪崩了。鑒于此,產生了斷路器等一系列的服務保護機制。本章節,就來說下如何利用Hystrix進行容錯處理。
 
一點知識
 
按照此系列的慣例,我們先來了解下一些相關的知識。
 
 
容錯處理手段
 
容錯處理是指軟件運行時,能對由非正常因素引起的運行錯誤給出適當的處理或信息提示,使軟件運行正常結束。
 
從百度百科的解釋中可以看出,簡單理解,所謂的容錯處理其實就是捕獲異常了,不讓異常影響系統的正常運行,正如java中的try catch一樣。
 
而在微服務調用中,自身異常可自行處理外,對于依賴的服務若發生錯誤,或者調用異常,或者調用時間過長等原因時,避免長時間等待,造成系統資源耗盡。一般上都會通過設置請求的超時時間,如http請求中的ConnectTimeout和ReadTimeout;再或者就是使用熔斷器模式,隔離問題服務,防止級聯錯誤等。
 
雪崩效應
 
在微服務架構中,存在很多的微服務單元,各個微服務之間通過網絡進行通訊,難免出現依賴關系,若某一個單元出現故障,就很容易因依賴關系而引發故障的蔓延,產生“雪崩效應”,最終導致整個系統的癱瘓。
 
如圖所示:A作為服務提供者,B為A的服務消費者,C和D是B的服務消費者。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時,雪崩效應就形成了,也就應了那句話:星星之火,可以燎原!
 
熔斷器
 
熔斷器和現實生活中的空氣開關作用很像。它可以實現快速失敗,如果它在一段時間內偵測到許多類似的錯誤,會強迫其以后的多個調用快速失敗,不再訪問遠程服務器,從而防止應用程序不斷地嘗試執行可能會失敗的操作,使得應用程序繼續執行而不用等待修正錯誤,或者浪費CPU時間去等到長時間的超時產生。熔斷器也可以使應用程序能夠診斷錯誤是否已經修正,如果已經修正,應用程序會再次嘗試調用操作。
 
熔斷器模式就像是那些容易導致錯誤的操作的一種代理。這種代理能夠記錄最近調用發生錯誤的次數,然后決定使用允許操作繼續,或者立即返回錯誤。
 
可以看出,熔斷器一共有三種狀態,之間轉換關系如下:
關閉狀態當熔斷器處于關閉狀態時,請求是可以被放行的;當熔斷器統計的失敗次數觸發開關時,轉為打開狀態。
打開狀態當熔斷器處于打開狀態時,所有請求都是不被放行的,直接返回失敗;只有在經過一個設定的時間窗口周期后,熔斷器才會轉換到半開狀態
半開狀態當熔斷器處于半開狀態時,當前只能有一個請求被放行;這個被放行的請求獲得遠端服務的響應后,假如是成功的,熔斷器轉換為關閉狀態,否則轉換到打開狀態。
個人覺得,主要還是快速失敗,避免請求堆積,壓垮服務器。進而起到保護服務高可用的目的。
 
Hystrix實踐
 
何為Hystrix
 
Hystrix是一個實現了超時機制和斷路器模式的工具類庫。
 
Hystrix是Netflix開源的一個延遲和容錯庫,用于隔離訪問遠程系統、服務或第三方庫,防止級聯失敗,從而提升系統的可用性和容錯性。
 
Hystrix容錯機制:
包裹請求:使用HystrixCommand包裹對依賴的調用邏輯,每個命令在獨立線程中執行,這是用到了設計模式“命令模式”。
跳閘機制:當某服務的錯誤率超過一定閾值時,Hystrix可以自動或手動跳閘,停止請求該服務一段時間。
資源隔離:Hystrix為每個依賴都維護了一個小型的線程池,如果該線程池已滿,發往該依賴的請求就被立即拒絕,而不是排隊等候,從而加速判定失敗。
監控:Hystrix可以近乎實時的監控運行指標和配置的變化。如成功、失敗、超時、被拒絕的請求等。
回退機制:當請求失敗、超時、被拒絕,或當斷路器打開時,執行回退邏輯。回退邏輯可自定義。
自我修復:斷路器打開一段時間后,會自動進入半開狀態,斷路器打開、關閉、半開的邏輯轉換。
下圖就是Hystrix的回退策略,防止級聯故障。

 

------分隔線----------------------------
鋒哥公眾號


鋒哥微信號


關注公眾號
【Java資料站】
回復 666
獲取 
66套java
從菜雞到大神
項目實戰課程
日本色在线