寫在前面
在網際網路應用中,高併發系統會面臨一個重大的挑戰,那就是大量流高併發訪問,比如:天貓的雙十一、京東618、秒殺、搶購促銷等,這些都是典型的大流量高併發場景。關於秒殺,小夥伴們可以參見我的另一篇文章《【高併發】高併發秒殺系統架構解密,不是所有的秒殺都是秒殺!》
關注【冰河技術】微信公眾號,解鎖更多【高併發】專題文章。
注意:由於原文篇幅比較長,所以被拆分為:理論、演算法、實戰(HTTP介面實戰+分散式限流實戰)三大部分。
高併發系統限流
短時間內巨大的訪問流量,我們如何讓系統在處理高併發的同時還能保證自身系統的穩定性?有人會說,增加機器就可以了,因為我的系統是分散式的,所以可以只需要增加機器就可以解決問題了。但是,如果你通過增加機器還是不能解決這個問題怎麼辦呢?而且這種情況下又不能無限制的增加機器,伺服器的硬體資源始終都是有限的,在有限的資源下,我們要應對這種大流量高併發的訪問,就不得不採取一些其他的措施來保護我們的後端服務系統了,比如:快取、非同步、降級、限流、靜態化等。
這裡,我們先說說如何實現限流。
什麼是限流?
在高併發系統中,限流通常指的是:對高併發訪問或者請求進行限速或者對一個時間內的請求進行限速來保護我們的系統,一旦達到系統的限速規則(比如系統限制的請求速度),則可以採用下面的方式來處理這些請求。
- 拒絕服務(友好提示或者跳轉到錯誤頁面)。
- 排隊或等待(比如秒殺系統)。
- 服務降級(返回預設的兜底資料)。
其實,就是對請求進行限速,比如10r/s,即每秒只允許10個請求,這樣就限制了請求的速度。從某種意義上說,限流,其實就是在一定頻率上進行量的限制。
限流一般用來控制系統服務請求的速率,比如:天貓雙十一的限流,京東618的限流,12306的搶票等。
限流有哪些使用場景?
這裡,我們來舉一個例子,假設你做了一個商城系統,某個節假日的時候,突然發現提交訂單的介面請求比平時請求量突然上漲了將近50倍,沒多久提交訂單的介面就超時並且丟擲了異常,幾乎不可用了。而且,因為訂單介面超時不可用,還導致了系統其它服務出現故障。
我們該如何應對這種大流量場景呢?一種典型的處理方案就是限流。當然了,除了限流之外,還有其他的處理方案,我們這篇文章就主要講限流。
- 對稀缺資源的秒殺、搶購;
- 對資料庫的高併發讀寫操作,比如提交訂單,瞬間往資料庫插入大量的資料;
限流可以說是處理高併發問題的利器,有了限流就可以不用擔心瞬間高峰流量壓垮系統服務或者服務雪崩,最終做到有損服務而不是不服務。
使用限流同樣需要注意的是:限流要評估好,測試好,否則會導致正常的訪問被限流。
重磅福利
關注「 冰河技術 」微信公眾號,後臺回覆 “設計模式” 關鍵字領取《深入淺出Java 23種設計模式》PDF文件。回覆“Java8”關鍵字領取《Java8新特性教程》PDF文件。兩本PDF均是由冰河原創並整理的超硬核教程,面試必備!!
好了,今天就聊到這兒吧!別忘了點個贊,給個在看和轉發,讓更多的人看到,一起學習,一起進步!!
寫在最後
如果你覺得冰河寫的還不錯,請微信搜尋並關注「 冰河技術 」微信公眾號,跟冰河學習高併發、分散式、微服務、大資料、網際網路和雲原生技術,「 冰河技術 」微信公眾號更新了大量技術專題,每一篇技術文章乾貨滿滿!不少讀者已經通過閱讀「 冰河技術 」微信公眾號文章,吊打面試官,成功跳槽到大廠;也有不少讀者實現了技術上的飛躍,成為公司的技術骨幹!如果你也想像他們一樣提升自己的能力,實現技術能力的飛躍,進大廠,升職加薪,那就關注「 冰河技術 」微信公眾號吧,每天更新超硬核技術乾貨,讓你對如何提升技術能力不再迷茫!