Web API 速率限制(二)- 令牌桶算法简介
前情提要
上一篇文章里簡單介紹了什么是Web API的速率限制,和限速策略需考慮的問題,最后還介紹了ASP.NET Core 的一個常用限速庫。。。。。。。的名字。
實施策略
如果你想要建立一個限速系統,首先要確保限速系統不會增加API的響應時間。為了保證高性能和橫向擴展性,很多人都會采用像Redis一樣的內存數據存儲來做限速器。因為Redis的讀寫速度很快,并且善于用作計數器。
限速
算法
限速算法有很多,這個系列文章將會介紹如下三種限速算法:
令牌桶
固定窗口計數器
滑動窗口計數器
今天介紹第一種:令牌桶算法。
令牌桶算法
????令牌桶算法,英文是Token Bucket。令牌桶算法可以保持穩定的流量上限,同時也允許偶爾的流量爆發。? ??
我們可以通過下面這個類比來進行解釋,有一個容量有限的桶,令牌以固定的速率添加到這個桶里面。由于桶的容量是有限的,所以不可能無限制的往里面添加令牌,如果令牌到達桶的時候,桶是滿的,那么這個令牌就被拋棄了。每次請求,n個數量的令牌從桶里面被移除,如果桶里面的令牌數少于n,那么該請求就會被拒絕。
舉個例子
比如說你想把API的速率限制到每分鐘20次,同時允許偶爾的流量爆發,最大不超過每分鐘50次。那么你可以使用一個Key-Value的內存數據存儲,例如Redis,然后:
用戶的第一次請求時,初始化一個桶,它能裝50個令牌,把請求的時間戳和令牌的數量存在Redis里,使用用戶ID作為Key。
在后續的請求里,按照預定的固定速率和上次請求后經過的時間向桶里面填充新的令牌。
然后從桶里面刪除一個令牌,并把時間戳更新為現在的時間。
最后,如果可用的令牌數為0,那么拒絕請求。
下回講:
2019-05-20
固定窗口計數器算法
.NET Core Rocks!!! \m/
總結
以上是生活随笔為你收集整理的Web API 速率限制(二)- 令牌桶算法简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再多迷茫,不如静下来好好学习
- 下一篇: Xamarin中国峰会2019