思路很簡單,請求先進入到漏桶裡,漏桶以固定的速度出水,也就是處理請求,當水加的過快,則會直接溢位,也就是拒絕請求,可以看出漏桶演算法能強行限制資料的傳輸速率。
但是對於很多場景來說,除了要求能夠限制資料的平均傳輸速率外,還要求允許某種程度的突發傳輸。這時候漏桶演算法可能就不合適了,令牌桶演算法更為適合。
令牌桶演算法的原理是系統會以乙個恆定的速度往桶裡放入令牌,而如果請求需要被處理,則需要先從桶裡獲取乙個令牌,當桶裡沒有令牌可取時,則拒絕服務。
幾種常見的限流演算法
1 令牌桶演算法 令牌桶演算法是比較常見的限流演算法之一,大概描述如下 1 所有的請求在處理之前都需要拿到乙個可用的令牌才會被處理 2 根據限流大小,設定按照一定的速率往桶裡新增令牌 3 桶設定最大的放置令牌限制,當桶滿時 新新增的令牌就被丟棄活著拒絕 4 請求達到後首先要獲取令牌桶中的令牌,拿著令...
限流和限流演算法
目錄 一 什麼是限流 二 為什麼需要限流 三 那些場景需要用到限流 3.1 對外服務 3.2 對內服務 四 限流演算法 4.1 計數器演算法 4.2 漏桶演算法 4.3 令牌桶演算法 限流其實是指當系統資源不夠,不足以應對大量請求,即系統資源與訪問量出現矛盾的時候,我們為了保證有限的資源能夠正常服務...
Redis限流的幾種實現
目錄 當系統處理能力有限,如何組織計畫外的請求對系統施壓。首先我們先看下一些簡單的限流策略,防止暴力攻擊。比如要對ip訪問,沒5s只能訪問10次,超過進行攔截。如上圖,一般使用滑動視窗來統計區間時間內的訪問次數。使用 zset 記錄 ip 訪問次數,每個 ip 通過 key 儲存下來,score 儲...