切換語言為:簡體

閘道器限流常用方案

  • 爱糖宝
  • 2024-08-29
  • 2052
  • 0
  • 0

限流

大眾的限流方案有三種,計數器、漏桶演算法、令牌演算法

計數器

分為固定視窗和滑動視窗

固定視窗計數器

固定視窗比較簡單粗暴,如果假定某個介面1s最多接收100個請求,維護一個固定單位時間的計數器,檢測到單位時間過去則重置計數器為0

其不能應對突發的流量,如1s中前100ms處理了99個請求,最後900ms就只能處理一個了

滑動視窗計數器

滑動視窗是對固定視窗的改進

  • 將單位時間分為多個區間,每個區間都有一個計數器,有一個請求落在該區間內,則該區間的計數器就會加一

  • 每過一段時間,時間視窗就會滑動一格,拋棄最老的一個區間,並納入一個新的區間

  • 計算整個時間視窗內的請求總數時會累加所有時間片段內的計數器

漏桶演算法

漏桶演算法是利用一個快取區,當請求進入系統時,無論請求的速率如何,都先在快取區內儲存,然後以固定的流速流出快取區進行處理,使用佇列實現

  • 將每個請求放入固定大小的佇列進行儲存

  • 佇列以固定速率向外流出請求,如果佇列為空則停止流出

  • 如果佇列滿了則多餘的請求就被直接拒絕

限制的是流量的流出速率,對於流量均衡的可以使用該方式

無法應對突發的大流量

令牌桶演算法

令牌桶演算法是一種反向的漏桶演算法,桶中存放的不再是請求,而是令牌,只有拿到令牌後,才能對請求進行處理,如果沒有令牌,就需要等待可用的令牌,爲了限制流速,該演算法每單位時間產生一定量的令牌存入桶中

限制的是流量的平均流入速率,可以應對突發流量

Nginx的限流模組就是採用令牌桶演算法的實現

  • 每秒有r個令牌放入桶中

  • 桶的容量不變,如果桶滿了則不進行儲存令牌

  • 如果請求來了,沒有令牌會被限流

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.