Spring-Cloud-Netflix-Hystrix


雪崩問題

一個服務,依賴於另一個功能服務的,如果這個功能服務掛掉了,那么依賴的服務就不能再用了,這種級聯的失敗, 我們可以稱之為雪崩

Hystrix概述

Hystrix github地址

  1. Hystrix是一個用於處理分布式系統的延遲和容錯的開源庫,在分布式系統里,許多依賴不可避免的會調用失敗,比如超時、異常等
  2. Hystrix能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗,避免級聯故障,以提高分布式系統的彈性。

降級

什么是降級?

  1. 降級是當我們的某個微服務響應時間過長,或者不可用了也就是那個微服務調用不了了,
  2. 我們不能吧錯誤信息返回出來,或者讓他一直卡在那里,所以要在准備一個對應的策略(一個方法)
  3. 當發生這種問題的時候我們直接調用這個方法來快速返回這個請求,不讓他一直卡在那
  4. 當某個微服務調用不了了要做降級,也就是說,要在調用方做降級(不然那個微服務都down掉了再做降級也沒什么意義了)

降級步驟

  1. 在服務調用方法添加依賴
    在這里插入圖片描述
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
  1. 啟動類加入注解@EnableHystrix
    在這里插入圖片描述
@EnableHystrix
  1. 在控制器調用方法上添加注解@HystrixCommand
    在這里插入圖片描述
  2. 在goods服務當中模擬一個異常
    在這里插入圖片描述
    啟動運行
    在這里插入圖片描述

超時監聽

  1. 模擬響應過慢
    在這里插入圖片描述
    當響應過慢(默認值是1000),訪問時,也會進入到指定的降級方法當中

  2. 在客戶端配置文件當中配置超時時間

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 9000 # 設置hystrix的超時時間為9000ms

ribbon:
  ReadTimeout: 10000
  ConnectTimeout: 10000 

使用Fengin調用
Feign默認也有對Hystix的集成,1默認情況下是關閉的。我們需要通過下面的參數來開啟:

feign:
  hystrix:
    enabled: true # 開啟Feign的熔斷功能

運行
在這里插入圖片描述
把goods的睡眠時間改成1000 運行:
在這里插入圖片描述
運行:
在這里插入圖片描述

熔斷

概述:

  1. 也叫斷路器,CirleBreak
  2. 熔斷,就好像我們生活中的跳閘一樣, 比如說你的電路出故障了,為了防止出現大型事故 這里直接切斷了你的電源以免意外繼續發生
  3. 當一個微服務調用多次出現問題時(默認是10秒內20次當然 這個也能配置),hystrix就會采取熔斷機制
  4. 不再繼續調用你的方法, 而是直接調用降級方法,這樣就一定程度上避免了服務雪崩的問題
  5. 會在默認5秒鍾內和電器短路一樣,5秒鍾后會試探性的先關閉熔斷機制,但是如果這時候再失敗一次{之前是20次} 那么又會重新進行熔斷

線程隔離降級處理, 如果請求延遲過高,如果超時,返回一個異常信息:

  1. 假設超時2秒, 但是用戶也要等3秒才會返回異常信息
  2. 正常情況下, 一個請求只需要30ms就夠了, 因為超時, 導致要多等2秒多,並發能力急劇下降,如果每次來都超時, 就認為這個服務可能存在問題,就可以認為 電路中負載最高的電壓
  3. 此時, 就把此服務斷開,再去訪問時, 就不需要等待3秒,直接返回異常信息,把失敗的時長急劇縮短 保證其它服務的高可用,這個服務就被臨時斷掉 4 斷開很容易, 解決如何斷開后, 再去給它連接回來, Hystrix就可以去解決這種問題

熔斷配置

配置:
在這里插入圖片描述

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 9000 #設置超時時長
      circuitBreaker:
        requestVolumeThreshold: 5   #  10秒種訪問5次都失敗的話, 會斷開服務,不調用方法,直接進入fallback
        sleepWindowInMilliseconds : 5000   #默認是5秒 5秒后嘗試再訪問一次服務器

goods模擬異常
在這里插入圖片描述

  1. 調用5次后,就不再調用goods方法 持續調用后,中間還會調用一次goods方法 ,之后, 就不會再調用
  2. 默認5秒鍾后會試探性的先關閉熔斷機制,但是如果這時候再失敗一次{之前是20次} 那么又會重新進行熔斷

限流

概念:

  1. 限流, 顧名思義, 就是限制你某個微服務的使用量(可用線程)
  2. hystrix通過線程池的方式來管理你的微服務調用,他默認是一個線程池(10大小) 管理你的所有微服務
  3. 一個線程可以理解為一個請求,當10請求同時訪問, 都沒有得要響應的時候,就會自動調用fallback方法

默認什么都不設置
當訪問請求次數超過10的時候 , 會調用fallback方法

feign整合hystrix

feign 默認是支持hystrix的, 但是在Spring - cloud Dalston 版本之后就默認關閉了, 因為不一定業務需求要用的到

  1. 開啟feign 對hystrix的支持
feign:
  hystrix:
    enabled: true #開啟feign當中的hystrix

方式1-fallback

  1. 創建一個類實現服務FeignClient接口
    在這里插入圖片描述
  2. 在控制器當中調用
    在這里插入圖片描述
    第一次運行
    在這里插入圖片描述
    連續刷新11次后
    在這里插入圖片描述

方式2-fallbackFactory

  1. 創建一個類實現FallbackFactory
    在這里插入圖片描述
  2. 在服務FeignClient接口上配置實現類
    在這里插入圖片描述
  3. 在控制器當中調用
    在這里插入圖片描述
    效果和第一種方式一樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM