如何實現(xiàn)億級流量下的分布式限流?這些理論你必須掌握!!
高并發(fā)系統(tǒng)限流
短時間內(nèi)巨大的訪問流量,我們?nèi)绾巫屜到y(tǒng)在處理高并發(fā)的同時還能保證自身系統(tǒng)的穩(wěn)定性?有人會說,增加機器就可以了,因為我的系統(tǒng)是分布式的,所以可以只需要增加機器就可以解決問題了。
但是,如果你通過增加機器還是不能解決這個問題怎么辦呢?而且這種情況下又不能無限制的增加機器,服務(wù)器的硬件資源始終都是有限的,在有限的資源下,我們要應(yīng)對這種大流量高并發(fā)的訪問,就不得不采取一些其他的措施來保護我們的后端服務(wù)系統(tǒng)了,比如:緩存、異步、降級、限流、靜態(tài)化等。
這里,我們先說說如何實現(xiàn)限流。
什么是限流?
在高并發(fā)系統(tǒng)中,限流通常指的是:對高并發(fā)訪問或者請求進(jìn)行限速或者對一個時間內(nèi)的請求進(jìn)行限速來保護我們的系統(tǒng),一旦達(dá)到系統(tǒng)的限速規(guī)則(比如系統(tǒng)限制的請求速度),則可以采用下面的方式來處理這些請求。
- 拒絕服務(wù)(友好提示或者跳轉(zhuǎn)到錯誤頁面)。
- 排隊或等待(比如秒殺系統(tǒng))。
- 服務(wù)降級(返回默認(rèn)的兜底數(shù)據(jù))。
其實,就是對請求進(jìn)行限速,比如10r/s,即每秒只允許10個請求,這樣就限制了請求的速度。從某種意義上說,限流,其實就是在一定頻率上進(jìn)行量的限制。
限流一般用來控制系統(tǒng)服務(wù)請求的速率,比如:天貓雙十一的限流,12306的搶票等。
限流有哪些使用場景?
這里,我們來舉一個例子,假設(shè)你做了一個商城系統(tǒng),某個節(jié)假日的時候,突然發(fā)現(xiàn)提交訂單的接口請求比平時請求量突然上漲了將近50倍,沒多久提交訂單的接口就超時并且拋出了異常,幾乎不可用了。而且,因為訂單接口超時不可用,還導(dǎo)致了系統(tǒng)其它服務(wù)出現(xiàn)故障。
我們該如何應(yīng)對這種大流量場景呢?一種典型的處理方案就是限流。當(dāng)然了,除了限流之外,還有其他的處理方案,我們這篇文章就主要講限流。
- 對稀缺資源的秒殺、搶購;
- 對數(shù)據(jù)庫的高并發(fā)讀寫操作,比如提交訂單,瞬間往數(shù)據(jù)庫插入大量的數(shù)據(jù);
限流可以說是處理高并發(fā)問題的利器,有了限流就可以不用擔(dān)心瞬間高峰流量壓垮系統(tǒng)服務(wù)或者服務(wù)雪崩,最終做到有損服務(wù)而不是不服務(wù)。