实时监测流数据突变的方法

文档序号:7595750阅读:475来源:国知局
专利名称:实时监测流数据突变的方法
技术领域
本发明涉及一种流数据管理中的技术,更确切地说是涉及一种实时监测流数据突变(Burst)的方法,主要适用于对网络数据流量的监测以及网站访问量的监测,以及时发现并解决网络拥塞和网络攻击等网络中存在的故障以及安全等问题。
背景技术
区别于传统数据应用模型,流数据(Data Stream)模型具有以下四点共性(1)数据实时到达;(2)数据到达次序独立,不受应用系统所控制;(3)数据规模宏大且不能预知其最大值,例如一个公司一百年以来的股票交易信息以及流过主干网路由器上的数据等等;(4)数据一经处理,除非特意保存,否则不能够被再次取出处理,或者再次提取数据代价昂贵。监测数据的突变主要是指在数据监测的过程中捕捉一段时间内数据异常变化的行为,并进行报警,再由相应的人员或软件根据该异常信息进行对系统的维护或其他的处理。监测数据突变的技术几乎是所有数据采集、数据分析以及数据管理软件系统中的重要组成部分,其应用相当广泛。监测数据突变的方法决定了软件系统发现问题,解决问题的能力。在先技术中存在一种先进的监测数据突变的实现方案申请号为02107602.8,名为“用于突发容许过度误码率报警检测和清除的方法和设备”的发明专利。然而,该发明在监测突变方面存在以下不足1、只能使用绝对门限值静态地监测数据突变,无法动态地监测突变,因此,其发现的突变种类单一。
2、只能发现一个已定义长度时间窗口内的突变,因此,其无法及时或完全地发现当前数据的所有突变。
3、所能处理的数据量有限,即最大的时间窗口长度有限,无法处理流数据。
4、只能发现监测对象计数(Count)上的突变,而不能发现监测对象其它性质上的突变,例如平均值(Mean)的突变。
5、其突变监测方法中未提供任何抵御颠簸的方法,因而,所发现的突变并不能保证它们完全正确。

