1. 程式人生 > >Internet流量監管機制之漏桶演算法和令牌桶演算法

Internet流量監管機制之漏桶演算法和令牌桶演算法

        漏桶演算法和令牌桶演算法都是為了限制應用無限制的向網路注入流量而設定的演算法。兩者看似區別不大,但是如果仔細來看,是有區別的:漏桶演算法只能把應用的輸出速率限定在一個固定的速度,但是令牌桶除了在把總的輸出速率限制在一定範圍內,還能容忍一定時間的高速率突發流量。

        

        上圖為漏桶演算法的示意圖。漏桶演算法的原理是:將主機使用者程序輸出的不規則包流轉換為輸入網路的均速包流,主機和網路的介面就是一個漏桶,漏桶就是一個有限的內部佇列。

        從桶底小孔向外漏的速率恆定,一旦桶空外漏速率為0,一旦滿水就從上面溢位。也就是說,漏桶的上方的應用注入到漏桶裡面的速率是隨意的,只不過經過流量整形,輸出到網路中的速率永遠是一定的,和漏桶的底部大小有關。並且,當輸入速率大於輸出速率的時候,桶裡面會堆積,堆積的過多,當大於桶的容量之後,就會出現溢位的現象,也就是資料丟包。這也是漏桶演算法的一個缺點。它的最重要特徵是輸出速率是恆定的,這也是區別於令牌桶的根本

        令牌桶演算法:

       

        令牌桶示意圖如上所示:它的思想是,令牌桶以一定速率生成令牌,只有在令牌桶裡面有令牌時才能傳送包,每傳送一個包漏桶內的令牌數減1,令牌桶滿時新產生的令牌將被丟棄。所以當突發大量流量的時候,因為令牌桶裡面之前存有一定數量的令牌,那麼可以首先以很高的速率傳送資料包。當令牌桶裡面的令牌消耗完畢之後,它只能按照令牌生成的速率來發送剩餘的資料包了。

        比如令牌桶容量b=250KB,令牌到達速率r=2MBps,網路最大傳輸率M=25MBps。假設突發資料長為1MB,到達時令牌桶已滿,那麼令牌桶流量整形情況是怎麼樣的呢?

        首先肯定的一點是,令牌桶整形的速率首先是25MBps,之後一段時間後變成2MBps. 那麼各自花了多長時間呢? 設突發時間為s;則突發資料最大輸出為b+r · s。 可得b+r · s= M · s。 所以解得s=10.8ms。 在s秒內以25MBps的速率突發一部分,其餘的資料只能以2MBps的速率傳送,這種速率持續了T s,直到傳送結束。 那麼 T= (1-25MBps * s)/2MBps  = 364ms。輸出流量示意圖如下:


        令牌桶和漏桶演算法的區別是:令牌桶演算法可積累傳送數;桶滿時會丟失令牌而不會丟失包。但是他們都可以進行基本的流量整形,使得網路應用不至於一下子把自己的流量全都注入網路造成的嚴重的擁塞和丟包事件。

延伸閱讀

相關推薦

Internet流量監管機制演算法演算法

        漏桶演算法和令牌桶演算法都是為了限制應用無限制的向網路注入流量而設定的演算法。兩者看似區別不大,但是如果仔細來看,是有區別的:漏桶演算法只能把應用的輸出速率限定在一個固定的速度,但是令牌桶除了在把總的輸出速率限制在一定範圍內,還能容忍一定時間的高速率突發流量

介面限流演算法演算法演算法

漏桶演算法 漏桶可以看作是一個帶有常量服務時間的單伺服器佇列,如果漏桶(包快取)溢位,那麼資料包會被丟棄。這一點和執行緒池原理是很

【本人禿頂程式設計師】介面限流演算法演算法&演算法

←←←←←←←←←←←← 快,點關注! 工作中對外提供的API 介面設計都要考慮限流,如果不考慮限流,會成系統的連鎖反應,輕者響應緩慢,重者系統宕機,整個業務線崩潰,如何應對這種情況呢,我們可以對請求進行引流或者直接拒絕等操作,保持系統的可用性和穩定性,防止因流量暴增而導致的系統執行緩慢

限流演算法演算法演算法

昨天CodeReview的時候看到同時使用RateLimiter這個類用作QPS訪問限制.學習一下這個類. RateLimiter是Guava的concurrent包下的一個用於限制訪問頻率的類. 1.限流 每個API介面都是有訪問上限的,當訪問頻率或者併發量超過其承受

基於(Leaky bucket)與(Token bucket)演算法流量控制也叫過載保護

