分布式 接口限流(漏桶/令牌桶算法)


簡介:每一個對外提供的API接口都是需要做流量控制的,不然會導致系統直接崩潰,如果API上的流量請求超過核定的數值,我們就得對請求進行分流或者直接拒絕等操作。

一、限流

  1. 作用:由於業務應用系統的負載能力有限,為了防止非預期的請求對系統壓力過大而拖垮業務應用系統;

  2. 大流量控制策略:分流、降級、限流;

  3. 限流策略:客戶端限流、Nginx限流、服務端限流和數據庫限流;

  4. 限流算法:漏桶算法和令牌桶算法,經常用在流量整形或速率限制中。

 

二.、漏桶算法(Leaky Bucket)

  1. 原理:把請求比作水,水先進入漏桶里,漏桶以一定的速度出水,當水注入速率超過出水速率時就會導致水直接溢出,然后就拒絕請求服務;

  2. 特點:能限制數據的傳輸速率,平滑網絡上的突發流量,但不適合於有突發特征的流量場景;

  3. 應用場景:必須讀寫分離的情況下,限制讀取的速率。

 

三、令牌桶算法(Token Bucket)

  1. 原理:系統會以一個恆定的速度往桶里放入令牌,如果請求需要被處理,則先需要從桶里獲取一個令牌,當桶里沒有令牌可取時,則拒絕服務;

  2. 特點

    A. 在能夠限制數據的平均傳輸速率外,還允許某種程度的突發傳輸;

    B. 與漏桶算法是相反的,一個是“進水”,一個是“出水”;

  3. 應用場景:必須讀寫分離的情況下,限制寫的速率。

 

四、限流工具

  1. 工具類:RateLimiter;  

  2. 基於Redis實現;

  3. 使用Semphore進行並發控制。

 

可參考:使用Redis進行API防刷限流

    開放API接口簽名驗證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM