一.什么是Hystrix?
Hystrix,英文直譯為豪豬。
在這里,指由Netflix(網(wǎng)飛)公司研發(fā)的斷路器和降級的技術(shù)方案。
從2011年開始研發(fā),至2018年底正式宣布進入維護模式,已經(jīng)成熟完整且地提供了熔斷、隔離、降級、請求合并、緩存、監(jiān)控等功能。
二.Hystrix有哪些功能?
常用:
1.熔斷(Circuit Break)
源自于股市的一種概念,達到一定條件,限制請求,限制一段時間后,開始恢復(fù),恢復(fù)是逐步進行的;
2.隔離(IsoLation)
包裝指定指令;上下文無關(guān);可替換;線程或信號量
3.降級(FallBack)
當請求失敗時能響應(yīng);快速;不會/不應(yīng)報錯;保證服務(wù)在一定程度上可用
不常用:
1.請求合并(Collapsing)
降低系統(tǒng)開銷;總體平均性能提升;單次請求性能可能下降;須結(jié)合實際情況選擇使用
2.緩存
相同參數(shù)直接返回;降低調(diào)用響應(yīng)時間;降低開銷;需要精細控制
3.監(jiān)控(Monitor)
監(jiān)控請求狀態(tài);定位問題所在;限制一段時間后,開始恢復(fù),恢復(fù)是逐步進行的
三.為什么選擇Hystrix
功能足夠,性能足夠,文檔足夠,支持足夠
除了Hystrix外的選擇
四.如何使用Hystrix?
開啟Feign的Hystrix的支持(openFeign默認支持)
添加POM的依賴
開啟Hystrix
五、Hystrix的一些概念
1.Commands
Command是Hystrix中的被隔離的一個最小指令。Hystrix的所有隔離、熔斷、降級、緩存、合并、監(jiān)控都是基于某個最小指令。每個Command都有其唯一的名字,可以用這個名字調(diào)整每個指令的對應(yīng)屬性。
絕大多數(shù)的配置,是針對于一個指令(Command)的,具體可以參閱Hystrix的官方文檔說明。如果知道了一個指令(Command)的名字,那么可以針對于這個指令,調(diào)整它的配置。
如果Feign啟用了Hystrix支持,那么產(chǎn)生的Command名字默認由feign.Feign#configKey(java.lang.Class, java.lang.reflect.Method)產(chǎn)生。
如果直接使用@HystrixCommand注解,那么Command的名字是被直接定義出來的。
2.ThreadPool
ThreadPool是Hystrix中的默認指令隔離方式。除此之外,還有信號量機制。
Hystrix中的線程池與Java的線程池概念類似??梢栽O(shè)定其最小值,大值,隊列,回收速度。
當線程池達到大值后,再繼續(xù)添加請求,會觸發(fā)fallback,此fallback會被記錄為請求錯誤。
線程池并非只有一個,對于Feign,每一組相同name的client屬于同一個組,默認情況下,同一個組共享同一個線程池,也可以修改指定的指令(Commond)使用指定的線程池。
3.Circuit Breaker
Circuit Breaker(斷路器)是Hystrix中的核心功能。斷路器有開啟、關(guān)閉、半開狀態(tài)。
斷路器(Circuit Breaker)的開啟條件:在關(guān)閉狀態(tài)下,首先要達到最小請求數(shù),其次,這些請求中,請求錯誤的比例達到設(shè)定值,那么才會開啟。
斷路器開啟后,所有請求都會直接降級(fallback)。
斷路器開啟后,經(jīng)過一段時間的“休眠”,進入半開狀態(tài),會有一個指令進行實際請求,如果這個請求成功,那么斷路器會關(guān)閉。否則,斷路器繼續(xù)打開。
如果需要,斷路器可以禁用,也可以強行打開或關(guān)閉。
六.Hystrix如何工作?
例子:
設(shè)定總請求時間窗口為10秒,分為10個bucket,即,每個計數(shù)時間段為1秒。
設(shè)定請求計數(shù)門檻為20,斷路器開啟百分比為60%,斷路器“休眠”時間5秒。
線程池容量40。
七.Hystrix有哪些坑?
1.如何精確設(shè)定Hystrix的參數(shù)?
通過設(shè)定對應(yīng)指令(Command)的參數(shù),可以覆蓋默認的default參數(shù)。具體的參數(shù)配置可以參考官網(wǎng)。
2.指令使用哪個線程池,由什么決定?
每個Hystrix指令,都有一個對應(yīng)的group,group在監(jiān)控中是一個最小單元,默認情況下,此指令的線程池與group對應(yīng),每個group有唯一對應(yīng)的線程池。也可以通過配置threadPoolKeyOverride,進行單獨設(shè)定。
3.那么,指令使用哪個group呢?
對于Feign,group的名字默認是FeignClient注解的name值,可以通過調(diào)整feign.hystrix.SetterFactory來調(diào)整。
對于HystrixCommand注解,group的名字可以直接指定。
4.線程池方式下,hystrix如何計算是否開啟斷路器?
在單位時間內(nèi),如果請求達到一定數(shù)量,且失敗比例高于設(shè)定值,則開啟斷路器。
單位時間由
參數(shù): metrics.rollingStats.timeInMilliseconds
參數(shù): metrics.rollingStats.numBuckets
共同指定,兩者能整除時,單位時間為兩者的商。
最低計算數(shù)由circuitBreaker.requestVolumeThreshold決定
最低失敗比例由circuitBreaker.errorThresholdPercentage決定
5.hystrix線程池如何調(diào)優(yōu)?
按官方文檔,線程池中coreSize的建議值為
請求的qps*99線執(zhí)行時間+預(yù)留空間
例如,某請求預(yù)估每秒請求300次,執(zhí)行時間為200ms,
則coreSize應(yīng)為300*0.2+10=70, 默認的coreSize為10
對于Feign,每個name對應(yīng)相同的group,相同group默認使用同一個線程池,如果有多個調(diào)用量較小的微服務(wù)被調(diào)用端,可以考慮讓他們共享同一個線程池。同理,反則反之,如果FeignClient的某個方法(對應(yīng)一個指令Command)調(diào)用量較大,也可以給這個指令設(shè)置獨享的線程池。
于Feign,每次請求,只要對應(yīng)的http請求沒有結(jié)束,線程是一直被占用的,請盡量保證快速釋放線程資源。
此外,通過調(diào)整maxQueueSize,在一定程度上,可以達到“削峰填谷”作用。但需注意的是,等待執(zhí)行也會被timeout處理。
6.FeignClient創(chuàng)建的Hystrix請求是如何包裝的?
大部分情況下:
1.Sleuth層(如果有)
2.Hystrix層(如果有)
3.Ribbon層(如果有)
4.client層(必有,n選1)
因為Hystrix是包裝在Ribbon層和client之上,所以超時和線程池會有一些微妙的關(guān)系
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:SpringCloud-Hystrix-創(chuàng)新互聯(lián)
URL地址:http://sd-ha.com/article16/djpedg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站營銷、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、小程序開發(fā)、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)