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