常用的限流演算法

2022-03-28 04:38:11 字數 1005 閱讀 2167

常用的限流演算法大致有三種:令牌桶演算法,漏桶演算法,計數器演算法

令牌桶演算法

令牌桶演算法是乙個存放固定容量令牌的桶,按照固定速率往桶裡新增令牌。令牌桶演算法的描述如下:

1.假設限制2r/s,則按照500毫秒的固定速率往桶中新增令牌

2.桶中最多存放b個令牌,當桶滿時,新新增的令牌被丟棄或拒絕

3.當乙個n個位元組大小的資料報到達,將從桶中刪除n個令牌,接著資料報被傳送到網路上

4.如果桶中的令牌不足n個,則不會刪除令牌,且該資料報將被限流(要麼丟棄,要麼緩衝區等待)

漏桶演算法

漏桶作為計量工具(the leaky bucket algorithm as a meter)時,可以用於流量整形(traffic shaping)和流量控制(trafficpolicing),漏桶演算法的描述如下:

1.乙個固定容量的漏桶,按照常量固定速率流出水滴

2.如果桶是空的,則不需流出水滴

3.可以以任意速率流入水滴到漏桶

4.如果流入水滴超出了桶的容量,則流入的水滴溢位了(被丟棄),而漏桶容量是不變的

有時候我們還使用計數器來進行限流,主要用來限制總併發數,比如資料庫連線池、執行緒池、秒殺的併發數;只要全域性總請求數或者一定時間段的總請求數設定的閥值則進行限流,是簡單粗暴的總數量限流,而不是平均速率限流。

令牌桶和漏桶對比:

令牌桶是按照固定速率往桶中新增令牌,請求是否被處理需要看桶中令牌是否足夠,當令牌數減為零時則拒絕新的請求;

漏桶則是按照常量固定速率流出請求,流入請求速率任意,當流入的請求數累積到漏桶容量時,則新流入的請求被拒絕;

令牌桶限制的是平均流入速率(允許突發請求,只要有令牌就可以處理,支援一次拿3個令牌,4個令牌),並允許一定程度突發流量;

漏桶限制的是常量流出速率(即流出速率是乙個固定常量值,比如都是1的速率流出,而不能一次是1,下次又是2),從而平滑突發流入速率;

令牌桶允許一定程度的突發,而漏桶主要目的是平滑流入速率;

兩個演算法實現可以一樣,但是方向是相反的,對於相同的引數得到的限流效果是一樣的

常用限流演算法

在開發高併發系統時有三把利器用來保護系統 快取 降級和限流。今天我們要聊的就是限流 rate limit 限流的目的很簡單,就是為了保護系統不被瞬時大流量沖垮,需要用到限流,特別是類似秒殺這種瞬時流量非常大但實際成單率低的業務場景。目前比較常用的限流演算法有三種 計數器固定視窗演算法是最簡單的限流演...

限流和限流演算法

目錄 一 什麼是限流 二 為什麼需要限流 三 那些場景需要用到限流 3.1 對外服務 3.2 對內服務 四 限流演算法 4.1 計數器演算法 4.2 漏桶演算法 4.3 令牌桶演算法 限流其實是指當系統資源不夠,不足以應對大量請求,即系統資源與訪問量出現矛盾的時候,我們為了保證有限的資源能夠正常服務...

常見的限流演算法

在高併發的系統中,往往需要在系統中做限流,一方面是為了防止大量的請求使伺服器過載,導致服務不可用,另一方面是為了防止網路攻擊。常見的限流方式,比如hystrix適用執行緒池隔離,超過執行緒池的負載,走熔斷的邏輯。在一般應用伺服器中,比如tomcat容器也是通過限制它的執行緒數來控制併發的 也有通過時...