1. 程式人生 > >網絡測量中基於Sketch方法的簡單介紹

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

cnblogs 地址空間 ket ++ 分類 hash 分配 num ati

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的計算開銷和堆的維護開銷,更新計數器和對包的頭部的處理
  • 優勢:節省內存,理論上的可靠性

通過哈希函數的設置、減少開銷

sketch檢測大流

  • 對流的大小設定一個閾值,當超過這個閾值時,報出大流。但是這個閾值通常是不可預知的,為了防止誤報,需要檢測所有可能出現的流大小,以確定這個閾值。由於需要檢測的流非常多,所以在確定閾值上要花費很多時間。

總結

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

參考文獻

  • https://www.cnblogs.com/fxjwind/p/3289221.html
  • SketchVisor: Robust Network Measurement for Software Packet Processing
  • An improved data stream summary: the count-min sketch and its applications

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