簡介:每一個對外提供的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防刷限流