Hystrix semaphore和thread隔離策略的區別及配置參考

Hystrix semaphore和thread隔離策略的區別及配置參考

通用設置說明

Hystrix全部的配置都是hystrix.command.[HystrixCommandKey]開頭,其中[HystrixCommandKey]是可變的,默認是default,即hystrix.command.default;另外Hystrix內置了默認參數,若是沒有配置Hystrix屬性,默認參數就會被設置,其優先級:後端

  • hystrix.command.[HystrixCommandKey].XXX
  • hystrix.command.default.XXX
  • Hystrix代碼內置屬性參數值

Hystrix隔離策略相關的參數

策略參數設置

execution.isolation.strategy= THREAD|SEMAPHORE服務器

execution.isolation.thread.timeoutInMilliseconds

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds用來設置thread和semaphore兩種隔離策略的超時時間,默認值是1000。併發

  • 建議設置這個參數,在Hystrix 1.4.0以前,semaphore-isolated隔離策略是不能超時的,從1.4.0開始semaphore-isolated也支持超時時間了。
  • 建議經過CommandKey設置不一樣微服務的超時時間,對於zuul而言,CommandKey就是service id:hystrix.command.[CommandKey].execution.isolation.thread.timeoutInMilliseconds

這個超時時間要根據CommandKey所對應的業務和服務器所能承受的負載來設置,要根據CommandKey業務的平均響應時間設置,通常是大於平均響應時間的20%~100%,最好是根據壓力測試結果來評估,這個值設置太大,會致使線程不夠用而會致使太多的任務被fallback;設置過小,一些特殊的慢業務失敗率提高,甚至會形成這個業務一直沒法成功,在重試機制存在的狀況下,反而會加劇後端服務壓力。微服務

根據微服務實際狀況來定:測試

  • 過小:會致使不少正常業務失敗
  • 太大:會致使實際的熔斷效果不好,嚴重會致使雪崩。

通常實際大小爲:spa

  • 要保證該服務的可用性爲幾個9?99.5 99.9 99.99
  • 要保證的N個9的最大響應時間。

execution.isolation.semaphore.maxConcurrentRequests

這個值並不是TPSQPSRPS等都是相對值,指的是1秒時間窗口內的事務/查詢/請求,semaphore.maxConcurrentRequests是一個絕對值,無時間窗口,至關於亞毫秒級的,指任意時間點容許的併發數。當請求達到或超過該設置值後,其其他就會被拒絕。默認值是100。線程

execution.timeout.enabled

是否開啓超時,默認是true,開啓。code

execution.isolation.thread.interruptOnTimeout

發生超時是是否中斷線程,默認是true。事務

execution.isolation.thread.interruptOnCancel

取消時是否中斷線程,默認是false。io

相關文章
相關標籤/搜索