服務(wù)雪崩:
服務(wù)雪崩效應(yīng)是一種因服務(wù)提供者的不可用導(dǎo)致 服務(wù)調(diào)用者的不可用,并將不可用 逐漸放大 的過(guò)程.
任意服務(wù)提供者的不可用會(huì)導(dǎo)致整個(gè)依賴鏈的崩潰抗悍。
形成過(guò)程(滾雪球):
1. 服務(wù)提供者的不可用废封。
-
硬件故障
斷電厌殉,網(wǎng)絡(luò)波動(dòng) 粱挡,地震钮科、雷擊導(dǎo)致服務(wù)器損壞等等退盯。 -
程序bug
各種異常院领,然后沒(méi)有異常處理等弛矛。 -
緩存擊穿
常發(fā)生在系統(tǒng)重啟后,由于重啟清空緩存比然,導(dǎo)致大部分請(qǐng)求跳過(guò)緩存直接請(qǐng)求外部接口或數(shù)據(jù)庫(kù)丈氓,導(dǎo)致服務(wù)負(fù)載過(guò)大,短時(shí)間內(nèi)無(wú)法正常響應(yīng)强法。 -
請(qǐng)求過(guò)多万俗,資源耗盡
請(qǐng)求過(guò)多,單次請(qǐng)求耗時(shí)過(guò)長(zhǎng)導(dǎo)致線程池資源耗盡饮怯,也會(huì)導(dǎo)致服務(wù)不可用闰歪。
2. 調(diào)用服務(wù)堵塞。
同步調(diào)用會(huì)導(dǎo)致線程堵塞蓖墅。
3. 調(diào)用者重試库倘。
代碼邏輯重試。
用戶重試论矾。
4. 調(diào)用者不可用教翩。
調(diào)用者線程資源耗盡。調(diào)用者也進(jìn)入不可用狀態(tài)贪壳。
5. 雪崩效應(yīng)形成饱亿。
服務(wù)雪崩的應(yīng)對(duì)策略:
1. 流量控制。
網(wǎng)關(guān)限流
使用網(wǎng)關(guān)中間件對(duì)服務(wù)的單位時(shí)間調(diào)用次數(shù)進(jìn)行控制闰靴。
服務(wù)接口API限流 Rate Limit
Spring Cloud Zuul微服務(wù)網(wǎng)關(guān)的API限流
Nginx 限流用戶交互限流
采用一定的策略限制用戶的請(qǐng)求間隔彪笼。
- 采用加載動(dòng)畫,提高用戶的忍耐等待時(shí)間。
- 提交按鈕添加強(qiáng)制等待時(shí)間機(jī)制蚂且。
-
關(guān)閉重試
服務(wù)調(diào)用者關(guān)閉重試機(jī)制配猫,或者限制重試次數(shù)
2. 改進(jìn)緩存機(jī)制。
-
緩存預(yù)加載
程序啟動(dòng)時(shí)杏死,自動(dòng)加載熱門數(shù)據(jù)到緩存泵肄。
JavaWeb項(xiàng)目啟動(dòng)時(shí)加載熱數(shù)據(jù)到緩存 - 同步改為異步刷新
3. 服務(wù)自動(dòng)擴(kuò)容佳遣。
-
牛逼方案
AWS Auto Scaling —— 擴(kuò)展應(yīng)用程序以便優(yōu)化性能和成本 -
普通方案
在阿里云上進(jìn)行Docker應(yīng)用的自動(dòng)彈性伸縮
4.服務(wù)調(diào)用者降級(jí)服務(wù)。
-
資源隔離
對(duì)調(diào)用服務(wù)的線程池進(jìn)行隔離 -
依賴分類
根據(jù)具體業(yè)務(wù),將依賴服務(wù)分為: 強(qiáng)依賴和若依賴. 強(qiáng)依賴服務(wù)不可用會(huì)導(dǎo)致當(dāng)前業(yè)務(wù)中止,而弱依賴服務(wù)的不可用不會(huì)導(dǎo)致當(dāng)前業(yè)務(wù)的中止. -
對(duì)不可用服務(wù)進(jìn)行快速失敗
不可用服務(wù)的調(diào)用快速失敗一般通過(guò) 超時(shí)機(jī)制凡伊,熔斷器和熔斷后的降級(jí)方法 來(lái)實(shí)現(xiàn).
超時(shí)處理機(jī)制:當(dāng)調(diào)用服務(wù)的響應(yīng)時(shí)間過(guò)長(zhǎng),無(wú)論是否還能返回正確結(jié)果窒舟,調(diào)用方都認(rèn)為調(diào)用失敗系忙,進(jìn)行失敗處理。
Java任務(wù)超時(shí)處理機(jī)制實(shí)現(xiàn)
Hystrix
Hystrix 是什么惠豺?
一個(gè)針對(duì)分布式系統(tǒng)的延遲和容錯(cuò)的中間庫(kù)银还。
在分布式環(huán)境中,許多服務(wù)依賴項(xiàng)中的一些不可避免地會(huì)失敗洁墙。
Hystrix 是一個(gè)通過(guò)添加延遲和故障容錯(cuò)邏輯來(lái)幫助你控制這些分布式服務(wù)之間交互的中間件蛹疯。Hystrix通過(guò)隔離服務(wù)之間的訪問(wèn)點(diǎn),阻止它們之間的級(jí)聯(lián)故障以及提供后備選項(xiàng)來(lái)實(shí)現(xiàn)這一點(diǎn)热监,所有這些都可以提高系統(tǒng)的整體彈性捺弦。
In a distributed environment, inevitably some of the many service dependencies will fail.
Hystrix is a library that helps you control the interactions between these distributed services by adding latency tolerance and fault tolerance logic.
Hystrix does this by isolating points of access between the services, stopping cascading failures across them, and providing fallback options, all of which improve your system’s overall resiliency.
Hystrix 有什么作用?
- 避免級(jí)聯(lián)故障
- 回退和降級(jí)
- 快速失敗和恢復(fù)
- 線程池和信號(hào)量隔離的斷路器
- 實(shí)時(shí)監(jiān)控孝扛,警報(bào)和操作控制列吼。