這篇文章主要講解了“何為Hystrix”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“何為Hystrix”吧!
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、茄子河ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的茄子河網(wǎng)站制作公司
在分布式架構(gòu)中,很常見的一個情形就是某一個請求需要調(diào)用多個服務(wù)。
如客戶端訪問 user 服務(wù),而 user 服務(wù)需要調(diào)用 order 服務(wù),order 服務(wù)需要調(diào)用 goods 服務(wù),由于網(wǎng)絡(luò)原因或者自身的原因,如果 order 服務(wù)或者 goods 服務(wù)不能及時響應(yīng),user 服務(wù)將處于阻塞狀態(tài),直到 order 服務(wù) goods 服務(wù)響應(yīng)。
此時若有大量的請求涌入,容器的線程資源會被消耗完畢,導(dǎo)致服務(wù)癱瘓。
服務(wù)與服務(wù)之間的依賴性,故障會傳播,造成連鎖反應(yīng),會對整個微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)。
1.如圖所示,此時的系統(tǒng)正在愉快的運行中。
2.突然這個時候,goods服務(wù)節(jié)點的網(wǎng)絡(luò)發(fā)生了故障。goods服務(wù)節(jié)點癱瘓,goods服務(wù)不可用。
3.由于good服務(wù)癱瘓導(dǎo)致order服務(wù)向goods服務(wù)發(fā)送的請求得不到返回,一直處于阻塞,此時user服務(wù)仍然一直 向order服務(wù)發(fā)送請求,最終導(dǎo)致order服務(wù)節(jié)點的資源耗盡,order服務(wù)節(jié)點癱瘓,order服務(wù)不可用。
4.由于good服務(wù)癱瘓導(dǎo)致order服務(wù)向goods服務(wù)發(fā)送的請求得不到返回,一直處于阻塞,此時user服務(wù)仍然一直 向order服務(wù)發(fā)送請求,最終導(dǎo)致order服務(wù)節(jié)點的資源耗盡,也癱瘓掉。此時user服務(wù)向order服務(wù)發(fā)送的請求同樣也得不到返回,而客戶端依然源源不斷的向user服務(wù)節(jié)點發(fā)送請求,最終user服務(wù)節(jié)點和order服務(wù)節(jié)點一樣,由于資源耗盡導(dǎo)致服務(wù)器癱瘓,user服務(wù)也不可用。
如上所述,一個服務(wù)節(jié)點的癱瘓,導(dǎo)致整條鏈路的服務(wù)節(jié)點都癱瘓的情形,我們稱之為服務(wù)雪崩。
流量激增:比如異常流量、用戶重試導(dǎo)致系統(tǒng)負(fù)載升高;
緩存穿透:假設(shè)A為client端,B為Server端,假設(shè)A系統(tǒng)請求都流向B系統(tǒng),請求超出了B系統(tǒng)的承載能力,就會造成B系統(tǒng)崩潰;
程序有Bug:代碼循環(huán)調(diào)用的邏輯問題,資源未釋放引起的內(nèi)存泄漏等問題;
硬件故障:比如宕機,機房斷電,光纖被挖斷等。
數(shù)據(jù)庫嚴(yán)重瓶頸,比如:長事務(wù)、慢sql等。
線程同步等待:系統(tǒng)間經(jīng)常采用同步服務(wù)調(diào)用模式,核心服務(wù)和非核心服務(wù)共用一個線程池和消息隊列。如果一個核心業(yè)務(wù)線程調(diào)用非核心線程,這個非核心線程交由第三方系統(tǒng)完成,當(dāng)?shù)谌较到y(tǒng)本身出現(xiàn)問題,導(dǎo)致核心線程阻塞,一直處于等待狀態(tài),而進程間的調(diào)用是有超時限制的,最終這條線程將斷掉,也可能引發(fā)雪崩。
當(dāng)發(fā)生突發(fā)流量激增的情況下,我們可以使用自動擴容,或者是在負(fù)載均衡器中添加服務(wù)限流功能
對于緩存穿透造成的服務(wù)雪崩問題,可以通過緩存預(yù)加載、緩存異步加載等方式來解決。
對于程序bug,emmm...,只能改bug了。
對于數(shù)據(jù)庫查詢時間過長導(dǎo)致的服務(wù)雪崩可以進行sql優(yōu)化,硬件升級等。
對于硬件故障造成的服務(wù)雪崩, ,跨機房路由,異地多活等方式。
對于不同的造成服務(wù)雪崩的場景,有著很多不同的解決方案,但是沒有一個通用的解決方案可以解決所有的問題。
在通過大量的實踐證明,線程同步等待是最常見引發(fā)的雪崩效應(yīng)的場景,此刻,本章節(jié)的主人公Hystrix將粉墨登場,我們將詳細介紹如何使用Hystrix做故障隔離,熔斷器機制等可以解決依賴服務(wù)不可用的問題。
Hystrix是一個用于處理微服務(wù)架構(gòu)中的服務(wù)之間調(diào)用故障和容錯的開源庫。
在微服務(wù)架構(gòu)里,各個服務(wù)之間的調(diào)用都可能會失敗,比如超時、異常等。
Hystrix能夠保證在一個依賴出問題的情況下,不會導(dǎo)致整個服務(wù)鏈路全線崩潰,提高微服務(wù)架構(gòu)的可用性。
Hystrix,我們又稱“斷路器”,其本身是一種開關(guān)裝置,當(dāng)某個服務(wù)單元發(fā)生故障之后,通過斷路器的故障監(jiān)控(類似熔斷保險絲),向調(diào)用方返回一個符合預(yù)期的、可處理的備選響應(yīng)(FallBack),而不是長時間的等待或者拋出調(diào)用方無法處理的異常,這樣就保證了服務(wù)調(diào)用方的線程不會被長時間、不必要地占用,從而避免了故障在分布式系統(tǒng)中的蔓延,乃至雪崩。
設(shè)計目標(biāo)
(1)對依賴服務(wù)調(diào)用時出現(xiàn)的調(diào)用延遲和調(diào)用失敗進行控制和容錯保護。
(2)阻止某一個依賴服務(wù)的故障在整個系統(tǒng)中蔓延,服務(wù)A->服務(wù)B->服務(wù)C,服務(wù)C故障了,服務(wù)B也故障了,服務(wù)A故障了,整個系統(tǒng)全部故障,整體宕機。(3)提供fail-fast(快速失?。┖涂焖倩謴?fù)的支持。
(4)提供fallback優(yōu)雅降級的支持。
(5)支持近實時的監(jiān)控、報警以及運維操作。
實現(xiàn)方式
通過hystrixCommand或者HystrixObservableCommand來封裝對外部依賴的訪問請求,這個訪問請求一般會運行在獨立的線程中。
對于超出我們設(shè)定的閾(yu)值服務(wù)調(diào)用,直接進行超時返回,不允許它長時間的阻塞。
對每一個依賴服務(wù)進行資源隔離。通過線程池或者是semaphore這兩種方式。
對依賴服務(wù)被調(diào)用的成功次數(shù),失敗次數(shù),拒絕次數(shù),超時次數(shù)進行統(tǒng)計。
如果對某一個依賴服務(wù)的調(diào)用失敗次數(shù)超過了一點的閾值,Hystrix自動進行熔斷,并在一段時間內(nèi)對該服務(wù)的調(diào)用直接進行降級,一段時間后再自動嘗試恢復(fù)
當(dāng)對一個服務(wù)調(diào)用出現(xiàn)失敗、被拒絕、超時、短路等異常情況時,自動調(diào)用fallback降級機制。
對屬性和配置的修改提供近實時的支持
首先我們看一下管網(wǎng)的Hystrix工作流程圖:
下面我們針對這張圖詳細解讀下Hystrix的工作流程。
1.每次調(diào)用都會創(chuàng)建HystrixCommand或者HystrixObservableCommand對象
2.執(zhí)行execute(observe)或queue(toObservable)做同步\異步調(diào)用
3.檢查請求結(jié)果是否被緩存,如果緩存直接返回
4.檢查是否開啟了斷路器,如果開啟直接跳到步驟8
5.檢查線程池/信號量是否跑滿,如果跑滿進入步驟8
6.執(zhí)行 HystrixObservableCommand.construct() or HystrixCommand.run(),如果執(zhí)行異?;蛘哒{(diào)用超時直接跳到步驟8
7.計算斷路器狀態(tài),所有的運行狀態(tài)(成功, 失敗, 拒絕,超時)上報給斷路器,用于統(tǒng)計從而判斷斷路器狀態(tài)
8.調(diào)用fallback降級機制,通過上述步驟會有(熔斷器打開,線程池/信號量跑滿,調(diào)用超時,調(diào)用失?。┧姆N情況會進行降級處理
9.返回依賴請求的真正結(jié)果
工作流程詳解
第一步,創(chuàng)建HystrixCommand或者HystrixObservableCommand對象
HytrixCommand和HystrixObservableCommand包裝了對外部依賴訪問的邏輯。
整個流程的第一個步驟就是實例化HystrixCommand或者HystrixObservableCommand對象。
在構(gòu)造這兩個Command對象時,可以通過構(gòu)造方法傳遞任何執(zhí)行過程中需要的參數(shù)。
如果對外部依賴調(diào)用只返回一個結(jié)果值,那么可以實例化一個HystrixCommand對象。
HystrixCommand command = newHystrixCommand(arg1, arg2);
如果在調(diào)用外部依賴時需要返回多個結(jié)果值時,可以實例化一個HystrixObservableCommand對象
HystrixObservableCommand command = newHystrixObservableCommand(arg1, arg2);
第二步,執(zhí)行execute(observe)或queue(toObservable)做同步\異步調(diào)用
HystrixCommand主要是使用以下兩個命令
execute():同步執(zhí)行,從依賴的服務(wù)返回一個單一的結(jié)果對象,或者是在發(fā)生錯誤的時候拋出異常。
queue():異步執(zhí)行,直接返回一個Future對象,其中包含了服務(wù)執(zhí)行結(jié)束時要返回的單一結(jié)果對象。
HystrixObservableCommand使用以下兩個命令
observe():返回Observable對象,返回 Observable 對象,立即發(fā)出請求,在依賴服務(wù)響應(yīng)(或者拋出異常/超時)時,通過注冊的 Subscriber 得到返回結(jié)果,它是一個Hot Observable。
toObservable():返回Observable對象,但只有在訂閱該對象時,才會發(fā)出請求,然后在依賴服務(wù)響應(yīng)(或者拋出異常/超時)時,通過注冊的 Subscriber 得到返回結(jié)果,它是一個Cold Observable。
第三步,檢查請求結(jié)果是否被緩存,如果緩存直接返回
若當(dāng)前命令的請求緩存功能是被啟用的,并且該命令緩存命中,那么緩存的結(jié)果會立即以O(shè)bservable對象的形式返回。
這個結(jié)果緩存的好處為:
1、在同一個請求上下文中,可以減少使用相同參數(shù)請求原始服務(wù)的開銷。
2、請求緩存在步驟5執(zhí)行之前生效,所以可以有效減少不必要的線程開銷。
第四步,檢查是否開啟了斷路器
在緩存沒有被命中時,Hystrix會在執(zhí)行步驟5之前先檢查斷路器是否被打開。如果打開了,Hystrix不會執(zhí)行任何命令執(zhí)行跳轉(zhuǎn)到步驟8
斷路器開關(guān)控制條件: 1.對外部依賴調(diào)用的次數(shù)滿足配置的閾值 2.對外部依賴調(diào)用發(fā)生錯誤的比率滿足配置的閾值
在滿足以上兩個條件時,斷路器打開熔斷開關(guān),之后所有對外部依賴調(diào)用都將被直接斷開。
在開關(guān)打開時長超過試探窗口期后,斷路器將嘗試放行部分外部依賴的調(diào)用,
根據(jù)試探的結(jié)果決定重新開啟或者關(guān)閉熔斷開關(guān)。
第五步,檢查線程池/信號量是否跑滿
我們知道,Hystrix引入了線程池和信號量兩種方式實現(xiàn)資源隔離機制。如果此時命令對應(yīng)的線程池或隊列或信號量已經(jīng)滿了,直接跳轉(zhuǎn)到步驟8。
第六步,執(zhí)行 HystrixObservableCommand.construct() or HystrixCommand.run()
Hystrix會根據(jù)我們編寫的方法來決定采取什么方式去請求依賴服務(wù)。
1.HystrixCommand.run()——返回單個響應(yīng)或拋出異常。
2.HystrixObservableCommand.construct()——返回 Observable 對象來發(fā)射多個結(jié)果,或通過onError發(fā)送錯誤通知。
如果run()或construct()方法執(zhí)行時長超過了命令的超時閥值,其線程將拋出一個TimeoutException(或者在一個單獨的線程拋出,如果命令沒有運行在它自己的線程)。
這種情況下 Hystrix轉(zhuǎn)接到fallback處理邏輯(第8步)。
并且如果該命令沒有取消或中斷,它將放棄run()或construct()方法最終的返回值。
如果命令沒有拋出異常并且返回了響應(yīng),Hystrix 將會在執(zhí)行一些日志記錄和度量報告之后返回結(jié)果給調(diào)用者。
如果是通過run()運行,Hystrix 將返回 Observable 發(fā)射單個結(jié)果,然后發(fā)送一個onCompleted的通知;如果是通過construct()運行,Hystrix 直接返回該方法產(chǎn)生的Observable對象。
第七步,計算斷路器狀態(tài)
Hystrix會將每一個依賴服務(wù)的調(diào)用成功,失敗,拒絕,超時,等事件,都會發(fā)送給circuit breaker斷路器。
HystrixCircuitBreaker通過維護一系列的counter記錄外部依賴請求的執(zhí)行情況。
斷路器根據(jù)維護的這些信息,在符合觸發(fā)條件下開啟斷路功能,在條件合適的時候關(guān)閉斷路開關(guān)。
如果打開了斷路器,那么在一段時間內(nèi)就會直接短路,然后如果在之后第一次檢查發(fā)現(xiàn)調(diào)用成功了,就關(guān)閉斷路器。
第八步,調(diào)用fallback降級機制
通過對上述步驟的詳細解讀,我們發(fā)現(xiàn)有以下幾種情況是會調(diào)用fallback降級機制的。1.斷路器打開
2.線程池或者信號量已經(jīng)滿了
3.command執(zhí)行異常
4.執(zhí)行超時
在服務(wù)降級邏輯中,需要實現(xiàn)一個通用的響應(yīng)結(jié)果,并且該結(jié)果的處理邏輯應(yīng)當(dāng)是從緩存或是根據(jù)一些靜態(tài)邏輯來獲取,而不是依賴網(wǎng)絡(luò)請求獲取。
如果一定要在服務(wù)降級邏輯中包含網(wǎng)絡(luò)請求,那么該請求也必須包裝在HystrixCommand或HystrixObservableCommand中,從而形成級聯(lián)的降級策略。
而最終的降級邏輯一定不是一個依賴網(wǎng)絡(luò)請求的處理,而是一個能夠穩(wěn)定的返回結(jié)果的處理邏輯。
1.在 HystrixCommand 中,在 HystrixCommand.getFallback()方法中提供自定義的回調(diào)邏輯,方法返回單個回調(diào)值。
2.在 HystrixObservableCommand 中,在HystrixObservableCommand.resumeWithFallback() 方法中提供自定義的回調(diào)邏輯,方法返回一個Observable對象來發(fā)射一個或多個降級結(jié)果
如果fallback返回了結(jié)果,那么Hystrix就會返回這個結(jié)果。
對于HystrixCommand,會返回一個Observable對象,其中會發(fā)返回對應(yīng)的結(jié)果;
對于HystrixObservableCommand,會返回一個原始的Observable對象。
如果沒有實現(xiàn)fallback,或者是fallback拋出了異常,Hystrix會返回一個Observable,但是不會返回任何數(shù)據(jù)。
不同的command執(zhí)行方式,其fallback為空或者異常時的返回結(jié)果不同
1.對于execute(),直接拋出異常 2.對于queue(),返回一個Future,調(diào)用get()時拋出異常 3.對于observe(),返回一個Observable對象,但是調(diào)用subscribe()方法訂閱它時,拋出調(diào)用者的onError方法 4.對于toObservable(),返回一個Observable對象,但是調(diào)用subscribe()方法訂閱它時,拋出調(diào)用者的onError方法
第九步,返回依賴請求的真正結(jié)果
如果Hystrix命令執(zhí)行成功,它將以O(shè)bservable形式返回響應(yīng)給調(diào)用者。根據(jù)你在步驟2的調(diào)用方式不同,在返回Observablez之前可能會做一些轉(zhuǎn)換。
execute():通過調(diào)用queue()來得到一個Future對象,然后調(diào)用get()方法來獲取Future中包含的值。
queue():將Observable轉(zhuǎn)換成BlockingObservable,在將BlockingObservable轉(zhuǎn)換成一個Future。
observe():訂閱返回的Observable,并且立即開始執(zhí)行命令的邏輯。
toObservable():返回一個沒有改變的Observable,你必須訂閱它,它才能夠開始執(zhí)行命令的邏輯。
上述就是整個Hystrix的工作流程,當(dāng)然沒有很深入的講解,但是還是建議多看幾遍,我面試的時候碰到好幾次讓我簡述Hystrix工作流程,多看幾遍,記在心里,面試不慌。
當(dāng)然了,Hystrix也能和Feign 和 Zuul 的集成使用,這些在這里就不贅述了,后續(xù)介紹Feign和Zuul的文章中會詳細說明。
本文主要介紹HystrixCommand 注解方式的使用。
首先我們搭建一個HystrixClient項目。
添加配置文件application.properties
新建RestConfiguration類,用來全局配置RestTemplate。
新建HystrixController類
然后在啟動類的上添加@EnableHystrix注解。
改造上一篇萬字詳解Ribbon架構(gòu),針對面試高頻題多角度細說Ribbon中提供的OrderService,讓代碼休眠5秒后在返回。
在HystrixController中的三個方法中分別配置了2000ms,10000ms,10000ms如果沒有返回結(jié)果,那么將直接回調(diào)用我們指定的fallback。
OrderService
上述三步,基本的Hystrix使用框架就搭建完成了,然后我們啟動上一篇萬字詳解Ribbon架構(gòu),針對面試高頻題多角度細說Ribbon中提到的Eureka-Server,并按照上篇文章的啟動方式,分別啟動OrderServeice的7777,8888,9999三個端口,此時我們打開 http://localhost:8761/ 頁面,我們發(fā)現(xiàn)已經(jīng)有三個服務(wù)名為order-service,端口號分別7777,8888,9999的服務(wù)注冊了進來。
最后我們啟動HystrixClient啟動類,然后我們先訪問設(shè)置超時時間為10000ms的 localhost:8088/test2 ,因為我們在OrderService中設(shè)置的休眠時間為3000ms所以能在超時時間內(nèi)返回請求,所以不用調(diào)用fallback。
Execution相關(guān)的屬性的配置
hystrix.command.default.execution.isolation.strategy
隔離策略,默認(rèn)是Thread, 可選Thread,Semaphore
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
命令執(zhí)行超時時間,默認(rèn)1000ms。
hystrix.command.default.execution.timeout.enabled
執(zhí)行是否啟用超時,默認(rèn)啟用true。
hystrix.command.default.execution.isolation.thread.interruptOnTimeout
發(fā)生超時是是否中斷,默認(rèn)true。
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests
理論上選擇semaphore size的原則和選擇thread size一致,但選用semaphore時每次執(zhí)行的單元要比較小且執(zhí)行速度快(ms級別),否則的話應(yīng)該用thread。semaphore應(yīng)該占整個容器(tomcat)的線程池的一小部分。
Fallback相關(guān)配置
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests
如果并發(fā)數(shù)達到該設(shè)置值,請求會被拒絕和拋出異常并且fallback不會被調(diào)用。默認(rèn)10。
hystrix.command.default.fallback.enabled
當(dāng)執(zhí)行失敗或者請求被拒絕,是否會嘗試調(diào)用hystrixCommand.getFallback() 。默認(rèn)true。
Metrics相關(guān)屬性配置
hystrix.command.default.metrics.rollingStats.timeInMilliseconds
設(shè)置統(tǒng)計的時間窗口值的,毫秒值,circuit break 的打開會根據(jù)1個rolling window的統(tǒng)計來計算。若rolling window被設(shè)為10000毫秒,則rolling window會被分成n個buckets,每個bucket包含success,failure,timeout,rejection的次數(shù)的統(tǒng)計信息。默認(rèn)10000。
hystrix.command.default.metrics.rollingStats.numBuckets
設(shè)置一個rolling window被劃分的數(shù)量,若numBuckets=10,rolling window=10000,那么一個bucket的時間即1秒。必須符合rolling window % numberBuckets == 0。默認(rèn)10。
hystrix.command.default.metrics.rollingPercentile.enabled
執(zhí)行時是否enable指標(biāo)的計算和跟蹤,默認(rèn)true。
hystrix.command.default.metrics.rollingPercentile.timeInMilliseconds
設(shè)置rolling percentile window的時間,默認(rèn)60000。
hystrix.command.default.metrics.rollingPercentile.numBuckets
設(shè)置rolling percentile window的numberBuckets。邏輯同上。默認(rèn)6。
hystrix.command.default.metrics.rollingPercentile.bucketSize
如果bucket size=100,window=10s,若這10s里有500次執(zhí)行,只有最后100次執(zhí)行會被統(tǒng)計到bucket里去。增加該值會增加內(nèi)存開銷以及排序的開銷。默認(rèn)100。
hystrix.command.default.metrics.healthSnapshot.intervalInMilliseconds
記錄health 快照(用來統(tǒng)計成功和錯誤綠)的間隔,默認(rèn)500ms。
ThreadPool 相關(guān)屬性配置
hystrix.threadpool.default.coreSize
并發(fā)執(zhí)行的最大線程數(shù),默認(rèn)10。
hystrix.threadpool.default.maxQueueSize
BlockingQueue的最大隊列數(shù),當(dāng)設(shè)為-1,會使用SynchronousQueue,值為正時使用LinkedBlcokingQueue。該設(shè)置只會在初始化時有效,之后不能修改threadpool的queue size,除非reinitialising thread executor。默認(rèn)-1。
hystrix.threadpool.default.queueSizeRejectionThreshold
即使maxQueueSize沒有達到,達到queueSizeRejectionThreshold該值后,請求也會被拒絕。因為maxQueueSize不能被動態(tài)修改,這個參數(shù)將允許我們動態(tài)設(shè)置該值。if maxQueueSize == -1,該字段將不起作用。
hystrix.threadpool.default.keepAliveTimeMinutes
如果corePoolSize和maxPoolSize設(shè)成一樣(默認(rèn)實現(xiàn))該設(shè)置無效。
hystrix.threadpool.default.metrics.rollingStats.timeInMilliseconds
線程池統(tǒng)計指標(biāo)的時間,默認(rèn)10000。
hystrix.threadpool.default.metrics.rollingStats.numBuckets
將rolling window劃分為n個buckets,默認(rèn)10。
1.什么是降級?
降級,通常指事務(wù)高峰期,為了保證核心服務(wù)正常運行,需要停掉一些不太重要的業(yè)務(wù),或者某些服務(wù)不可用時,執(zhí)行備用邏輯從故障服務(wù)中快速失敗或快速返回,以保障主體業(yè)務(wù)不受影響。
Hystrix提供的降級主要是為了容錯,保證當(dāng)前服務(wù)不受依賴服務(wù)故障的影響,從而提高服務(wù)的健壯性。
要支持回退或降級處理,可以重寫HystrixCommand的getFallBack方法或HystrixObservableCommand的resumeWithFallback方法。
2.什么情況下才會走降級?
從Hystrix的工作流程圖中我們可以看到以下情況會走降級邏輯。
1.斷路器打開
2.線程池或者信號量已經(jīng)滿了
3.command執(zhí)行異常
4.執(zhí)行超時
3.回退降級有哪些處理方式?
快速失?。喊l(fā)生故障后直接拋出,不做處理。
無聲失?。喊l(fā)生故障后,返回?zé)o意義內(nèi)容,如null,空Map等,故障會被屏蔽。
靜態(tài)失?。哼@種配置下,發(fā)生故障會返回靜態(tài)的默認(rèn)值,如返回值是boolean,則結(jié)果為默認(rèn)true。
Stubbed:這種配置適用于返回值是一個復(fù)合對象的情形,發(fā)生故障時,會手動創(chuàng)建一個復(fù)合對象的實例,實例中往往包含了一些默認(rèn)值或錯誤信息。
依賴緩存:這種情況下,當(dāng)下層服務(wù)故障時,會從緩存中取得之前的舊數(shù)據(jù)供使用。
主次模式:這是回退降級的一種特殊使用方法。
主次模式解釋:
有時候,我們可能會遇到這樣的場景。針對某個業(yè)務(wù),可能會有兩種處理方案,A方案高效,但是沒有經(jīng)過規(guī)?;瘻y試,不敢保證可靠性。B方案保守,雖然效率較低,但是不會出現(xiàn)。這時候,我們就可以嘗試采用主次模式。主流程基于A方案運行,fallback基于B方案運行。在運行過程中,如不出錯,則一直使用A方案,一時出錯,可通過回退降級,迅速切換為B方案,以避免問題的不受控擴散。
什么是Hystrix Dashboard?
Hystrix提供了準(zhǔn)實時的調(diào)用監(jiān)控(Hystrix DashBoard),Hystrix會持續(xù)的記錄通過Hystrix發(fā)起的請求的執(zhí)行信息,以統(tǒng)計報表和圖形的形式展示給客戶,包括每秒執(zhí)行多少,請求多少成功,請求失敗多少等。
Netflix通過Hystrix-metics-event-stream項目實現(xiàn)了對以上指標(biāo)的監(jiān)控,SpringCloud也提供了Hystrix DashBoard的整合,對監(jiān)控內(nèi)容轉(zhuǎn)化成可視化的界面,以便于用戶能夠直接的看到服務(wù)和集群的狀態(tài),在實際使用中,我們往往還要結(jié)合Turbine來使用。
開始搭建Hystrix Dashboard
Hystrix Dashboard的搭建其實很簡單,分為三步:
創(chuàng)建監(jiān)控Hystrix Dashboard項目模塊
配置application.yml
配置啟動類
首先我們創(chuàng)建一個HystrixDashboard項目,配置pom.xml文件如下
配置端口為9001
server.port = 9001
配置啟動類,添加@EnableHystrixDashboard注解
啟動后訪問http://localhost:9001/hystrix
只要我們能看到一只豪豬就說明啟動成功了。
感謝各位的閱讀,以上就是“何為Hystrix”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對何為Hystrix這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
文章標(biāo)題:何為Hystrix
本文來源:http://chinadenli.net/article22/giddcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、自適應(yīng)網(wǎng)站、網(wǎng)站收錄、定制網(wǎng)站、品牌網(wǎng)站設(shè)計、移動網(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)