【119期】談談在專案中,如何應對高併發流量
阿新 • • 發佈:2021-12-19
應對大流量的一些思路
什麼是大流量?
TPS(每秒事務量),QPS(每秒請求量),1W+,5W+,10W+,100W+...。其實並沒有一個絕對的數字,如果這個量造成了系統的壓力,影響了系統的效能,那麼這個量就可以稱之為大流量了。
應對大流量的一些常見手段是什麼?
- 快取:讓資料儘早進入快取,離程式近一點,不要大量頻繁的訪問DB。
- 降級:如果不是核心鏈路,那麼就把這個服務降級掉。
- 限流:在一定時間內把請求限制在一定範圍內,保證系統不被沖垮,同時儘可能提升系統的吞吐量
有些時候,快取和降級是解決不了問題的,比如,電商的雙十一,使用者的購買,下單等行為,是涉及到大量寫操作,而且是核心鏈路,無法降級的,這個時候,限流就比較重要了。
限流的常用方式
限流的常用處理手段有:計數器、滑動視窗、漏桶、令牌。
計數器
計數器是一種比較簡單的限流演算法,用途比較廣泛,在介面層面,很多地方使用這種方式限流。在一段時間內,進行計數,與閥值進行比較,到了時間臨界點,將計數器清0。
這裡需要注意的是,存在一個時間臨界點的問題。舉個例子,在12:01:00到12:01:58這段時間內沒有使用者請求,然後在12:01:59這一瞬時發出100個請求,OK,然後在12:02:00這一瞬時又發出了100個請求。這裡你應該能感受到,在這個臨界點可能會承受惡意使用者的大量請求,甚至超出系統預期的承受。
滑動視窗