Hystrix基礎

什麼是Hystrix?

在一個分佈式系統裏,許多依賴不可避免的會調用失敗,比如超時、異常等,如何能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗雪崩,這個就是Hystrix需要做的事情。

hystrix功能

  • 隔離(線程池隔離和信號量隔離):限制調用分佈式服務的資源使用,某一個調用的服務出現問題不會影響其他服務調用。
  • 優雅的降級機制:超時降級、資源不足時(線程或信號量)降級,降級後可以配合降級接口返回託底數據。
  • 熔斷:當失敗率達到閥值自動觸發降級(如因網絡故障/超時造成的失敗率高),熔斷器觸發的快速失敗會進行快速恢復。
  • 緩存:提供了請求緩存、請求合併實現。
  • 支持實時監控、報警、控制(修改配置)

隔離

在這裏插入圖片描述

線程池隔離 信號量隔離
線程 與調用線程非相同線程 與調用線程相同
開銷 排隊、調度、上下文開銷等 無線程切換,開銷低
異步 支持 不支持(無法削峯)
併發支持 支持(最大線程池大小) 支持(最大信號量上限)

熔斷

正常狀態下,電路處於閉合狀態(Closed),如果調用持續出錯或者超時,電路被打開進入熔斷狀態(Open),後續一段時間內的所有調用都會被拒絕(Fail Fast),一段時間以後,保護器會嘗試進入半熔斷狀態(Half-Open),允許少量請求進來嘗試,如果調用仍然失敗,則回到熔斷狀態,如果調用成功,則回到電路閉合狀態;
在這裏插入圖片描述

降級

降級需要對下層依賴的業務分級,把產生故障的丟了,換一個輕量級的方案,是一種退而求其次的方法。
通常降級有:1.如果服務失敗,則我們通過fallback進行降級,返回靜態值。2.採用服務級聯的模式,如果第一個服務失敗,則調用備用服務,例如失敗重試或者訪問緩存失敗再去取數據庫。

hystrix應用

在這裏插入圖片描述
參數說明

參數類型 參數名 默認值 說明
command配置 executionIsolationStrategy ExecutionIsolationStrategy.THREAD 信號隔離或線程隔離,默認:採用線程隔離,
executionIsolationThreadTimeoutInMillisecond 1s 隔離時間大,即多長時間後進行重試
executionIsolationSemaphoreMaxConcurrentRequests 10 使用信號量隔離時,命令調用最大的併發數,默認:10
fallbackIsolationSemaphoreMaxConcurrentRequests 10 使用信號量隔離時,命令fallback(降級)調用最大的併發數,默認:10
fallbackEnabled true 是否開啓fallback降級策略
executionIsolationThreadInterruptOnTimeout true 使用線程隔離時,是否對命令執行超時的線程調用中斷(Thread.interrupt())操作
metricsRollingStatisticalWindowInMilliseconds 10000ms 統計滾動的時間窗口,默認:10s
metricsRollingStatisticalWindowBuckets 10 統計窗口的Buckets的數量,默認:10個
metricsRollingPercentileEnabled true 是否開啓監控統計功能,默認:true
requestLogEnabled true 是否開啓請求日誌
requestCacheEnabled true 是否開啓請求緩存
熔斷器配置 circuitBreakerRequestVolumeThreshold 20 主要用在小流量
circuitBreakerSleepWindowInMilliseconds 5000ms 熔斷器默認工作時間,默認:5秒.熔斷器中斷請求5秒後會進入半打開狀態,放部分流量過去重試
circuitBreakerEnabled true 是否啓用熔斷器,默認true. 啓動
circuitBreakerErrorThresholdPercentage 50 默認:50%。當出錯率超過50%後熔斷器啓動
circuitBreakerForceOpen false 是否強制開啓熔斷器阻斷所有請求,默認:false,不開啓
circuitBreakerForceClosed false 是否允許熔斷器忽略錯誤,默認false, 不開啓
線程池配置 HystrixThreadPoolProperties.Setter().withCoreSize(int value) 10 配置線程池大小,默認值10個
HystrixThreadPoolProperties.Setter().withMaxQueueSize(int value) -1 配置線程值等待隊列長度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章