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

qianby發表於2021-09-09

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;設定太小,一些特殊的慢業務失敗率提升,甚至會造成這個業務一直無法成功,在重試機制存在的情況下,反而會加重後端服務壓力。

execution.isolation.semaphore.maxConcurrentRequests

這個值並非TPSQPSRPS等都是相對值,指的是1秒時間視窗內的事務/查詢/請求,semaphore.maxConcurrentRequests是一個絕對值,無時間視窗,相當於亞毫秒級的,指任意時間點允許的併發數。當請求達到或超過該設定值後,其其餘就會被拒絕。預設值是100。

execution.timeout.enabled

是否開啟超時,預設是true,開啟。

execution.isolation.thread.interruptOnTimeout

發生超時是是否中斷執行緒,預設是true。

execution.isolation.thread.interruptOnCancel

取消時是否中斷執行緒,預設是false。



作者:鐵湯
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3549/viewspace-2820545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章