令牌桶算法,是增加一個大小固定的容器,也就是令牌桶,系統以恒定的速率向令牌桶中放入令牌,如果有用戶端來請求,先需要從令牌桶中拿一個令牌,拿到令牌,才有資格通路系統,這時令牌桶中少一個令牌。當令牌桶滿的時候,再向令牌桶生成令牌時,令牌會被抛棄。
在令牌桶算法中,存在以下幾種情況:
- 請求速度大于令牌的生成速度:那麼令牌桶中的令牌會被取完,後續再進來的請求,由于拿不到令牌,會被限流。
- 請求速度等于令牌的生成速度:那麼此時系統處于平穩狀态。
- 請求速度小于令牌的生成速度:那麼此時系統的通路量遠遠低于系統的并發能力,請求可以被正常處理。
令牌桶算法,由于有一個桶的存在,可以處理短時間大流量的場景。這是令牌桶和漏桶的一個差別。