Spring Cloud版——電影售票系統<四>使用Hystrix實現微服務的容錯處理

    GitHub地址:https://github.com/leebingbin/SpringCloud.MovieTicketinggit

 

Spring Cloud版——電影售票系統<四>使用Hystrix實現微服務的容錯處理github

        截至在上篇博客《Spring Cloud版——電影售票系統<三>使用Feign實現聲明式REST調用》爲止,已用Eureka實現了微服務的註冊與實現,Ribbon實現了客戶端側的負載均衡,Feign實現了聲明式的API調用。那麼如何使用Hystrix實現微服務的容錯。設計模式

1、雪崩效應

    微服務架構的應用系統一般包含多個服務層。微服務之間經過網絡進行通訊,從而支撐起整個應用系統。所以,微服務之間不免存在依賴關係(永遠記住一句話:任何微服務都並不是百分之百可用,而網絡每每又是脆弱的,所以不免有些請求會失敗)。假如,淘寶天貓網站在「雙十一」發生了過載。過多的併發請求,致使用戶支付的請求延遲好久都沒有響應,在等待很長時間後最終失敗。支付失敗又致使用戶從新刷新頁面並再次嘗試支付,那麼進一步增長了服務器的負載,最終可能就會致使整個系統都崩潰了。服務器

    也就是說,雪崩效應描述的是提供者不可用致使消費者不可用,並將不可用逐漸放大的過程。即常把「基礎服務故障」致使「級聯故障」的現象稱爲雪崩效應。網絡

2、如何容錯

    要想防止雪崩效應,必須有一個強大的容錯機制。該容錯機制須要實現如下兩點:架構

    一、爲網絡請求設置超時,讓資源儘快釋放;併發

    二、使用斷路器(熔斷機制 )模式,斷路器狀態轉化圖以下:負載均衡

    斷路器狀態轉化的邏輯,大體以下:微服務

    1)正常狀況下,斷路器關閉,可正常請求依賴的服務;工具

     2)當一段時間內,請求失敗率達到必定閾值(例如錯誤率達到50%,或100次/分鐘等),斷路器就會打開。此時,不會再去請求依賴的服務;

    3)斷路器打開一段時間後,會自動進入「半開」狀態。此時,斷路器可容許一個請求訪問依賴的服務。若是該請求可以調用成功,則關閉斷路器,不然繼續保持打開狀態。

    綜上,通常能夠經過以上兩點機制保護應用,從而防止雪崩效應並提高應用的可用性。

3、使用Hystrix實現容錯

    Hystrix是一個實現了超時機制和斷路器模式的工具類庫。Hystrix是由Netflix開源的一個延遲和容錯庫,用於隔離訪問遠程系統、服務或者第三方庫,防止級聯失敗,從而提高系統的可用性與容錯性。Hystrix主要經過如下幾點實現延遲和容錯:

    * 包裹請求:使用HystrixCommand(或HystrixObservableCommand) 包裹對依賴的調用邏輯,每一個命令在獨立線程中執行。這使用到了設計模式中的「命令模式」。

    * 跳閘機制:當某服務的錯誤率超過必定閾值時,Hystrix能夠自動或者手動跳閘,中止請求該服務一段時間。

    * 資源隔離:Hystrix爲每一個依賴都維護了一個小型的線程池(或者信號量)。若是該線程池已滿,發往該依賴的請求就被當即拒絕,而不是排隊等候,從而加速失敗斷定。

    * 監控:Hystrix能夠近乎實時地監控運行指標和配置的變化,例如成功、失敗、超時、以及被拒絕的請求等。

    * 回退機制:當請求失敗、超時、被拒絕、或當斷路器打開時,執行回退邏輯。回退邏輯可由開發人員自行提供,例如返回一個缺省值。

    * 自我修復:斷路器打開一段時間後,會自動進入「半開」狀態。斷路器打開、關閉、半開的邏輯轉化。

 

 

 

 

 

本文爲博主原創文章,轉載請註明出處!

https://my.oschina.net/u/3375733/blog/

相關文章
相關標籤/搜索