Java看完秒懂版熔斷和降級(jí)的關(guān)系
剛開(kāi)始我以為熔斷和降級(jí)是一體的,以為他們必須配合使用; 只不過(guò)名字不一樣而已,但是當(dāng)我經(jīng)過(guò)思考過(guò)后,發(fā)現(xiàn)他們其實(shí)不是一個(gè)東西;
降級(jí)
什么是服務(wù)降級(jí)呢?降級(jí)主要有以下幾種情況
- 超時(shí):當(dāng)下游的服務(wù)因?yàn)槟撤N原因響應(yīng)過(guò)慢,下游服務(wù)主動(dòng)停掉一些不太重要的業(yè)務(wù),釋放出服務(wù)器資源,增加響應(yīng)速度!
- 不可用:當(dāng)下游的服務(wù)因?yàn)槟撤N原因不可用,上游主動(dòng)調(diào)用本地的一些降級(jí)邏輯,避免卡頓,迅速返回給用戶(hù)!
- 限流:防止上游服務(wù)請(qǐng)求太多導(dǎo)致服務(wù)崩潰,所以限制請(qǐng)求的數(shù)量,來(lái)達(dá)到保護(hù)下游服務(wù)的目的,當(dāng)請(qǐng)求的流量到達(dá)一定閾值時(shí),直接拒絕多余的請(qǐng)求,執(zhí)行降級(jí)邏輯
看到這,相信你已經(jīng)看到了一個(gè)相同點(diǎn),就是以上三者(超時(shí)、不可用、限流)觸發(fā)時(shí),都會(huì)走同一個(gè)邏輯,那就是降級(jí)邏輯,在hystrix里面叫做fallback;
熔斷
什么是服務(wù)熔斷
熔斷很好理解,就是一個(gè)斷開(kāi)的過(guò)程;
熔斷就像是家里的保險(xiǎn)絲一樣,當(dāng)電流達(dá)到一定條件時(shí),比如保險(xiǎn)絲能承受的電流是5A,如果你的電流達(dá)到了6A,因?yàn)楸kU(xiǎn)絲承受不了這么高的電流,保險(xiǎn)絲就會(huì)融化,這時(shí)候電路就會(huì)斷開(kāi),起到了保護(hù)電器的作用;
在微服務(wù)里面也是一樣,當(dāng)下游的服務(wù)因?yàn)槟撤N原因突然變得不可用或響應(yīng)過(guò)慢,上游服務(wù)為了保證自己整體服務(wù)的可用性,不再繼續(xù)調(diào)用目標(biāo)服務(wù),直接返回,快速釋放資源。如果目標(biāo)服務(wù)情況好轉(zhuǎn)則恢復(fù)調(diào)用;
熔斷和降級(jí)的關(guān)系
說(shuō)了那么多,其實(shí)也能想到了,降級(jí)和熔斷其實(shí)就是服務(wù)安全中的2個(gè)不同的流程,在服務(wù)發(fā)生故障時(shí),肯定是先斷開(kāi)(熔斷)與服務(wù)的連接,然后在執(zhí)行降級(jí)邏輯;
那既然不管怎樣都會(huì)執(zhí)行降級(jí)邏輯,這時(shí)候就可以理解為 降級(jí)是一種設(shè)計(jì)思想,在java層面就是一個(gè)接口,而熔斷是降級(jí)的不同實(shí)現(xiàn)方式,他們的關(guān)系如下圖:
降級(jí)方式
那么我們現(xiàn)在知道降級(jí)是一個(gè)接口了,接下來(lái)在看看他們的實(shí)現(xiàn)方式是怎樣的吧
1、熔斷降級(jí)(不可用)
熔斷邏輯是這樣的,A服務(wù)調(diào)用B服務(wù),失敗次數(shù)達(dá)到一定閾值后 ,A服務(wù)的斷路器打開(kāi),就不在請(qǐng)求B服務(wù),而是直接執(zhí)行本地的fallback方法;這種叫做熔斷降級(jí),看到這里,也許你已經(jīng)明白了,熔斷只是降級(jí)的其中一種實(shí)現(xiàn)方式;
2、超時(shí)降級(jí)
同樣是A服務(wù)調(diào)用B服務(wù),B服務(wù)響應(yīng)超過(guò)了A服務(wù)設(shè)定的閾值后,就會(huì)執(zhí)行降級(jí)邏輯;
3、限流降級(jí)
同樣是A服務(wù)調(diào)用B服務(wù),服務(wù)A的連接已超過(guò)自身能承載的最大連接數(shù),比如說(shuō)A能承載的連接數(shù)為5,但是目前的并發(fā)有6個(gè)請(qǐng)求同時(shí)進(jìn)行,前5請(qǐng)求能正常請(qǐng)求,最后一個(gè)會(huì)直接拒絕,執(zhí)行fallback降級(jí)邏輯;
完
看完這個(gè)文章,你有沒(méi)有懂得熔斷和降級(jí)之間的關(guān)系呢? 面試的情況下,你知道該怎么回答了嗎?
到此這篇關(guān)于Java看完秒懂版熔斷和降級(jí)的關(guān)系的文章就介紹到這了,更多相關(guān)Java熔斷和降級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot實(shí)現(xiàn)反向代理的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)反向代理的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源
這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Java實(shí)戰(zhàn)之圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java語(yǔ)言編寫(xiě)一個(gè)圖書(shū)管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下2022-03-03Java中的HashMap為什么會(huì)產(chǎn)生死循環(huán)
這篇文章主要介紹了Java中的HashMap為什么會(huì)產(chǎn)生死循環(huán),HashMap?死循環(huán)是一個(gè)比較常見(jiàn)、比較經(jīng)典的問(wèn)題,下面文章我們就來(lái)徹底理解死循環(huán)的原因。需要的小伙伴可以參考一下2022-05-05自定義一個(gè)簡(jiǎn)單的JDBC連接池實(shí)現(xiàn)方法
下面小編就為大家分享一篇自定義一個(gè)簡(jiǎn)單的JDBC連接池實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12分享幾個(gè)寫(xiě)簡(jiǎn)潔java代碼的小技巧
成為一個(gè)優(yōu)秀的Java程序員,有著良好的代碼編寫(xiě)習(xí)慣是必不可少的,下面這篇文章主要給大家介紹了關(guān)于寫(xiě)java代碼的小技巧,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02Idea2023創(chuàng)建springboot不能選擇java8的解決方法(最新推薦)
在idea2023版本創(chuàng)建springboot的過(guò)程中,選擇java版本時(shí)發(fā)現(xiàn)沒(méi)有java8版本,只有java17和java20,遇到這樣的問(wèn)題如何解決呢,下面小編給大家分享Idea2023創(chuàng)建springboot不能選擇java8的解決方法,感興趣的朋友一起看看吧2024-01-01IDEA如何設(shè)置SVN提交忽略文件 target.iml
使用IDEA的SVN插件時(shí),可能會(huì)遇到提交不必要文件的問(wèn)題,解決這個(gè)問(wèn)題有兩種方法:第一種是在IDEA設(shè)置中的File Types下的Ignore files and folders添加需要忽略的文件或文件夾;第二種是使用SVN客戶(hù)端TortoiseSVN,在項(xiàng)目目錄點(diǎn)擊右鍵選擇properties2024-10-10