请你谈谈为什么分布式系统需要限流器
什么是限流器?
限流器是一種限制某種操作在一定時間內(nèi)的執(zhí)行次數(shù)(例如每秒鐘5次)或者執(zhí)行量(例如每秒鐘1G大小的數(shù)據(jù))的機(jī)制。
限流器是一種防御性的編程實現(xiàn)方式,在大數(shù)據(jù)量高并發(fā)訪問時,經(jīng)常會出現(xiàn)服務(wù)或接口面對暴漲的請求而不可用的情況,甚至引發(fā)連鎖反映導(dǎo)致整個系統(tǒng)崩潰。此時你需要使用的技術(shù)手段之一就是限流,當(dāng)請求達(dá)到一定的并發(fā)數(shù)或速率,就進(jìn)行等待、排隊、降級、拒絕服務(wù)等。
為什么需要限流器
在一個大型的分布式系統(tǒng),系統(tǒng)設(shè)計要考慮很多很多方面:
舉一個簡單的例子:假設(shè)一個商城,有下單和查看自己的訂單這兩個業(yè)務(wù)。限量秒殺的時候,用戶下單量在某一時候突然飚高。系統(tǒng)目前容量可能不夠承擔(dān)這么大的并發(fā)下單量,導(dǎo)致請求阻塞,排隊,并進(jìn)而導(dǎo)致所有的資源都被下單請求吃掉,用戶查看自己訂單的請求也無法執(zhí)行或者很慢。同時,用戶請求刷不出來就會不斷地刷,導(dǎo)致進(jìn)一步請求堆積。
限流器的相關(guān)策略設(shè)計
如果完全不采用限流器,一般需要通過設(shè)置適當(dāng)?shù)恼埱蟪瑫r,盡量小的同步等待隊列和合適的斷路策略,來防止過載。但是,這種方式并不能避免上面說的4個問題。
在目前的微服務(wù)體系中,一般一個進(jìn)程既是服務(wù)提供方,又是服務(wù)調(diào)用方。在服務(wù)網(wǎng)格下更是如此。對于服務(wù)提供方,限流主要是控制外部流量防止壓力過大。對于服務(wù)調(diào)用的時候限流,主要是考慮壓力均勻(雖然服務(wù)調(diào)用一般有負(fù)載均衡算法,但是一般的負(fù)載均衡算法沒法保證真正的負(fù)載完全均衡,客戶端限流器可以進(jìn)一步幫助防止壓力全部打到了某一個實例)。
對于服務(wù)端限流,當(dāng)觸發(fā)限流的時候,服務(wù)端一般會拒絕請求,并且可能返回 429 這個 HTTP 狀態(tài)碼。客戶端是這個請求直接異常,還是緩存起來之后繼續(xù)重試,取決于客戶端的策略。
每日一刷,輕松提升技術(shù),斬獲各種offer:
總結(jié)
以上是生活随笔為你收集整理的请你谈谈为什么分布式系统需要限流器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式系统概念以及嵌入式基础知识
- 下一篇: 【Bug解决】Could not fin