限流算法掃盲篇:漏桶算法 令牌桶算法

1)漏桶算法

漏桶(Leaky Bucket)算法思路很簡單,水(請求)先進入到漏桶裏,漏桶以必定的速度出水(接口有響應速率),當水流入速度過大會直接溢出(訪問頻率超過接口響應速率),而後就拒絕請求,能夠看出漏桶算法能強行限制數據的傳輸速率。示意圖以下:算法

2)令牌桶算法

令牌桶算法(Token Bucket)和 Leaky Bucket 效果同樣但方向相反的算法,更加容易理解。隨着時間流逝,系統會按恆定1/QPS時間間隔(若是QPS=100,則間隔是10ms)往桶裏加入Token(想象和漏洞漏水相反,有個水龍頭在不斷的加水),若是桶已經滿了就再也不加了。新請求來臨時,會各自拿走一個Token,若是沒有Token可拿了就阻塞或者拒絕服務。示意圖以下:blog

漏桶算法與令牌桶算法的區別在於,漏桶算法可以強行限制數據的傳輸速率,令牌桶算法可以在限制數據的平均傳輸速率的同時還容許某種程度的突發傳輸。令牌桶的另一個好處是能夠方便的改變速度。 一旦須要提升速率,則按需提升放入桶中的令牌的速率。通常會定時(好比100毫秒)往桶中增長必定數量的令牌, 有些變種算法則實時的計算應該增長的令牌的數量。接口

相關文章
相關標籤/搜索