发明内容
本发明的目的在于提出一种能够动态地监测任意长度窗口的流数据突变的方法,并且该方法能够排除数据颠簸带来的干扰,以保证软件系统的执行效率、兼容性和可靠性。
本发明的技术解决方案首先,本发明对现有监测方法关于数据突变的定义进行了扩充,提出了动态地监测突变的定义。设要监测的采样数据流为序列x1,..,xn,其中任意一个值xi是第i时刻的采样值,i为时间戳,时间戳越大表明该采样值越新,x1为最早的采样值,xn为最新的采样值,n的大小不受限制,也就是该序列的长度不受限制,设相对监测门限为RTH,当RTH大于1时,即当前序列的聚集计算结果比前一个相邻的相同长度序列的聚集计算结果显著增大时,为正向突变。当RTH小于1时,即当前序列的聚集计算结果比前一个相邻的相同长度序列的聚集计算结果显著减小时,为反向突变。设要监测的序列的最大长度为j(1≤j≤n/2),并且进行的聚集计算是Sum。那么定义当Σk=n-j+1k=nxkΣk=n-2j+1k=n-jxk≥RTH(RTH>1)]]>时,当前监测的长度为j的序列发生正向突变,当Σk=n-j+1k=nxkΣk=n-2j+1k=n-jxk≤RTH(0<RTH<1)]]>时,当前监测的长度为j的序列发生反向突变。
动态监测突变与静态监测突变最大的区别是1.用相对监测门限(RTH)代替一经设置后固定不变的绝对监测门限;2.可同时监测数目不受限制的若干个不同长度的序列;3.能够分别或同时监测正向和反向突变。
其次,本发明引入了直方图(Histogram)技术,并且提供了一种新的直方图算法——倒置桶序列的直方图算法(BOIH),它能够利用很小的空间精确地压缩采样数据流x1,..,xn。用这种近似算法估计流数据的聚集,计算结果的精确度可以高达99.99%以上。该算法用到的基本数据结构叫做桶(Bucket)。算法构建的直方图就是一个桶的序列。每一个桶(bi)都是一个长度为20字节的结构体变量,用于存放采集到的单位时间内某个IP地址上的数据流量或单位时间内某个网站接收到的访问量,每一个桶中所保存的采样值的个数不受限制。其中,第1到第4个字节保存的是该桶中最小的采样值(bia)。第5到第8个字节保存的是该桶中两个相邻采样值之间差的最小值(MinD)。第9到第12个字节保存的是桶的宽度(Wid),也就是保存在该桶中的采样值的个数。第13到第16个字节保存的是该桶中两个相邻采样值之间差的最大值(MaxD)。第17到第20个字节保存的是该桶中最大的采样值(bib)。每新来一个采样值xn就运行一次该算法。设进行的聚集计算是Sum,具体算法如下
(1)当得到一个新的采样值xn,将当前桶的总数B加1,并将B的值赋给j;(2)新建一个桶,并将新来的采样值xn放入其中;(3)从i=B-1到i=1降序地,做如下操作(a)对桶bi将bia和bib分别增加xn;(b)判断bib是否大于(1+δ)bja。如果bib大于(1+δ)bja,那么j--,然后跳至第3步执行;否则,将bib的值赋给bjb,再将bi的Wid添加到bj的Wid上,假如bi的MaxD大于bj的MaxD,就用bi的MaxD替换bj的MaxD,假如bi的MinD小于bj的MinD,就用bi的MinD替换bj的MinD,最后删除bi,并将当前桶的总数B减1,然后跳至第3步执行。
按照以上算法构建的直方图中的每一个桶都具有相同的相对误差上限,即δ。因为误差的存在,所以不能保证返回值就是真实值,但可以保证所返回的值是比真实值稍大或稍小的值,它们与真实值之间的误差受到δ的影响。该数据结构提供两个对外接口,一个是BOIH.getLargerValue(windowSize),该函数能够返回一个比长度为windowSize的序列的聚集计算结果稍大的值。另一个是BOIH.getSmallerValue(windowSize),该函数返回一个比长度为windowSize的序列的聚集计算结果稍小的值。
再次,本发明分别提供了错误阳性(False Positive)和错误阴性(False Negative)流数据监测算法,分别保证100%的突变查全率(Recall)和100%的突变查准率(Precision),它们能够满足不同应用的需求。即按前述步骤完成把xn添加到直方图后,采用错误阳性和错误阴性的流数据监测算法检测突变情况。
先介绍False Positive算法,具体算法如下(1)将突变计数器burstNum置为0,并将要检测的窗口的长度windowSize置为1;(2)从windowSize=1到windowSize=n2]]>升序地,对长度为windowSize的窗口进行如下操作(a)假如要监测正向突变,则将BOIH.getLargerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getSmallerValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≥(1+RTH)(temp2-temp1),RTH>1,那么长度为windowSize的序列发生正向突变,将burstNum加1,否则,如果burstNum为0则跳至第2步执行;(b)假如要监测反向突变,则将BOIH.getSmallerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getLargerValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≤(1+RTH)(temp2-temp1),0<RTH<1,那么长度为windowSize的序列发生反向突变,将burstNum减1,否则跳至第2步执行;(3)将突变计数器burstNum的值返回。
只需对False Positive算法稍加修改就能够得到False Negative算法,具体做法是将FalsePositive算法第2步a)中对temp1的赋值改为BOIH.getSmallerValue(windowSize),对temp2赋值改为BOIH.getLargerValue(2*windowSize)。再将b)中对temp1的赋值改为BOIH.getLargerValue(windowSize),对temp2赋值改为BOIH.getSmallerValue(2*windowSize)即可。其算法如下(1)将突变计数器burstNum置为0,并将要检测的窗口的长度windowSize置为1;(2)从windowSize=1到windowSize=n2]]>升序地,对长度为windowSize的窗口进行如下操作(a)假如要监测正向突变,则将BOIH.getSmallerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getLargerValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≥(1+RTH)(temp2-temp1),RTH>1,那么长度为windowSize的序列发生正向突变,将burstNum加1,否则,如果burstNum为0则跳至第2步执行;(b)假如要监测反向突变,则将BOIH.getLargerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getSmallerValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≤(1+RTH)(temp2-temp1),0<RTH<1,那么长度为windowSize的序列发生反向突变,将burstNum减1,否则跳至第2步执行;(3)将突变计数器burstNum的值返回。
现有方法在较大窗口上检测到的突变往往在较小的窗口上并不是突变,这是由多个连续的颠簸所导致的,颠簸是相对正常数据较为突出,但又没有达到突变程度的数据。本发明考虑到了数据颠簸给突变监测带来的影响,提供了排除颠簸干扰的机制,并分别将其集成到上面两个流数据监测算法中,具体做法如False Positive算法第2步a)和b)中,在从小到大顺序检测不同长度的序列时,如果遇到一个长度为windowSize的序列没有发生突变,那么将不再继续检测长度为windowSize+1及更长的序列。
在我们的方法架构中,数据结构的维护以及算法的执行不需要考虑终端用户的行为,因此系统可以最大限度地进行执行效率的优化;我们的方法架构对数据的特性没有任何要求,能够处理任何分布的数据,因此提高了软件系统的兼容性;压缩的数据结构所占的空间与数据量的大小是次线性的关系,因此当面临庞大的数据时,数据结构的空间开销依然很小,这为软件系统的可靠性提供了保障。
本发明的优点和技术上的进步1、能够自适应地监测数据突变。
2、能够同时监测任意多个不同时间长度窗口内的突变。
3、能够处理流数据这样庞大的数据量,其最大时间窗口长度没有限制。
4、能够监测对象的聚集(Aggregation)计算结果上的突变,因此,可以发现对象的突变种类,包括计数(Count)、平均值(Mean)、求和(Sum)、中值(Median)、最大值(Max)、最小值(Min)等。
5、能够在监测突变的同时,排除数据颠簸对监测结果的影响。
6、为软件系统的执行效率、兼容性和可靠性提供了保障。


