日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Web API 速率限制(二)- 令牌桶算法简介

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 速率限制(二)- 令牌桶算法简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。