高并发之服务降级和服务熔断____服务降级、熔断、限流的区别
高并發(fā)之服務(wù)降級(jí)和服務(wù)熔斷
服務(wù)降級(jí):
服務(wù)壓力劇增的時(shí)候根據(jù)當(dāng)前的業(yè)務(wù)情況及流量對(duì)一些服務(wù)和頁(yè)面有策略的降級(jí),以此環(huán)節(jié)服務(wù)器的壓力,以保證核心任務(wù)的進(jìn)行。
同時(shí)保證部分甚至大部分任務(wù)客戶能得到正確的相應(yīng)。也就是當(dāng)前的請(qǐng)求處理不了了或者出錯(cuò)了,給一個(gè)默認(rèn)的返回。
服務(wù)熔斷:在股票市場(chǎng),熔斷這個(gè)詞大家都不陌生,是指當(dāng)股指波幅達(dá)到某個(gè)點(diǎn)后,交易所為控制風(fēng)險(xiǎn)采取的暫停交易措施。相應(yīng)的,服務(wù)熔斷一般是指軟件系統(tǒng)中,由于某些原因使得服務(wù)出現(xiàn)了過(guò)載現(xiàn)象,為防止造成整個(gè)系統(tǒng)故障,從而采用的一種保護(hù)措施,所以很多地方把熔斷亦稱為過(guò)載保護(hù)。
降級(jí)分類
降級(jí)按照是否自動(dòng)化可分為:自動(dòng)開關(guān)降級(jí)和人工開關(guān)降級(jí)。
降級(jí)按照功能可分為:讀服務(wù)降級(jí)、寫服務(wù)降級(jí)。
降級(jí)按照處于的系統(tǒng)層次可分為:多級(jí)降級(jí)。
自動(dòng)降級(jí)分類
(1)、超時(shí)降級(jí):主要配置好超時(shí)時(shí)間和超時(shí)重試次數(shù)和機(jī)制,并使用異步機(jī)制探測(cè)回復(fù)情況
(2)、失敗次數(shù)降級(jí):主要是一些不穩(wěn)定的api,當(dāng)失敗調(diào)用次數(shù)達(dá)到一定閥值自動(dòng)降級(jí),同樣要使用異步機(jī)制探測(cè)回復(fù)情況
(3)、故障降級(jí):比如要調(diào)用的遠(yuǎn)程服務(wù)掛掉了(網(wǎng)絡(luò)故障、DNS故障、http服務(wù)返回錯(cuò)誤的狀態(tài)碼、rpc服務(wù)拋出異常),則可以直接降級(jí)。降級(jí)后的處理方案有:默認(rèn)值(比如庫(kù)存服務(wù)掛了,返回默認(rèn)現(xiàn)貨)、兜底數(shù)據(jù)(比如廣告掛了,返回提前準(zhǔn)備好的一些靜態(tài)頁(yè)面)、緩存(之前暫存的一些緩存數(shù)據(jù))
(4)、限流降級(jí)
當(dāng)我們?nèi)ッ霘⒒蛘邠屬?gòu)一些限購(gòu)商品時(shí),此時(shí)可能會(huì)因?yàn)樵L問(wèn)量太大而導(dǎo)致系統(tǒng)崩潰,此時(shí)開發(fā)者會(huì)使用限流來(lái)進(jìn)行限制訪問(wèn)量,當(dāng)達(dá)到限流閥值,后續(xù)請(qǐng)求會(huì)被降級(jí);降級(jí)后的處理方案可以是:排隊(duì)頁(yè)面(將用戶導(dǎo)流到排隊(duì)頁(yè)面等一會(huì)重試)、無(wú)貨(直接告知用戶沒(méi)貨了)、錯(cuò)誤頁(yè)(如活動(dòng)太火爆了,稍后重試)。
服務(wù)熔斷和服務(wù)降級(jí)比較:
兩者其實(shí)從有些角度看是有一定的類似性的:服務(wù)降級(jí)要考慮的問(wèn)題:
1.核心和非核心服務(wù)
2.是否支持降級(jí),降級(jí)策略
3.業(yè)務(wù)放通的場(chǎng)景,策略
Hystrix,該庫(kù)旨在通過(guò)控制那些訪問(wèn)遠(yuǎn)程系統(tǒng)、服務(wù)和第三方庫(kù)的節(jié)點(diǎn),從而對(duì)延遲和故障提供更強(qiáng)大的容錯(cuò)能力。Hystrix具備擁有回退機(jī)制和斷路器功能的線程和信號(hào)隔離,請(qǐng)求緩存和請(qǐng)求打包(request collapsing,即自動(dòng)批處理,譯者注),以及監(jiān)控和配置等功能。
服務(wù)降級(jí)、熔斷、限流的區(qū)別
降級(jí)
系統(tǒng)將某些不重要的業(yè)務(wù)或接口的功能降低,可以只提供部分功能,也可以完全停到所有所有不重要的功能。降級(jí)的思想是丟車保帥。
常見降級(jí)方式:
- 系統(tǒng)后門降級(jí):系統(tǒng)預(yù)留后門用于降級(jí),比如提供一個(gè)降級(jí)URL,訪問(wèn)URL時(shí)就執(zhí)行降級(jí)指令。缺點(diǎn):如果服務(wù)器數(shù)量多,需要一臺(tái)一臺(tái)去操作,效率低。
- 獨(dú)立系統(tǒng)降級(jí):將降級(jí)操作獨(dú)立到一個(gè)單獨(dú)的系統(tǒng)中,可以實(shí)現(xiàn)復(fù)雜的權(quán)限管理、批量操作等功能。
熔斷
降級(jí)是應(yīng)對(duì)系統(tǒng)自身的故障,而熔斷的目的是應(yīng)對(duì)外部系統(tǒng)的故障。比如A服務(wù)的X功能依賴B服務(wù)的某個(gè)接口,當(dāng)B服務(wù)接口響應(yīng)很慢時(shí),A服務(wù)X功能的響應(yīng)也會(huì)被拖慢,進(jìn)一步導(dǎo)致了A服務(wù)的線程都卡在了X功能上,A服務(wù)的其它功能也會(huì)卡主或拖慢。此時(shí)就需要熔斷機(jī)制,即A服務(wù)不在請(qǐng)求B這個(gè)接口,A服務(wù)內(nèi)部發(fā)現(xiàn)B接口就直接返回錯(cuò)誤,從而避免整個(gè)A服務(wù)被拖慢。
- 實(shí)現(xiàn)思路:需要系統(tǒng)有一個(gè)統(tǒng)一的API調(diào)用層,由API來(lái)進(jìn)行采樣或者統(tǒng)計(jì)。
限流
限流:只允許系統(tǒng)能夠承受的訪問(wèn)量進(jìn)來(lái),超出的會(huì)被丟棄。降級(jí)從系統(tǒng)功能優(yōu)先級(jí)角度考慮如何應(yīng)對(duì)故障,而限流則從用戶訪問(wèn)壓力的角度來(lái)考慮如何應(yīng)對(duì)故障。
常見限流方式
- 基于請(qǐng)求限流:指從外部請(qǐng)求的角度考慮限流。
- 基于資源限流:指從系統(tǒng)內(nèi)部考慮,找到影響性能的關(guān)鍵資源,對(duì)其使用上限限制。
案例
如果你來(lái)設(shè)計(jì)一個(gè)整點(diǎn)限量秒殺系統(tǒng),包括登錄、搶購(gòu)、支付(依賴支付寶)等核心功能,你會(huì)如何設(shè)計(jì)接口級(jí)的故障應(yīng)對(duì)手段?
思路:
- 降級(jí)(丟車保帥):在秒殺時(shí),通過(guò)服務(wù)降級(jí)把注冊(cè)、修改個(gè)人信息等非核心功能關(guān)閉掉。
- 熔斷:支付依賴第三方服務(wù),要設(shè)置熔斷策略,熔斷后要給出友好提示,比如10分鐘后再來(lái)支付。
- 限流:搶購(gòu)下單接口采用限流方式,如搶購(gòu)1000件商品,則設(shè)置2000大小的隊(duì)列,請(qǐng)求超過(guò)2000后直接拒絕掉。
服務(wù)的熔斷和降級(jí)的區(qū)別
熔斷:
舉個(gè)例子解釋,生活中每家每戶都在用電,小明家的電線由于故障致使了小明家停電了。而小李、小張家的電是正常使用的。電力公司沒(méi)有由于小明家有故障線路而停掉其余人家的電,同時(shí)小明家沒(méi)有使用有故障的電路的電。這時(shí)即為熔斷。熔斷的目的是當(dāng)A服務(wù)模塊中的某塊程序出現(xiàn)故障后為了避免影響其余客戶端的請(qǐng)求而作出的及時(shí)回應(yīng)。架構(gòu)
降級(jí):
舉個(gè)例子解釋,咱們?nèi)ャy行排隊(duì)辦理業(yè)務(wù),大部分的銀行分為普通窗口、特殊窗口(VIP窗口,老年窗口)。某一天銀行大廳排普通窗口的人巨多。這時(shí)特殊窗口貼出告示說(shuō)某時(shí)刻以后再開放。那么這時(shí)特殊窗口的工做人員就能夠空出來(lái)去幫其余窗口辦理業(yè)務(wù),提升辦事效率,已達(dá)到解決普通窗口排隊(duì)的人過(guò)的目的。這時(shí)即為降級(jí),降級(jí)的目的是為了解決總體項(xiàng)目的壓力,而犧牲掉某一服務(wù)模塊而采起的措施。微服務(wù)
以上為了加深理解分別舉了個(gè)例子。有不妥的地方歡迎留言指出。下面是前邊的總結(jié):
二者其實(shí)從有些角度看是有必定的相似性的:總結(jié)
以上是生活随笔為你收集整理的高并发之服务降级和服务熔断____服务降级、熔断、限流的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机器学习实践:本地远程查看服务器训练Te
- 下一篇: 机器学习实践:TensorFlow最后一