1. 程式人生 > >令牌桶演算法和漏桶演算法以及流量控制淺談

令牌桶演算法和漏桶演算法以及流量控制淺談

 ​在雙十一等大促環節,系統需要限流,外部需要在我制定的速率限制來呼叫(超出的流量直接擋掉,系統不進行處理),有沒有理論依據呢?這裡看了兩個演算法

約定訪問速率是流量管理中比較常用的方法之一,令牌桶演算法,是目前最常用的流量限制的方法。

    ​  

        ​​什麼是令牌桶演算法?

    ​    ​令牌桶演算法是網路流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一種演算法。典型情況下,令牌桶演算法用來控制傳送到網路上的資料的數目,並允許突發資料的傳送。

    ​    ​令牌桶:網路裝置中的內部儲存池

    ​    ​令牌:給定速率填充令牌桶的虛擬資訊包

    ​    ​通俗的理解,令牌桶是一個水桶,而令牌是通過一根水管流到水桶中的水

    ​    ​令牌桶的填滿時間,是由桶的自身容量、令牌漏出速率(桶下面的水管)、超過平均速率的突發流量持續的時間三個方面共同決定的。如果突發流量的時間比較短,令牌桶不會溢位,在通訊流上不會受到影響,如果突發流量比較大,時間比較長,那令牌桶就會溢位,多餘的通訊流就會被限制。

    ​    

        ​什麼是漏桶演算法?

    ​    ​主要目的是控制資料注入到網路的速率,平滑網路上的突發流量。漏桶演算法提供了一種機制,通過它,突發流量可以被整形以便為網路提供一個穩定的流量。

    ​  

        ​令牌桶演算法和漏桶演算法的區別在哪裡?

    ​    ​主要區別在於“漏桶演算法”能夠強行限制資料的傳輸速率,而“令牌桶演算法”在能夠限制資料的平均傳輸速率外,還允許某種程度的突發傳輸。在“令牌桶演算法”中,只要令牌桶中存在令牌,那麼就允許突發地傳輸資料直到達到使用者配置的門限,因此它適合於具有突發特性的流量。

    ​  

       ​如何利用令牌桶演算法來實現網際網路系統的限流呢?

    ​    ​這裡大體YY了一下元件,大體可以分為計數器、限流器、閥值配置、閥值更新、令牌桶檢驗幾個元件。

    ​    ​計數器:實時的統計介面的呼叫速率,例如時間單位是秒,那就是一秒呼叫多少次

    ​    ​閥值配置:配置一下時間視窗(就是統計資訊和限流的時間週期,可以是1秒,也可以是1毫秒),平均速率以及突發情況下允許的最大速率

    ​    ​閥值更新:這裡為啥要單獨拿出來說一下呢,因為閥值的配置不可能是寫死的,需要實時更新,有一個元件去獲取最新的配置,然後在系統中做更新

    ​    ​限流器:當令牌桶中令牌已經無法放入,也就是溢位了,需要限流,採取怎麼樣的限流策略,需要限流器去做處理

    ​    ​令牌桶處理:需要有一個類,根據配置的時間視窗、平均速率、突發最大速率來模擬向桶中放置令牌的操作,如果溢位了,則觸發限流器做相應的操作

    ​    ​

        這裡受到的啟發是啥?

    ​    ​相當於用傳統網路流量限制中的一個演算法,來解決網際網路流量控制的一個問題,具體的實現可能有多種。這裡打開了一個思路,以前覺得網際網路中的問題是新鮮的,但是可能就是遇到的問題是相通的,也許在多年前已經有理論存在並且有實際應用了,例如傳統的一個行業中,或者一個書本中存在已久的演算法,再或者一個物流現象。

    ​    ​程式設計師也需要關注除了程式本身之外的世界,有些可能會影響到程式哦。

    ​    ​


轉自:http://iamzhongyong.iteye.com/blog/1982113