基於漏桶(Leaky bucket)與令牌桶(Token bucket)演算法的流量控制 Congestion Control Algorithm,這是TCP裡的一個專業術語,擁塞控制演算法。說的也是流量控制類似的事。 老規矩,直接上圖。 先看看漏桶(Leaky bucke

演算法演算法以及流量控制淺談

 ​在雙十一等大促環節,系統需要限流,外部需要在我制定的速率限制來呼叫(超出的流量直接擋掉,系統不進行處理),有沒有理論依據呢?這裡看了兩個演算法 約定訪問速率是流量管理中比較常用的方法之一,令牌桶演算法,是目前最常用的流量限制的方法。     ​        

流量限制--演算法流量整形演算法

流量整形 流量整形(traffic shaping)典型作用是限制流出某一網路的某一連線的流量與突發,使這類報文以比較均勻的速度向外傳送。流量整形通常使用緩衝區和令牌桶來完成,當報文的傳送速度過快時,首先在緩衝區進行快取,在令牌桶的控制下再均勻地傳送這些被緩衝的文。

nginx 限流配置 演算法 演算法

令牌桶演算法 演算法思想是: 令牌以固定速率產生,並快取到令牌桶中; 令牌桶放滿時,多餘的令牌被丟棄; 請求要消耗等比例的令牌才能被處理; 令牌不夠時,請求被快取。 漏桶演算法 演算法思想是: 水(請求)從上方倒入水桶,從水桶下方流出

介面限流演算法演算法&演算法

工作中對外提供的API 介面設計都要考慮限流,如果不考慮限流,會成系統的連鎖反應,輕者響應緩慢,重者系統宕機,整個業務線崩潰,如何應對這種情況呢,我們可以對請求進行引流或者直接拒絕等操作,保持系統的可用性和穩定性,防止因流量暴增而導致的系統執行緩慢或宕機。 在

限流演算法

一、令牌桶演算法和漏桶演算法1、漏桶演算法,有一個固定大小的桶,桶中的流量按照固定的速率流出,此時若有流量流入桶中,如果流入的速率比流出的速率大,則可能導致超過桶大小的流量溢位。2、令牌演算法,有一個固定大小的桶,按照一定的速率往桶中放入令牌,如果令牌超過桶大小則會溢位,此時

php 基於redis使用演算法實現流量控制

本文介紹php基於redis,使用令牌桶演算法,實現訪問流量的控制,提供完整演算法說明及演示例項,方便大家學習使用。 每當國內長假期或重要節日時,國內的景區或地鐵都會人山人海,導致負載過大,部分則會採用限流措施,限制進入的人數,當區內人數降低到一定值,再允

Guava學習計劃-Semaphore—RateLimiter-演算法-演算法

java中對於生產者消費者模型,或者小米手機營銷 1分鐘賣多少臺手機等都存在限流的思想在裡面。 關於限流 目前存在兩大類,從執行緒個數(jdk1.5 Semaphore)和RateLimiter速率(guava) Semaphore:從執行緒個數限流 RateLimite

python演算法

import time class TokenBucket(object): # rate是令牌發放速度,capacity是桶的大小 def __init__(self, rate, capacity): self._rate = rate self

Token Bucket 演算法

令牌桶演算法是網路流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一種演算法。典型情況下,令牌桶演算法用來控制傳送到網路上的資料的數目,並允許突發資料的傳送。 令牌桶這種控制機制基於令牌桶中是否存在令牌來指示什麼時候可以傳送流量。令牌桶中的每一個令牌

演算法總結

昨天CodeReview的時候看到同時使用RateLimiter這個類用作QPS訪問限制.學習一下這個類. RateLimiter是Guava的concurrent包下的一個用於限制訪問頻率的類. 1.限流 每個API介面都是有訪問上限的,當訪問頻率或者併發量超過其承受範圍時候,我們就必須考慮限流來

垃圾回收判斷物件否需要被回收(根搜尋演算法引用搜索演算法

根搜尋演算法(JAVA的虛擬機器用的是這個) 可以參考這個 http://blog.csdn.net/qq_15022971/article/details/79162126 引用搜索演算法:是常被初學JAVA者誤解,java的垃圾回收在判斷一個物件是否為可以被回收的物件時,常被誤以為

關於Guava中演算法RateLimiter的理解

      我們系統現在架構是收到mq訊息,先放到redis佇列,然後再從redis佇列取任務去消費,當上遊刷資料的時候,redis佇列任務就會非常多,這個時候我們在消費的時候既要考慮redis的穩定性,也要考慮呼叫下游資源所能提供資源能力。對於資源受限、處理能力不是很強的

JAVA多執行緒機制暫停、恢復停止

在JDK1.2以前的版本如果要實現執行緒的暫停、恢復和停止的方法分別是suspend()、resume()、stop()。但是從JDK1.2以後這些方法已經被遺棄,因為它們有可能造成嚴重的系統錯誤和異常。 首先suspend()方法不會釋放執行緒所佔用的資源。

Windows訊息響應機制四:PostQuitMessageGetMessage函式

 Windows是訊息驅動的作業系統。在Windows環境下程式設計必須熟練掌握Windows訊息響應機制。  今天在練習Win32程式設計時碰到一個關於GetMessage函式的問題。這個問題之前一直沒有引起過我的注意,但是今天  在網上搜索發現這個問題很多程式設計師都跟

演算法限流

今天觀看QCon大會講述了阿里線上管控體系,其中主要使用了令牌桶演算法來實現限流的目的。表示非常好奇,故此學習一下什麼是令牌桶演算法。 1. 簡介 令牌桶演算法最初來源於計算機網路。在網路傳輸資料時,為了防止網路擁塞,需限制流出網路的流量,使流量以比較均勻的速度向外傳