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的计算开销、堆的维护开销、更新计数器、对包的头部的处理
  • 优势主要在理论上的可靠性,节省内存

参考文献

网络测量中基于Sketch方法的简单介绍的更多相关文章

  1. 网络测量中基于Sketch方法的调查

    目录 LD Sketch SeqHash What's New reversible sketch Count-Sketch和Count-min sketch Diamond Sketch: Accu ...

  2. java中的compareto方法的详细介绍

    java中的compareto方法的详细介绍 Java Comparator接口实例讲解(抽象方法.常用静态/默认方法) 一.java中的compareto方法 1.返回参与比较的前后两个字符串的as ...

  3. DBMS_OUTPUT.PUT_LINE()方法的简单介绍

    1.最基本的DBMS_OUTPUT.PUT_LINE()方法. 随便在什么地方,只要是BEGIN和END之间,就可以使用DBMS_OUTPUT.PUT_LINE(output);然而这会有一个问题,就 ...

  4. requests库的使用、安装及方法的简单介绍

    requests库的使用.安装及方法的简单介绍 1.requests库的概述 requests库是一个简洁且简单的处理HTTP请求的第三方库,是公认的最好获得第三方信息的库. requests库更多信 ...

  5. HTTP请求方式中8种请求方法(简单介绍)

    简单介绍 HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范.HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口是动态分配的.当我们没有指定端口访问时,浏览器会 ...

  6. 车载导航应用中基于Sketch UI主题定制方案的实现

    1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式.压缩资源.插件等) 其实,针对不同的主题定制实 ...

  7. 车载导航应用中基于Sketch UI主题实现

    1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式.压缩资源.插件等) 其实,针对不同的主题定制实 ...

  8. 多线程中sleep方法,简单介绍。

    一 是什么? package com.aaa.threaddemo; /* * 多线程中的sleep方法? * sleep 隶属于Thread的方法,顾名思义,让线程睡一会. 1 public sta ...

  9. Python中的yield生成器的简单介绍

    Python yield 使用浅析(整理自:廖 雪峰, 软件工程师, HP 2012 年 11 月 22 日 ) 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关 ...

随机推荐

  1. PHP获取地址栏传的id值

    function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  2. nodejs报错 XMLHttpRequest cannot load localhost:3000/test_date/. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

    z在请求本地的时候  如果ajax的URL 前面没有http的话 就会报错 jq.js:2 XMLHttpRequest cannot load localhost:3000/test_date/. ...

  3. ThreeJS文字作为纹理贴图

    文字作为纹理贴图 From:http://www.linhongxu.com/post/view?id=222 这里可以使用canvas作为纹理贴图,Three为我们提供里CanvasTexture ...

  4. 利用PHP QR Code生成二维码(带logo)

    转自:http://www.cnblogs.com/txw1958/p/phpqrcode.html HP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示 ...

  5. js Object 的冻结、密封、扩展的相同以及不同点

    Object.freezed() 冻结 检查函数 Object.isFrozen(obj) Object.seal() 密封   检查函数 Object.isSealed(obj) Object.pr ...

  6. RHEL生命周期管理 -- Should I stay, or should I go?

    1. RHEL的支持策略是怎么样的? 标准支持(一般7年)+ 延长支持(3年) 2. 升级RHEL的好处有哪些? More advantageous to upgrade completely to ...

  7. visual studio code 输出乱码

    问题: 解决方法: 首先,这个与VS本身无关,问题是出现在windows的dos显示设置上. 如何解决这个问题? 1.打开运行,输入cmd: 2.界面顶部右键,选择默认值: 3.将437(OEM-美国 ...

  8. C#操作GridView控件

    GridView控件是一个visualStudio自带的数据控件,它可以非常快速的将数据以表格方式显示在web页面上.下面就是一个利用GridView控件进行数据绑定的小例子,内容如下: 数据来源自一 ...

  9. 【Oracle】锁表处理 SQL 错误: ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

    问题描述有时候ORACLE数据的某些表由于频繁操作,而且比较大,会导致锁表(死锁). 问题分析(1)锁的分析ORACLE里锁有以下几种模式:0:none1:null 空2:Row-S 行共享(RS): ...

  10. Apache的配置详解

    Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改. 主站点的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/s ...