溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

什么是Hystrix

發(fā)布時間:2021-09-10 14:13:38 來源:億速云 閱讀:174 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細講解有關(guān)什么是Hystrix,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

Hystrix協(xié)調(diào)分布式系統(tǒng)中各個服務(wù)高可用的框架,SpringCloud體系重要的一員。Hystrix主要解決了服務(wù)雪崩問題、服務(wù)監(jiān)控問題等。

Hystrix功能介紹

資源隔離與限流

作用

  • 主要在于預(yù)防依賴服務(wù)崩潰影響到自己服務(wù)資源被耗光,使用隔離的方式限制調(diào)用依賴服務(wù)所能使用的最大線程資源。如果一個服務(wù)崩潰,不控制好資源隔離的話,會引發(fā)服務(wù)雪崩,眾多上游服務(wù)集體崩潰。

  • 另外在并發(fā)量很大的情況下,也可以降低對依賴服務(wù)請求的流量,避免依賴服務(wù)過度負載。

原理

  • Hystrix將對外部服務(wù)的調(diào)用和一系列處理封裝為一個Commond對象,具體分為HystrixCommand(直接調(diào)用命令),HystrixObservableCommand(觀察者訂閱命令),后者可以注冊回調(diào)事件。兩者都可以以異步或同步的方式調(diào)用(異步返回Future,后續(xù)可以調(diào)用get阻塞獲取結(jié)果)。

  • Commond對象對資源隔離進行隔離有兩種方式,一種是使用線程池(常用),第二種是使用信號量。兩者都是對Commond被調(diào)用的線程并發(fā)數(shù)量進行限制,區(qū)別在于信號量只是對command被調(diào)用并發(fā)許可的一個線程,不能記錄超時信息等等。

配置項

  • 選擇Commond資源隔離的策略,線程池(常用)或信號量

  • 指定command名稱、組。名稱默認為類名(一個command通常對應(yīng)一個依賴服務(wù)的接口調(diào)用),group下的所有command默認情況下共用一個線程池或用一個信號量隔離(group一般對應(yīng)一個依賴服務(wù))。

  • 指定command線程池,HystrixThreadPool的key默認為組名稱,也可以手動指定使用的HystrixThreadPool。

  • 指定線程池核心線程數(shù)大小,默認為10。

  • 指定線程池隊列長度,默認-1 無界隊列,設(shè)置值之后超過則拒絕請求。

  • 指定線程池拒絕閥值,默認5,超過就拒絕請求。

  • 信號量隔離下可設(shè)置最大并發(fā)訪問量,默認10。

requestCache-請求緩存

原理

在一個web調(diào)用主線程中,為該主線程調(diào)用服務(wù)的command建立緩存,使得調(diào)用依賴服務(wù)相同參數(shù)的情況下直接從內(nèi)存中獲取結(jié)果,由于本人認為其作用不是很大,所以就不多介紹了,主要是在攔截器中初始化HytrixRequestContext(這個緩存數(shù)據(jù)目測應(yīng)該是在線程本地變量里面),然后Command中實現(xiàn)getCacheKey方法返回cache的key,當key一樣時,直接嘗試獲取之前調(diào)用后返回相同key的結(jié)果。

fallback-服務(wù)降級

原理

通過Command實現(xiàn)getFallBack方法(HystrixCommand)或resumeWithFallback方法(HystrixObservableCommand),實現(xiàn)降級邏輯,本地返回降級之后的結(jié)果。

降級的條件

  • 線程池或信號量拒絕

  • 調(diào)用超時

  • 執(zhí)行報錯

  • 斷路器被開啟

降級的通常邏輯

  • 取本地緩存中較老的數(shù)據(jù)

  • 返回默認值

注:降級邏輯可以設(shè)置參數(shù)限制并發(fā)線程數(shù)量(基于信號量)

circuit breaker-斷路器

原理

打開條件
  • 調(diào)用超時達到一定比例

  • 執(zhí)行報錯達到一定比例

  • 線程池或信號量拒絕達到一定比例

半開狀態(tài)

一定時間之后會切換到半開狀態(tài),讓1個請求通過,看是否能夠正常返回

開啟狀態(tài)

如果半開狀態(tài)允許通過的請求成功了,就關(guān)閉斷路器

相關(guān)可配置項

  • 是否打開斷路器(默認打開)

  • 斷路器時間滾動窗中最小的請求數(shù)(默認20)

  • 多少異常(包括超時、報錯、拒絕)比例(默認50%)打開斷路器

  • 多長時間進入半開狀態(tài)(默認5000毫秒)

  • 是否強制打開斷路器

  • 是否強制關(guān)閉斷路器

  • 超時時長配置(默認1000毫秒)

  • 是否打開超時機制(默認打開)

關(guān)于什么是Hystrix就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI