qps流量控制-令牌桶算法

一般併發系統有對應處理請求的最大能力,這裏稱最大qps,也需要有閾值設置,如果超過最大qps,則可能導致系統不穩定,產生雪崩效應,甚至連鎖反應。

限流可以認爲服務降級的一種,限流就是限制系統的輸入和輸出流量已達到保護系統的目的。一般來說系統的吞吐量是可以被測算的,爲了保證系統的穩定運行,一旦達到的需要限制的閾值,就需要限制流量並採取一些措施以完成限制流量的目的。比如:部分拒絕處理。

 

令牌桶算法

  令牌桶算法的原理是系統會以一個恆定的速度往桶裏放入令牌,而如果請求需要被處理,則需要先從桶裏獲取一個令牌,當桶裏沒有令牌可取時,則拒絕服務。 當桶滿時,新添加的令牌被丟棄。

令牌桶是一個存放固定容量令牌(token)的桶,按照固定速率往桶裏添加令牌。令牌桶算法基本可以用下面的幾個概念來描述:

  • 令牌將按照固定的速率被放入令牌桶中。比如每秒放10個。
  • 桶中最多存放b個令牌,當桶滿時,新添加的令牌被丟棄。
  • 當1個請求到達,如果桶中還有令牌,將從桶中刪除1個令牌,接着請求會被處理。
  • 如果桶中的令牌不足1個,則不會給該請求分發令牌,該請求會被直接返回,日誌記錄該請求超閾值。

令牌桶c++實現:https://github.com/phlamenco/boully.git

代碼轉自:https://www.jianshu.com/p/6f9e24f4394a

發佈了7 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章