對於大流量高並發常見的手段:緩存,中間件削峰,限流,降級。今天淺談一下常見的限流手段。
限流概念:限流的目的是通過對並發訪問/請求進行限速,或者對一個時間窗口內的請求進行限速來保護系統,一旦達到限制速率則可以拒絕服務、排隊或等待、降級等處理。
常見的限流手段:常用的限流算法有兩種:漏桶算法和令牌桶算法。
漏桶算法:漏桶算法思路很簡單,水(請求)先進入到漏桶里,漏桶以一定的速度出水,當水流入速度過大會直接溢出,可以看出漏桶算法能強行限制數據的傳輸速率。對於很多應用場景來說,除了要求能夠限制數據的平均傳輸速率外,還要求允許某種程度的突發傳輸。這時候漏桶算法可能就不合適了,令牌桶算法更為適合。
令牌桶算法:令牌桶算法的原理是系統會以一個恆定的速度往桶里放入令牌,而如果請求需要被處理,則需要先從桶里獲取一個令牌,當桶里沒有令牌可取時,則拒絕服務,令牌桶算法通過發 放令牌,根據令牌的rate頻率做請求頻率限制,容量限制等。
通常使用Google開源工具包Guava提供的限流工具類RateLimiter來實現控制速率,該類基於令牌桶算法來完成限流,非常易於使用,而且非常高效。
