網絡測量中基於Sketch方法的簡單介紹

Sketch介紹

爲何要用Sketch

  • 網絡流主要根據五元組、主機地址、包的大小來分類。在網絡中存在各類各樣的包,若是按照上述分類方法,對每一種包都分配一個計數器來儲存,雖然測量準確,那麼存放計數器的空間開銷會很是大。因此使用哈希的方法,根據哈希值的範圍來肯定的所需的存儲空間,各類包根據哈希值再次歸類,能夠大大減小存儲空間。這樣使用哈希來估計流的方法稱爲Sketch-based方法。

Count-min sketch

如何處理包

  • 使用哈希的方法會產生衝突,多個種類的包哈希到同一個桶內,那麼這個桶的計數值就會偏大,爲了減小偏差,設計了count-min sketch
  • 設置多個哈希函數,開闢一個二維地址空間,包通過不一樣哈希函數的處理,獲得對應的哈希值,而這個哈希值就是sketch(概要)。這些哈希值可能產生衝突,多個種類的包可能有相同的哈希值,則根據哈希值來肯定包出現的次數則會偏大,因此設立多個哈希函數,取最小的哈希值,則最接近實際包數據。

count-min sketch 某種實現

class CountMinSketch {
    long estimators[][] = new long[d][w]    // d and w are design parameters
    long a[] = new long[d]
    long b[] = new long[d]
    long p      // hashing parameter, a prime number. For example 2^31-1
 
    void initializeHashes() {  //初始化hash函數family,不一樣的hash函數中a,b參數不一樣
        for(i = 0; i < d; i++) {
            a[i] = random(p)    // random in range 1..p
            b[i] = random(p)
        }
    }
 
    void add(value) {
        for(i = 0; i < d; i++)
            estimators[i][ hash(value, i) ]++ //簡單的對每一個bucket經行疊加
    }
 
    long estimateFrequency(value) {
        long minimum = MAX_VALUE
        for(i = 0; i < d; i++)
            minimum = min(  //取出最小的估計值
                minimum,
                estimators[i][ hash(value, i) ]
            )
        return minimum
    }
 
    hash(value, i) {
        return ((a[i] * value + b[i]) mod p) mod w  //hash函數,a,b參數會變化
    }
}

Count-min sketch分析

  • 優勢:
  1. 空間利用率和1/ε成比例(從1/ε^2降到1/ε);
  2. 亞線性的更新時間
  3. 只須要構建相互獨立的哈希函數,簡單方便部署
  4. 這個sketch能夠應用於多種應用和查詢
  5. 全部常量都是精細且小的
  • 缺點: 對於大量重複的element或top的element比較準確,但對於較少出現的element準確度比較差

現有方法及其改進

  • 現有sketch方法大可能是針對某個特定問題的求解,不具備廣泛性
  • SketchVisor能夠選擇多種sketch方法以應對不一樣種類的問題,對於過載流量,則將它導入fast path

sketch的優缺點

  • 瓶頸:hash的計算開銷和堆的維護開銷,更新計數器和對包的頭部的處理
  • 優點:節省內存,理論上的可靠性

經過哈希函數的設置、減小開銷html

sketch檢測大流

  • 對流的大小設定一個閾值,當超過這個閾值時,報出大流。可是這個閾值一般是不可預知的,爲了防止誤報,須要檢測全部可能出現的流大小,以肯定這個閾值。因爲須要檢測的流很是多,因此在肯定閾值上要花費不少時間。

總結

  • Sketch是使用哈希來進行估計網絡流的一種測量方法,能夠減小存儲開銷
  • Count-Min Sketch取多個哈希函數的最小哈希值做爲網絡流的估計,實現簡單,空間開銷較少
  • SketchVisor能夠選擇多種sketch方法以應對不一樣種類的問題,對於過載流量,則將它導入Fast path
  • 瓶頸主要在hash的計算開銷、堆的維護開銷、更新計數器、對包的頭部的處理
  • 優點主要在理論上的可靠性,節省內存

參考文獻

相關文章
相關標籤/搜索