Hystrix semaphore和thread隔離策略的區(qū)別及配置參考
通用設(shè)置說明
Hystrix所有的配置都是hystrix.command.[HystrixCommandKey]
開頭,其中[HystrixCommandKey]
是可變的情龄,默認(rèn)是default
,即hystrix.command.default
骤视;另外Hystrix內(nèi)置了默認(rèn)參數(shù),如果沒有配置Hystrix屬性专酗,默認(rèn)參數(shù)就會(huì)被設(shè)置,其優(yōu)先級(jí):
- hystrix.command.[HystrixCommandKey].
XXX
- hystrix.command.default.
XXX
- Hystrix代碼內(nèi)置屬性參數(shù)值
Hystrix隔離策略相關(guān)的參數(shù)
策略參數(shù)設(shè)置
execution.isolation.strategy= THREAD|SEMAPHORE
execution.isolation.thread.timeoutInMilliseconds
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
用來設(shè)置thread和semaphore兩種隔離策略的超時(shí)時(shí)間沉填,默認(rèn)值是1000佑笋。
- 建議設(shè)置這個(gè)參數(shù),在Hystrix 1.4.0之前猎荠,semaphore-isolated隔離策略是不能超時(shí)的颠锉,從1.4.0開始semaphore-isolated也支持超時(shí)時(shí)間了。
- 建議通過CommandKey設(shè)置不同微服務(wù)的超時(shí)時(shí)間,對(duì)于zuul而言琼掠,CommandKey就是service id:
hystrix.command.[CommandKey].execution.isolation.thread.timeoutInMilliseconds
這個(gè)超時(shí)時(shí)間要根據(jù)CommandKey
所對(duì)應(yīng)的業(yè)務(wù)和服務(wù)器所能承受的負(fù)載來設(shè)置,要根據(jù)CommandKey
業(yè)務(wù)的平均響應(yīng)時(shí)間設(shè)置悼瓮,一般是大于平均響應(yīng)時(shí)間的20%~100%
,最好是根據(jù)壓力測(cè)試結(jié)果來評(píng)估艰猬,這個(gè)值設(shè)置太大,會(huì)導(dǎo)致線程不夠用而會(huì)導(dǎo)致太多的任務(wù)被fallback命贴;設(shè)置太小,一些特殊的慢業(yè)務(wù)失敗率提升胸蛛,甚至?xí)斐蛇@個(gè)業(yè)務(wù)一直無法成功,在重試機(jī)制存在的情況下泞当,反而會(huì)加重后端服務(wù)壓力民珍。
execution.isolation.semaphore.maxConcurrentRequests
這個(gè)值并非TPS
、QPS
嚷量、RPS
等都是相對(duì)值,指的是1秒時(shí)間窗口內(nèi)的事務(wù)/查詢/請(qǐng)求章喉,semaphore.maxConcurrentRequests
是一個(gè)絕對(duì)值身坐,無時(shí)間窗口,相當(dāng)于亞毫秒級(jí)的部蛇,指任意時(shí)間點(diǎn)允許的并發(fā)數(shù)。當(dāng)請(qǐng)求達(dá)到或超過該設(shè)置值后巷查,其其余就會(huì)被拒絕抹腿。默認(rèn)值是100。
execution.timeout.enabled
是否開啟超時(shí)警绩,默認(rèn)是true,開啟后室。
execution.isolation.thread.interruptOnTimeout
發(fā)生超時(shí)是是否中斷線程混狠,默認(rèn)是true。
execution.isolation.thread.interruptOnCancel
取消時(shí)是否中斷線程贡避,默認(rèn)是false。