图1现有直方图算法构建的桶序列示意图。
图2本发明提供的直方图算法构建的桶序列示意图。
图3本发明提供的桶的结构组成示意图。
图4本发明提供的直方图算法流程图。
图5本发明提供的突变检测算法流程图。
图6本发明提供的实时监测流数据突变方法的模型结构示意图。
图7数据颠簸示意图。
图8本发明提供的实时监测流数据突变方法的性能测试图。
具体实施例方式
本发明的方法采用以下的用户可配置参数变量相对监测门限(RTH),每一个桶的最大相对误差上限(δ)。当RTH大于1时,监测具有上升趋势的正向突变,当RTH小于1时,监测具有下降趋势的反向突变,也可设置两个RTH以同时监测这两种突变。可监测的采样序列长度变化连续,其数量的上限不受限制,即监测时基不受限制。可以同时监测从最小采样时间到信号总的持续时间范围内所有长度的时间窗,每个时间窗长度的递增为最小采样时间。
参见图1图中所示为现有直方图算法构建出的桶序列,沿时间轴10的方向为接近当前时间的方向,可见沿此方向桶的宽度越来越大,最早构建的桶编号为桶1,最新构建的桶编号为桶n,桶I是从桶1到桶n中任意一个桶的编号。
参见图2图中所示为本发明的直方图算法(BOIH)构建出的桶序列,沿时间轴20的方向为接近当前时间的方向,可见沿此方向桶的宽度越来越小,最早构建的桶编号为桶1,最新构建的桶编号为桶n,桶I是从桶1到桶n中任意一个桶的编号。
参见图3图中所示为本发明的直方图算法(BOIH)中桶的结构组成,其中,第1到第4个字节保存的是该桶中最小的采样值(bia)。第5到第8个字节保存的是该桶中两个相邻采样值之间差的最小值(MinD)。第9到第12个字节保存的是桶的宽度(Wid),也就是保存在该桶中的采样值的个数。第13到第16个字节保存的是该桶中两个相邻采样值之间差(MaxD)的最大值。第17到第20个字节保存的是该桶中最大的采样值(bib)。
参见图7图中所示为数据颠簸在较大长度的时间窗口上会导致不真实的突变。设要监测的聚集函数是Sum,RTH=1.1。从(a)中可以看到在长度为1的窗口上,x4和x6都是颠簸。从(b)中可以看到在长度为2的窗口上,(x3+x4)=39.5>RTH(x1+x2)=1.1*30,因此颠簸x4到来时导致该长度的窗口发生不真实的突变。从(c)中可以看到当颠簸x6到来时,在长度为3的窗口上会检测到错误的突变。
参见图8图中(a)所示为本发明提供的实时监测流数据突变方法的监测精度。可以看到δ越小,精度越高。当δ≤0.01时,在各种RTH设置下的监测精度都可以高达99.9%以上。图中(b)所示为本发明提供的实时监测流数据突变方法的空间开销,可以看到δ越大,所需空间越小。图中(c)所示为本发明提供的实时监测流数据突变方法的处理时间。以上性能测试所用的数据集取自http://ita.ee.lbl.gov上的真实数据集(WorldCup98)。算法都采用Microsoft Visual C++6.0实现。测试的硬件环境是一台CPU为2.4GHz,256M内存的DellPC。
以下结合

