微服務(wù)存在大量級(jí)聯(lián)調(diào)用的情況,hystrix 主要解決單一服務(wù)導(dǎo)致整體服務(wù)不可用或延遲的情況票腰。
目標(biāo)
- 通過(guò)客戶端對(duì)延遲和故障進(jìn)行保護(hù)和控制
- 在一個(gè)復(fù)雜的分布式系統(tǒng)中停止級(jí)聯(lián)故障
- 快速失敗和迅速恢復(fù)
- 在合理的情況下回退和優(yōu)雅降級(jí)
- 開(kāi)啟近實(shí)時(shí)監(jiān)控城看、告警和操作控制
請(qǐng)求緩存
Hystrix有一層請(qǐng)求緩存,在同一個(gè)上下文請(qǐng)求中緩存請(qǐng)求結(jié)果杏慰。
通過(guò)@CacheResultg增加测柠,CacheRemove清除 @CacheKey指定key
請(qǐng)求合并
Request Collapser主要用于請(qǐng)求合并的場(chǎng)景。后續(xù)分解
Hystrixji基本流程
1.構(gòu)造一個(gè) HystrixCommand或HystrixObservableCommand對(duì)象缘滥,用于封裝請(qǐng)求轰胁,并在構(gòu)造方法配置請(qǐng)求被執(zhí)行需要的參數(shù);
2.執(zhí)行命令朝扼,Hystrix提供了4種執(zhí)行命令的方法赃阀,后面詳述;
3.判斷是否使用緩存響應(yīng)請(qǐng)求擎颖,若啟用了緩存榛斯,且緩存可用,直接使用緩存響應(yīng)請(qǐng)求搂捧。Hystrix支持請(qǐng)求緩存驮俗,但需要用戶自定義啟動(dòng);
4.判斷熔斷器是否打開(kāi)异旧,如果打開(kāi)意述,跳到第8步提佣;
5.判斷線程池/隊(duì)列/信號(hào)量是否已滿吮蛹,已滿則跳到第8步;
6.執(zhí)行HystrixObservableCommand.construct()或HystrixCommand.run()拌屏,如果執(zhí)行失敗或者超時(shí)潮针,跳到第8步;否則倚喂,跳到第9步每篷;
7.統(tǒng)計(jì)熔斷器監(jiān)控指標(biāo)瓣戚;
8.走Fallback備用邏輯
9.返回請(qǐng)求響應(yīng)