微服務(wù)限流、降級(jí)、熔斷分別都是什么意思,我們平時(shí)工作中為什么要關(guān)注這些東西呢?
公司不斷的發(fā)展壯大,一開始處于蠻荒時(shí)代,咱們從單體應(yīng)用過(guò)渡到微服務(wù)的時(shí)候,可能還是那一套單體的思想,再加上用戶量可能也不多,直接就不去考慮起量了之后,我們需要如何處理
可殊不知,當(dāng)有一天起量了,機(jī)會(huì)擺在你面前時(shí)候,你沒(méi)有準(zhǔn)備好,你也是抓不住的
先舉一個(gè)生活中常見(jiàn)的例子:
我們有時(shí)去訪問(wèn)一個(gè)網(wǎng)站的時(shí)候,當(dāng)網(wǎng)絡(luò)正常的情況下,我們發(fā)現(xiàn)訪問(wèn)這個(gè)網(wǎng)站,比平時(shí)好像慢了一些,且會(huì)出現(xiàn)報(bào)系統(tǒng)錯(cuò)誤的情況,或者報(bào)錯(cuò)系統(tǒng)繁忙等信息,可能是服務(wù)做了超時(shí),超時(shí)之后就報(bào)錯(cuò)了
再舉一個(gè)雙 11 的例子
咱們?cè)L問(wèn)某貓或者某狗的時(shí)候,咱們發(fā)現(xiàn)并不是每一次訪問(wèn)都是可以正常進(jìn)入頁(yè)面的,也就是說(shuō)一會(huì)可以正常進(jìn)入頁(yè)面,一會(huì)又不能正常進(jìn)入頁(yè)面,并且會(huì)提示系統(tǒng)繁忙請(qǐng)稍后再試,此處實(shí)際上是服務(wù)應(yīng)用了限流和熔斷
另外,在雙 11 這一天,咱們買了商品之后,發(fā)現(xiàn)當(dāng)天是沒(méi)有辦法進(jìn)行退款的,這個(gè)是應(yīng)用了服務(wù)降級(jí)
那么,咱們?cè)诩夹g(shù)上什么限流,什么是熔斷,什么又是服務(wù)降級(jí)呢?
什么是限流?
通過(guò)對(duì)并發(fā)訪問(wèn)/請(qǐng)求進(jìn)行限速,或者對(duì)一個(gè)時(shí)間窗口內(nèi)的請(qǐng)求進(jìn)行限速來(lái)保護(hù)系統(tǒng),一旦達(dá)到限制速率則可以拒絕服務(wù)、排隊(duì)或等待、降級(jí)等處理,限流是從整體系統(tǒng)上去進(jìn)行考慮的
最近國(guó)慶了,很多人都會(huì)去坐火車,坐高鐵,咱們排隊(duì)過(guò)安檢的時(shí)候,我們可以看到保安會(huì)隔一會(huì)放 10 個(gè)人進(jìn)去,過(guò)一會(huì)又放一些人進(jìn)去,一直維持著里面只能有 10個(gè)人在進(jìn)行安全檢查
那么這 10 個(gè)數(shù)字,就相當(dāng)于是服務(wù)進(jìn)行的限流,只要一達(dá)到 10 人以上的請(qǐng)求,那么就會(huì)服務(wù)拒絕,當(dāng)有空余的時(shí)候,才會(huì)處理新來(lái)的請(qǐng)求,這個(gè)應(yīng)該就不難理解了吧
一般限流的方式有這些:
- 固定時(shí)間窗口控制
- 使用漏桶的方式
- 使用令牌桶的方式
關(guān)于限流的詳細(xì)的具體實(shí)現(xiàn)方式,咱們可以查看歷史文章:最常用的限流算法以及如何在http中間件中加入流控
什么是熔斷?
熔斷和限流還不太一樣,上面我們可以看到限流是,控制請(qǐng)求速率,只要還能承受,那么都會(huì)處理,可是熔斷是這樣的一個(gè)效果
舉個(gè) 栗子
例如咱們的微服務(wù)系統(tǒng)中,多個(gè)微服務(wù)是會(huì)相互調(diào)用的,且會(huì)存在一個(gè)較長(zhǎng)的調(diào)用調(diào)用鏈,鏈路一長(zhǎng),關(guān)聯(lián)的服務(wù)多了就會(huì)帶來(lái)一個(gè)問(wèn)題
網(wǎng)關(guān)請(qǐng)求到我們的微服務(wù) A,微服務(wù) A 需要去調(diào)用微服務(wù) B,微服務(wù) C,微服務(wù) B 還會(huì)去調(diào)用為服務(wù) D,微服務(wù)C也會(huì)去調(diào)用其它的微服務(wù)
這個(gè)時(shí)候,如果在這條鏈路上,哪怕有一個(gè)服務(wù)出現(xiàn)了問(wèn)題,或者相應(yīng)時(shí)間過(guò)長(zhǎng),那么對(duì)與微服務(wù)A的調(diào)用就會(huì)占用越來(lái)越多的系統(tǒng)資源,一般服務(wù)也是會(huì)做重試機(jī)制,且當(dāng)客戶端調(diào)用某個(gè)接口不能得到正常響應(yīng)的時(shí)候,是會(huì)進(jìn)行瘋狂請(qǐng)求的,這會(huì)導(dǎo)致微服務(wù) A 消耗過(guò)多資源,進(jìn)而引起系統(tǒng)崩潰,所謂的“雪崩效應(yīng)”
那么這個(gè)時(shí)候,就不得不引入一個(gè)斷路器來(lái)進(jìn)行熔斷,咱們一會(huì)會(huì)應(yīng)用 hystrix 來(lái)進(jìn)行功能實(shí)現(xiàn)
關(guān)于熔斷,我們可以這樣來(lái)思考,咱們初高中學(xué)過(guò)的物理,家里的電閘開關(guān)出都會(huì)設(shè)置一個(gè)保險(xiǎn)絲,當(dāng)咱們的用電負(fù)荷過(guò)大的時(shí)候,保險(xiǎn)絲就會(huì)自我熔斷,保護(hù)電路
那么微服務(wù)中的熔斷也是這個(gè)效果,他可以保護(hù)咱們的調(diào)用鏈路,防止高壓請(qǐng)求帶來(lái)資源極高的消耗,最終導(dǎo)致雪崩,熔斷是從微服務(wù)層級(jí)去考慮的
咱們的斷路器 hystrix 當(dāng)發(fā)現(xiàn)鏈路中,微服務(wù) A 請(qǐng)求 微服務(wù) B ,響應(yīng)時(shí)間過(guò)長(zhǎng),或者 微服務(wù) B 不可用的時(shí)候,那么微服務(wù) A 就會(huì)迅速的進(jìn)行錯(cuò)誤響應(yīng),而不是瘋狂的去調(diào)用微服務(wù) B
Hystrix 自身還有探測(cè)機(jī)制,會(huì)去探測(cè)微服務(wù) B 是否可用,如果可用了,那么微服務(wù) A 的請(qǐng)求就會(huì)正常的去請(qǐng)求微服務(wù) B
關(guān)于斷路器的使用方式,實(shí)現(xiàn)方式,和熔斷的實(shí)現(xiàn)方案,我們可以查看歷史文章:golang 微服務(wù)中的斷路器 hystrix
什么是服務(wù)降級(jí)?
當(dāng)我的微服務(wù)架構(gòu)整體的負(fù)載超出了預(yù)設(shè)的上限閾值或要應(yīng)對(duì)即將到來(lái)的大流量是,為了保證重要或基本的服務(wù)能正常運(yùn)行,會(huì)自動(dòng)或者手動(dòng)的關(guān)閉某些外圍或者不重要的服務(wù)
服務(wù)降級(jí)其實(shí)就更好理解了,例如咱們服務(wù)有 10 個(gè)功能,當(dāng)服務(wù)壓力過(guò)大的時(shí)候,咱們就可以自動(dòng)關(guān)閉外圍的幾個(gè)核心的功能,讓系統(tǒng)資源都集中咱們的核心服務(wù)上,一般是從外圍服務(wù)開始降級(jí)
咱們做核酸已經(jīng)持續(xù)好幾年了,咱們以喉嚨上的老繭為證
做核酸的時(shí)候,進(jìn)入一個(gè)通道,我們可以看到,最開始有檢查戴口罩的,往下走,有檢查健康碼的,再往下走,開始檢查場(chǎng)所碼,最后快到大白處之后,就開始檢查核酸碼了
當(dāng)有大的人流量,咱們做核酸的時(shí)候,可能就只有查看場(chǎng)所碼和核酸碼了,這個(gè)就好理解了吧
感謝閱讀,歡迎交流,點(diǎn)個(gè)贊,關(guān)注一波 再走吧
歡迎點(diǎn)贊,關(guān)注,收藏
朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力
好了,本次就到這里
技術(shù)是開放的,我們的心態(tài),更應(yīng)是開放的。擁抱變化,向陽(yáng)而生,努力向前行。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-697633.html
我是阿兵云原生,歡迎點(diǎn)贊關(guān)注收藏,下次見(jiàn)~
可以進(jìn)入地址進(jìn)行體驗(yàn)和學(xué)習(xí):https://xxetb.xet.tech/s/3lucCI文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-697633.html
到了這里,關(guān)于簡(jiǎn)單理解微服務(wù)限流、降級(jí)、熔斷的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!