Sketch测量方法
文章目录
Sketch是一类被广泛应用在网络测量领域的概率数据结构,用于记录多集合或流中元素的频率或估计其基数,且Sketch通常比输入的大小要小很多。基于Sketch的测量属于被动测量通常不发送任何探测包,也不会对网络造成额外开销,Sketch使用概要对感兴趣的信息进行有效的存储和检索,从而实现对活跃流的存在及体积信息的记录。
1. 基于Sketch的流量测量
基于Sketch的流量测量的步骤
- 根据测量任务,分布式检测器获得负责的任务,并收集经过其监测点的相应流量统计信息。
- 收集器结合来自下级监测器的测量结果,并响应测量查询。
Sketch核心思想包括两个方面
- 计数器和更新设计,即对统计信息进行记录。
- 计数器组合或者Sketch架构设计。
通常基于Sketch的测量方法会采用估计计数器来替代精确计数器,以实现在减少所需的内存量与增加计数器估计中的错误概率之间得到最优的权衡。
2. Sketch基本结构
Sketch类算法之所以可以实现利用较小的内存记录待测元素,主要是以数据概要为自身的核心对象,对于数据流的处理,通常体现在流式摘要的生成上,且对于每个更新都使用相同的处理方式。
数据流的模型有:
- 时间序列模型:数据流中的流量 a i a_i ai 按照 i i i 的递增的顺序到达。
- 收款机模型:数据流中的流量以任意的顺序到达。
- 十字旋转门模型:数据流中的流量以任意的顺序到达,并且之前到达的流量可以在后面被删除。
Sketch算法设计的重点大部分都放在收款机模型和十字旋转门模型上。
Sketch基本结构通过使用固定的Sketch矩阵与数据(表示为列向量)相乘,来生成Sketch向量。
3. Sketch属性
支持查询:每个Sketch都支持某些查询。有抽样技术不同,它不能简单地执行Sketch的查询,而是需要在Sketch上执行一个特定的过程以获得特定的查询的答案或者近似答案。
大小恒定:Sketch的大小是恒定的,Sketch的大小由一个或多个参数确定。常见的情况是,用户选择参数 δ \delta δ 和 ε \varepsilon ε 来分别确定精度和超过精度界限的概率。
更新速度:当Sketch变换非常密集时,每次更新都会影响Sketch中的所有条目,所以更新时间与Sketch大小需要是线性关系。
4. Sketch初始化
如果Sketch是输入的线性变换,Sketch的初始化通常是不重要的,它初始化为全零向量,因为空输入(隐式的)也是零向量。
5. 查询时间
每个Sketch算法都有自己用来进行查询的程序。查询时间也因为Sketch而不同,在某些请款下,它与Sketch大小是线性(甚至是超线性)关系,而在其他情况下,它可以小得多。
6. Count-Min Sketch
- 最小计数型Sketch最为应用最广泛的Sketch,Count-Min Sketch是一个二维数组结构,是一种用于汇总数据流的次线性空间的数据结构。
- 允许在数据流概要中进行基本的查询:如:点查询、范围查询和内积查询。
- 同时也可以用于解决数据流中重要的难题:如查找分位数、识别大流。
- Count-Min Sketch对所有需要存储的信息都加到计数器中,同时在映射过程中存在Hash冲突。
- 估计值的误差: P ( a i ^ ≤ a i + ε ∣ ∣ a ∣ ∣ 1 ) = 1 − δ , ∣ ∣ a ∣ ∣ 1 = ∑ i = 1 n a i P(\hat{a_i} \leq a_i+ \varepsilon ||a||_1)=1-\delta,\; ||a||_1=\sum_{i=1}^{n}a_i P(ai^≤ai+ε∣∣a∣∣1)=1−δ,∣∣a∣∣1=∑i=1nai
- 元素查询的时间复杂度为: O ( l n ( 1 / δ ) ) O(ln(1/\delta)) O(ln(1/δ))
- 元素查询的空间复杂度为: O ( ( 1 / δ 2 ) l o g ( 1 / δ ) ) O((1/\delta^2)log(1/\delta)) O((1/δ2)log(1/δ))
如图:数组宽为w,深度为d,宽度和深度由参数 δ \delta δ 和 ε \varepsilon ε 确定。包含d个Hash函数,数组每个元素表示一个计数。数组的每个元素初始化为0,d个相互独立的Hash函数被均匀、随机地选择。 c o u n t [ j , h j ( i t ) ] ← c o u n t [ j , h j ( i t ) ] + c t count[j,h_j(i_t)] \leftarrow count[j,h_j(i_t)]+c_t count[j,hj(it)]←count[j,hj(it)]+ct 。
参考资料:什么是亚线性和超线性?_小怪兽会微笑的博客-CSDN博客
请问什么叫做“亚线性”,什么又叫做“超线性”?_百度知道 (baidu.com)
7. 其他Sketch测量方法
Sketch | 主要侧重点 |
---|---|
Count Sketch | 与CM Sketch类似,但每个数组都与两个Hash函数相关 |
CU Sketch | 比较计数器值与点查询返回值和更新值和的大小,判断是否要进行更新操作,通过增加比较操作减少更新次数 |
LCU Sketch | 该算法是对CU Sketch的改进,其核心思想是提前把数据流划分成多个窗口,并且设置一个阈值,在每个窗口统计结束后,将小于阈值的计数器频率值减1 |
PCM Sketch | 实现对历史记录的查询,为Sketch中的每个计数器根据时间戳维持一个离散函数,里面记录了不同时刻的计数器增量 |
CM-log Sketch | 采用对数计数器来进行流元素频率估计 |
动态CM Sketch | 动态Hash的方法,根据流元素的个数,Sketch的数量动态增长,有效解决了Hash冲突,提高了CM Sketch的精度。 |
LD-Sketch | 结合了基于计数器技术的Sketch,但是长度动态 |
Deltoid | 用来检测网络中的流量变化,找出产生较大变化的流量 |
8. Sketch的设计与优化
Sketch设计方面主要思路:
- 多层结合设计:是以一个基本单位为基础组合出多层次的Sketch,以完成不同的测量任务
- 多Sketch结合设计:通过对不同Sketch数据结构的组合,可以组成更多不同的数据结构,进一步支持各种功能。
- 滑动窗口设计:设计滑动窗口,满足对旧元素的淘汰,对新元素的接收。
Sketch优化方面主要思路:
- 优化Hash策略:1)传统方式:通过对频率进行统计。2)传统方式:通过对基数进行统计。3)机器学习、神经网络方法构造先验知识。
- 计数器优化:1)使用小计数器。2)使用虚拟寄存器。3)分层计数器共享方案。4)可变宽度计数器方案。5)内存访问时间优化。
8.1 多层次组合:
多层次组合设计,其实质就是以一个基本单位为基础组合出多层次的Sketch,以完成不同的测量任务,包括熵估计、提高准确率、可逆性需求、通用性需求等。
表1 基于多层次组合设计的Sketch
方法 | 核心部件 | 应对场景 |
---|---|---|
MRSCBF | SCBF | 应用子空间方法检测异常 |
IMP | LpSketch | 不同分辨率提高估计精度 |
Sequential Hashing | hash table | 推导OD熵 |
RCD sketch | bit array | 实现可逆功能 |
SF-sketch | CM Sketch, Count Sketch | 反转连接度大的主机 |
HashPipe | match-action | 保持一个小的传输Sketch |
SketchLearn | bit-level sketch | Heavy Hitter检测 |
Diamond sketch | atom sketches | 对偏斜的流量执行流量测量 |
8.2 基于多种Sketch组合的设计:
通过对不同Sketch数据结构的组合,可以组成更多不同的数据结构,进一步支持各种功能。
表2 基于多种Sketch组合的Sketch设计
方法 | 核心部件 | 应对场景 |
---|---|---|
Count-Min Heap | Count-Min Sketch+Heap | top-k元素查找 |
DCF | SBF+CBF | 简洁地表示多集 |
FSS | Bitmap filter+Space Saving | 最大限度地减少top-k列表更新 |
PMC | FM sketch+HitCounting | 高速链路逐流测量 |
ASketch | Filter+Sketch | 提高准确性和整体吞吐量 |
Bloom Sketch | BF+multi-levels | 高效内存计数 |
8.3 滑动窗口设计:
基于Sketch方法中,滑动窗口策略的使用,会让新元素在进入时移除旧的无用元素,因此它总是保持数据流中最近的一些元素。
滑动窗口设计 | 特点 |
---|---|
先入先出策略 | 当新元素进入时通常会驱逐最古老的元素,对处于最后w个单位时间内不同流的数量进行估计;当数据包出了窗口时,它们将从列表中被驱逐,传入的项目将在列表中更新 |
分块策略 | 通过使用分区块记录信息,sketch可以在最老的块上随机进行老化操作,在最新的块上随机进行更新操作 |
随机老化策略 | 设计的Sketch通常会保留滑动窗口中最新的W元素,并对滑动窗口模型采用了计数器共享的思想,所谓随机老化策略,就是当新元素出现时,该方法可以消除一个元素,它随机选取数组中的一个计数器,并将其减少1 |
时间自适应更新策略 | 在更新的时候使用预强调,并人为地夸大与旧元素相比的最新元素的计数;当查询的时候,应用旧元素来估计元素i在时间t的频率 |
扫描老化策略 | 在每个党员中维护多个计数器,并更新最近的计数器;采用扫描操作来删除过时的信息,即一个扫描指针重复遍历每一个bucket,滑动窗口的长度决定了扫描指针的速度。 |
8.4 Hash策略优化:
- 基于Sketch的网络测量都遵循这些不同的流向计数股则设计作为基础,分析流和计数器之间的关联规则,可以实现对Hash策略进行优化。
- 主要是对Hash策略进行优化,我们所熟知的最小计数Sketch、Bloom fiter都是对频率进行统计来制定哈希策略,通过对基数进行统计而制定哈希策略的方案,其实质就是通过计算流中不同元素的数量来提出不同的哈希策略。
- Hash策略的制定,是将流数据包引入Sketch统计信息的第一步,流和计数器之间的关联规则可以将传统的基于哈希的算法与当下基于学习的策略相结合,进而可以提高sketch算法的估计精度。
- 另外一个趋势是结合机器学习的方法增强估计,以减少碰撞误差和提高估计精度,如:结合K-means聚类和神经网络。
Hash策略优化 | 特点 |
---|---|
通过对频率进行估计 | Count-Min Sketch、Bloom Filter、CBF、Cuckoo Filter都是通过对频率进行统计来制定Hash策略,通过将传入的数据包Hash到每一个计数单元中,并在每一个计数单元中定位一个计数器,从而更新多样性或者流大小信息。 |
通过对基数进行估计 | 通过计算流中不同元素的数量,来提出不同的Hash策略,例如:Bitmap;并且该策略的空间与基数成线性关系 |
基于学习的方法 | 结合基于学习的方法来增强估计,以减少碰撞误差和提高估计精度,如结合K-means聚类和神经网络 |
8.5 计数器级别优化
- 由于片内存储器的大小有限,如果Sketch中的计数器使用大量的比特,计数器的数量就会很小,导致精度较差
- 对于Sketch结构的优化,很多研究都专注于如何优化计数器,以应对大象流和老鼠流
计数器级别优化 | 特点 |
---|---|
使用小计数器 | 使用小计数器来保持大数目的近似计数是节省空间的,因为由此产生的预期误差可以被相当精确的控制 |
使用虚拟寄存器 | 虚拟寄存器,通常用于基数估计,多用来解决DDoS、端口扫描、超级扩散等问题。通常基数估计任务可分为:寄存器共享和位共享 |
分层计数器共享方案 | 设计分层计数器共享方案来记录流量的大小,节省大象流浪费的大量高阶位,提高空间效率;将计数器组织成一个分层结构,其中较高层拥有较少的内存;低层计数器主要记录老鼠流的信息,而高层记录低层溢出的数量 |
可变宽度计数器方案 | 可变宽度计数器方案的使用,其目的是提高空间效率和估计精度,用于应付不平衡的流量测量。通常,此类方案有如下几种:计数器大小重置,Bucket扩大、位借用或位组合 |
内存访问时间优化 | 访问多个计数器需要多次内存访问和哈希计算,并且很可能成为基于Sketch的度量的瓶颈;利用词加速策略,将相应的散列计数器限制在一个或几个机器词内,并未每个插入实现接近一个内存访问 |
8.6 Open Sketch
- Open Sketch是一个基于SDN的测量框架,将原有的数据层和控制层解耦,划分为一个简单、高效的数据平面和一个定制的分析控制器。
- 由于没有预先包含较为复杂的数据结构(如:二叉树等),Open Sketch并不支持所有的流量测量任务。
8.7 Univ Mon
- Univ Mon提出一种叫Universal Sketch的通用数据结构来搭建测量框架,它借鉴了数据面和控制面分离的思想,且控制面主要用于资源配置而数据面用于执行测量任务。
- 定义了一个概念G-sum,可以看成多个Sketch数据的叠加方法,通过设置不同的G-sum函数,可以实现通用多个Sketch组合起来进行不同的测量任务。
8.8 Sketch Visor
- Sketch Visor是一个用于软件包处理的健壮的网络测量框架,它通过快速路径增强了数据平面中基于Sketch的测量,该路径在高流量负载下激活,以提供高性能的本地测量,但是精度略有下降。
- 通过压缩感知进一步恢复精确的全网测量结果。
8.9 Sketch Learn
- Sketch Learn是一个基于Sketch的测量框架,它使用一种新颖的方法来解决近似测量中的一些限制,尤其是当资源冲突时(比如多个数据流映射到同一个位置),这使得估计结果不能正确地配置资源和准确性之间的关系。
- 主要目标是支持正常的网络查询,同时还支持一些新颖的设计带来的扩展查询。
9. Sketch测量方法小结
- Sketch测量方法应用广泛,且基于Sketch测量方法的测量平台较多,扩展性较强。
- Sketch数据结构研究较多,且主要集中于研究Sketch的设计与优化上
- 在设计Sketch时,可以考虑多层设计、多种Sketch结合设计、以及较优的滑动窗口设计来应对不同的测量需求
- Hash策略的优化与计数器设计时的优化,将直接决定Sketch算法在相应测量任务中的性能。
- Sketch也可视为Bitmap、Bloom filter这两种数据结构的拓展
10. 网络数据流方法小结
- 高速网络流量测量方法大致经历了一个“报文抽样-流抽样-数据流”的发展历程。但抽样固有的误差性,无法满足高速链路的测量需求。
- 高速网络流量测量方法的主要目标时:在保证一定准确性的前提下降低所需要的处理和存储开销。
- 数据流方法具有单遍扫描、有限的计算和内存资源的特点,时高速网络流量测量的重要方法。
- Bitmap、Bloom Filter、Sketch算法最早由数据库研究领域引申入网络测量领域的数据结构,在很大程度上促进了网络数据流方法的发展。
固有的误差性,无法满足高速链路的测量需求。 - 未来研究方向侧重点:需要更适应于流量特征、需要更适应于互联网发展、需要更适应于SDN和可编程交换机、需要实现与机器学习的相结合。