检测突变的过程。
实施例1.设置RTH为大于1的值,只检测正向突变。设置RTH=1.1,δ=0.01。首先按照图4所示的算法构建直方图。具体步骤如下当得到一个新的采样值xn,将当前桶的总数B加1,并将B的值赋给j。新建一个桶,并将新来的采样值xn放入其中。从i=B-1到i=1降序地,做如下操作对桶bi将bia和bib分别增加xn。判断bib是否大于(1+δ)bja。如果bib大于(1+δ)bja,那么j--;否则,将bib的值赋给bjb,再将bi的Wid添加到bj的Wid上,假如bi的MaxD大于bj的MaxD就用bi的MaxD替换bj的MaxD,假如bi的MinD小于bj的MinD就用bi的MinD替换bj的MinD,最后删除bi,并将当前桶的总数B减1,然后j--。当完成把一个xn添加到直方图中的工作后,接下来按照图5所示的算法检测突变,具体步骤如下首先将突变计数器burstNum置为0,并将要检测的窗口的长度windowSize置为1。接下来从windowSize=1到windowSize=n2]]>升序地,对长度为windowSize的窗口进行检测,将BOIH.getLargerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getSmallerValue(2*windowSize)的返回值赋给临时变量temp2。如果有temp2≥(1+RTH)(temp2-temp1),那么长度为windowSize的序列发生正向突变,将burstNum加1,否则将突变计数器burstNum的值返回。返回值为正数表示有正向突变。至此,xn到来后的突变检测工作就已经完成了。如果检测到突变则将发生突变的具体窗口大小及发生突变的窗口数目报告给用户,提醒用户有异常行为出现。
实施例2.设置RTH为小于1的值,只检测反向突变。设置RTH=0.5,δ=0.01。如实施例1中,先将新来的值xn添加到直方图中。然后按照图5所示的算法检测突变,具体步骤如下首先将突变计数器burstNum置为0,并将要检测的窗口的长度windowSize置为1。接下来从windowSize=1到windowSize=n2]]>升序地,对长度为windowSize的窗口进行检测。将BOIH.getSmallerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getLargerValue(2*windowSize)的返回值赋给临时变量temp2。如果有temp2≤(1+RTH)(temp2-temp1),那么长度为windowSize的序列发生反向突变,将burstNum减1,否则将突变计数器burstNum的值返回。返回值为负数表示有反向突变。至此,xn到来后的突变检测工作就已经完成了。如果检测到突变则将发生突变的具体窗口大小及发生突变的窗口数目报告给用户,提醒用户有异常行为出现。
实施例3.设置RTH1为小于1的值,RTH2为大于1的值,同时检测正向突变和反向突变。设置RTH1=0.5,RTH2=1.1,δ=0.01。如实施例1中,先将新来的值xn添加到直方图中。然后按照图5所示的算法检测突变,具体步骤如下首先将突变计数器burstNum置为0,并将要检测的窗口的长度windowSize置为1。接下来从windowSize=1到windowSize=n2]]>升序地,对长度为windowSize的窗口进行以下两步操作第一步,假如要监测正向突变,则将BOIH.getLargerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getSmallerValue(2*windowSize)的返回值赋给临时变量temp2。如果有temp2≥(1+RTH2)(temp2-temp1),RTH2>1,那么长度为windowSize的序列发生正向突变,将burstNum加1,否则如果burstNum不为0的话将突变计数器burstNum的值返回。第二步,假如要监测反向突变,则将BOIH.getSmallerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getLargerValue(2*windowSize)的返回值赋给临时变量temp2。如果有temp2≤(1+RTH1)(temp2-temp1),0<RTH1<1,那么长度为windowSize的序列发生反向突变,将burstNum减1,否则将突变计数器burstNum的值返回。返回值为正数表示有正向突变,返回值为负数表示有反向突变。至此,xn到来后的突变检测工作就已经完成了。如果检测到突变则将发生突变的具体窗口大小及发生突变的窗口数目报告给用户,提醒用户有异常行为出现。
权利要求
1.一种实时监测流数据突变的方法,其特征在于具体步骤如下设要监测的采样数据流为序列x1,..,xn,其中任意一个值xi是第i时刻的采样值,i为时间戳,x1为最早的采样值,xn为最新的采样值,n的大小不受限制,设相对监测门限为RTH,当RTH大于1时,为正向突变,当RTH小于1时,为反向突变;设要监测的序列的最大长度为j(1≤j≤n/2),并且进行的聚集计算是Sum,那么定义当Σk=n-j+1k=nxkΣk=n-2j+1k=n-jxk≥RTH(RTH>1)]]>时,当前监测的长度为j的序列发生正向突变,当Σk=n-j+1k=nxkΣk=n-2j+1k=n-jxk≤RTH(0<RTH<1)]]>时,当前监测的长度为j的序列发生反向突变;(2)对于每个新来的采样值xn,采用倒置桶序列的直方图算法(记为BOIH)进行聚集计算,其步骤为①当得到一个新的采样值xn,将当前桶的总数B加1,并将B的值赋给j;②新建一个桶,并将新来的采样值xn放入其中;③从i=B-1到i=1降序地,做如下操作(a)对桶bi将bia和bib分别增加xn;(b)判断bib是否大于(1+δ)bja,如果bib大于(1+δ)bja,那么j--,然后跳至第3步执行;否则,将bib的值赋给bjb,再将bi的Wid添加到bi的Wid上,假如bi的MaxD大于bj的MaxD,就用bi的MaxD替换bj的MaxD,假如bi的MinD小于bj的MinD,就用bi的MinD替换bj的MinD,最后删除bi,并将当前桶的总数B减1,然后跳至第3步执行;其中,bi为桶,bia为bi中最小采样值,bib为bi中最大采样值,MaxD为桶中两个相邻采样值之差的最大值,MinD为桶中两个相邻采样值之差的最小值,δ为桶中相对误差上限;(3)按上述步骤完成把xn添加到直方图后,采用错误阳性和错误阴性的流数据监测算法,检测突变情况;其中,错误阳性算法如下①将突变计数器burstNum置为0,并将要检测的窗口的长度windowSize置为1;②从windowSize=1到windowSize=n2]]>升序地,对长度为windowSize的窗口进行如下操作(a)假如要监测正向突变,则将BOIH.getLargerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getSmallerValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≥(1+RTH)(temp2-temp1),RTH>1,那么长度为windowSize的序列发生正向突变,将burstNum加1,否则,如果burstNum为0则跳至第4步执行;(b)假如要监测反向突变,则将BOIH.getSmallerValue(windowSize)的返回值赋给临时变量temp1,将BOIH.getLargerValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≤(1+RTH)(temp2-temp1),0<RTH<1,那么长度为windowSize的序列发生反向突变,将burstNum减1,否则跳至第4步执行;③将突变计数器burstNum的值返回;错误阴性的算法如下①将突变计数器burstNum置为0,并将要检测的窗口的长度windowSize置为1;②从windowSize=1到windowSize=n2]]>升序地,对长度为windowSize的窗口进行如下操作(a)假如要监测正向突变,则将BOIH.getSmallerValue(windowSize)的返回值赋给临时变量temp4,将BOIH.getLargerValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≥(1+RTH)(temp2-temp1),RTH>1,那么长度为windowSize的序列发生正向突变,将burstNum加1,否则,如果burstNum为0则跳至第2步执行;(b)假如要监测反向突变,则将BOIH.getLargerValue(windowSize)的返回值赋给临时变量temp4,将BOIH.getSmallValue(2*windowSize)的返回值赋给临时变量temp2;如果有temp2≤(1+RTH)(temp2-temp1),0<RTH<1,那么长度为windowSize的序列发生反向突变,将burstNum减1,否则跳至第2步执行;③将突变计数器burstNum的值返回。
全文摘要
本发明为一种实时监测数据突变的方法。该方法首先对现有监测方法关于数据突变的定义进行了扩充,提出了动态地监测突变的定义;其次,引入了倒置桶序列的直方图算法(BOIH),利用很小的空间精确地压缩采样数据流x1,x2…xn;当把xn添加到直方图后,采用错误阳性和错误阴性的流数据监测算法检测突变情况。本发明方法能够实现自适应地监测数据突变,而且能同时监测任意多个不同时间长度窗口内的突变,并可排除数据颠簸对监测结果的影响,为提高软件系统的执行效率,兼容性和可靠性提供了保障。
文档编号H04L12/26GK1588893SQ200410066238
公开日2005年3月2日 申请日期2004年9月9日 优先权日2004年9月9日
发明者秦首科, 周傲英 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1