一种面向云计算监控系统的冗余数据过滤方法
技术领域
本发明涉及信息技术类数据管理应用领域,尤其涉及一种面向云计算监控系统的节点资源监控数据过滤方法。
背景技术
云计算将基础设施、软件或平台等资源通过互联网以按需使用、按量计费的方式为用户提供动态的、高性价比的、弹性规模可扩展的计算、存储和网络等服务。云计算是以相对集中的资源,运行分散的应用,灵活地为用户提供基础信息资源。
目前新建的云计算的数据中心规模常常较为庞大,有些云数据中心,如百度、亚马逊、阿里巴巴等构建的云数据中心,常常拥有成千上万台服务器,如此众多的服务器,给管理员带来了巨大的工作压力。而如何提高云计算的服务质量一直是云服务供应商追求的目标。为了避免违反服务水平协议,云服务提供商必须持续监控各个服务器资源的使用情况,及时发现节点故障,保证云服务的可靠性和稳定性。高效的节点资源监控机制对云平台的健康、稳定运行尤为重要,帮助管理员及时获得节点状态,有助于系统合理地配置资源,还是进行负载均衡、任务调度等的前提。
为了保证云服务的服务质量,需要对节点状态持续监控,对多方面资源的监控信息进行采集和处理。但是大规模云计算环境下海量的资源和庞大的节点数量导致产生大量的监控数据。传输如此多的监控数据不仅占用相当大的网络带宽,浪费宝贵的网路资源,容易引发网络拥塞,而且容易导致管理节点数据处理任务繁重,高负荷运行,出现性能瓶颈,甚至宕机,使得整个监控网络瘫痪。
优秀的节点资源监控系统应该在尽可能地不影响云平台稳定运行的前提下,拥有一定的监控能力,以便保证云服务的质量,因而要尽量减少占用系统资源,避免对云计算系统造成较大的监控负担。为了实现这个目标,必须对大量的监控数据进行预处理,降低监控数据管理节点更新的频率。
在许多情况下,监控数据相较于最近某次的数据并没有太大的变化,使得网络中传输着大量的冗余数据,持续不断地向管理节点传输这样重复的、价值不大的监控数据,既浪费系统资源,又没有实际意义。因而,设计一个监控数据的预处理策略将是影响监控系统性能优劣的关键因素。目前,国内外学者做了大量研究,他们通过调节监控数据的采集周期,从而降低监控数据量。然而这些方案仅专注于如何减少数据量,从而降低系统开销,但长采集周期导致许多重要的资源变化被遗漏,严重影响了监控数据的准确性,导致管理节点接收到的监控数据并不能反映真实的数据节点资源变化情况。而本发明能够很好地解决上面的问题。
发明内容
本发明目的在于解决了上述现有技术的不足,提供了一种面向云计算监控系统的冗余数据过滤方法,该方法在保证监控数据准确性的前提下,降低了网络资源开销和管理节点工作负载。
在传统的集中式模式下,管理节点监控所有的数据节点,监控系统或以轮询模式,或以心跳模式,直接传递监控数据。而本发明在此基础上做了一些改进,数据节点采集自身监控数据后,在向管理节点推送之前,对监控数据进行预处理,通过冗余数据过滤方法,识别冗余数据,从而降低数据传输频率。
本发明解决其技术问题所采用的技术方案是:一种面向云计算监控系统的冗余数据过滤方法,该方法是参考历史监控数据,动态地制定阈值,以及计算数据变化度,过滤冗余数据,从而尽可能避免推送重复数据。
方法流程:
步骤1:每个数据节点都向内存申请一个区域,创建环形缓冲区,用于存放最近五次历史数据;
步骤2:设置计时器;预定时间设为五个采集周期,防止数据节点长时间没有向管理节点推送监控数据;
步骤3:数据节点上运行的守护进程采集自身资源使用情况,获得新的监控数据;
步骤4:检查计时器是否达到预定时间,如果达到预定时间,则立即将新监控数据推送至管理节点,同时计时器置0,重新计时,并将监控数据存入缓冲区;
步骤5:守护进程访问内存中的环形缓冲区,获得最近五次监控数据;
步骤6:从五个监控数据中,提取出最近一次推送的数据,分别计算其他四个数据与它的差值,并剔除最大的差值,然后计算剩余三个差值的平均值,并向上取整,作为阈值,所述阈值T计算方法如下式所示,即:
公式1
在公式1中,N为环形缓冲区所缓存数据的个数,Vi为缓冲区第i的值,VL为最近一次推送值。式中Max函数的作用是找出缓冲区中各值与最近一次推送值的差值中最大的值。
步骤7:计算新监控数据与最近一次推送的数据之间的差值,并向下取整,作为数据变化度。变化度VD计算方法如下式所示:
公式2
其中,VM表示新的监控数据,VL表示最近一次推送值;
步骤8:比较变化度与阈值的大小,如果变化度大于阈值,说明数据变化较大,立即将该数据推送给管理节点,同时将此次数据覆盖缓冲区中时间最久的数据;否则,此次监控数据将存入缓冲区,不被推送给管理节点。
进一步的,本发明的方法是通过设定阈值,识别冗余数据,剔除重复数据,达到降低监控数据量的目的,并没有采用延长采集周期,牺牲数据实时性来减少数据推送。
进一步的,本发明的方法计算平均差值,即计算最近五个数据与最近一次推送的数据之间的差值,反映最近一段时间资源使用的变化情况,再对差值求平均值,获得平均变化度,作为阈值。
进一步的,本发明的方法是剔除历史数据中与最近一次推送数据之间差值最大的数据。当资源利用率某个时刻骤升或骤降,这使得历史数据中某个数据与最近一次推送数据相比变化较大,而根据阈值公式可知,这将导致阈值较大,从而使得许多重要的变化被忽略。因此在制定阈值时,应当剔除突变数据,避免突变值影响阈值大小。
进一步的,本发明的方法采用两次取整,即分别对阈值向上取整,及对数据变化度向下取整。当云计算系统持续稳定运行时,资源利用率极小幅变化,导致计算得到的阈值和变化度值非常接近,例如阈值为1.3,变化度为1.4。尽管该数据变化度大于阈值,理应推送该数据,但按照常规思维,该变化度实在太小,完全没有必要推送这样的数据。因此本发明分别对阈值和变化度取整,得到阈值和变化度分别为2和1,从而避免持续推送这种类型的无用监控数据。
有益效果:
1、资源开销。在大规模的云数据中心,持续监控如此众多的节点资源将产生大量的监控数据,导致浪费网络资源。而网路资源是云计算重要的资源之一,合理的监控系统应将可能地减少占用网络带宽。本方法动态地调节阈值,识别冗余数据,大大减少监控数据量,能够有效降低网络资源开销和管理节点工作负载。
2、数据准确性。数据准确性是判断监控系统优劣的重要指标之一,本发明具有较高的数据准确性,能够在降低系统开销的前提下,较为准确地描绘节点资源的使用情况。
3、响应时间。节点周期性地采集监控数据,并有选择地将数据推送至管理节点。由于过滤了冗余数据,且过滤率达50%左右,这使得网络中传输的监控数据量大大减少,因而管理节点需要处理的数据随之减少,工作负载得以降低。当节点失效时,管理节点能够及时、迅速地发现节点故障,从而保证了云服务的服务质量。
4、本发明比单纯地人为设定阈值更加合理,能够根据实际的资源使用变化情况自适应调整阈值,从而以便于合理地衡量新监控数据的变化程度。
附图说明
图1为本发明的方法流程图。
图2(a)、图2(b)为本发明的环形缓冲区数据变化示意图。
图3为本发明的推送数据与采集数据对比示意图。
具体实施方式
下面结合说明书附图对本发明创造作进一步的详细说明。
本发明所要解决的技术问题是在大规模的云计算监控环境下,实现冗余监控数据自动化过滤,减少重复数据的更新,达到降低网络资源消耗和管理节点工作负载的目的。监控系统产生大量的监控数据,然而如何在这么多的数据中识别出冗余数据,减少网络中传输的监控数据,同时保证监控数据的准确性,这是个很值得研究的方向。本发明以历史监控数据为参考,设置合理的阈值,动态地调节阈值大小,根据阈值对监控数据进行过滤,识别并丢弃冗余数据,降低向管理节点更新监控数据的频率,以减少不必要的网络开销。
如图1所示,本发明采用的是集中式监控架构,每个数据节点上运行的守护进程负责采集和预处理监控数据,从源头过滤荣誉数据。守护进程首先向内存申请一片区域,创建环形缓冲区,它的大小恒定为5,监控数据依次存入,总是覆盖五个数据中最早存入的那个数据。守护进程采集自身的资源使用情况,参考环形缓冲区内的历史数据,计算阈值和数据变化度,然后守护进程比较阈值和变化度的大小,决定是否将此次监控数据推送至管理节点。
为了方便理解本发明的技术方案,下面定义一些概念:
定义1变化度:表示当前监控数据与最近一次推送数据之间的差值。
定义2阈值:即临界值,表示当前监控数据与最近一次推送数据之间变化度的最大限度,作为是否推送监控数据的依据。
根据上述两个定义,一旦该监控数据的变化度超过阈值,则该数据被认为变化度较大,是有价值的数据,应该被推送给管理节点,及时反映节点的资源状态。反之,如果小于阈值,则该数据将被认为变化不大的冗余数据,将会被舍弃,没有必要更新,从而减少数据的传输次数。
阈值大小将影响监控系统性能:阈值过大,则导致许多重要的资源变化被遗漏,使得数据准确性降低,不能够很好地描述节点状态;而阈值设置过小,使得许多无用的监控数据被推送,虽然保证了数据的准确性,但却造成了资源浪费。因此,设计合理的阈值非常重要,将有助于平衡系统开销和监控性能。
为了制定合适的阈值,本发明引入历史监控数据。分析大量的历史数据将消耗较多的额外系统资源,且过久的历史数据并不能很好地代表最近一段时间资源使用的变化情况。因此,本发明方法选取最近五次历史数据作为参考,根据节点历史运行变化情况,从而动态地确定合适的阈值。
数据节点周期性采集自身资源使用情况,动态地制定阈值,判断新的监控数据与最近一次推送值的变化程度,以决定是否将此次数据向上层推送。另外设置计时器,一旦达到规定时间,无论监控数据变化度是否超过阈值,立即将此次数据向管理节点汇报。
本发明方法的具体实现过程包含如下步骤:
步骤1:首先每个数据节点上运行的守护进程向内存申请一个区域,创建环形缓冲区,如图1所示,设定缓冲区大小为5,存放最近五次历史数据,并标记最近一次推送值。其中,I表示新数据可插入的位置,新数据将覆盖最久的那次数据,即data1,而data3为最近一次推送值,用VL表示。
环形缓冲区的优点在于只需固定的一块内存区域,避免了内存开辟和释放的操作,大大节省时间及系统开销。
步骤2:设置计时器,避免变化度总是小于阈值,导致长时间没有向管理节点推送监控数据。设定数据推送间隔的上限为五个采集周期,初始为0。
步骤3:守护进程使用Python语言访问/proc文件系统,采集自身资源使用情况,获得新监控数据VM。守护进程首先判断计时器时间是否达到上限,如果超过上限,则立即将新监控数据推送至管理节点,同时计时器置0,将监控数据覆盖缓冲区中时间最久的数据,否则再判断缓冲区是否为空,若为空,表明这是第一次监控数据,将该值放入缓冲区,且不再向管理节点推送。
在Linux系统中,/proc是一个根文件系统下的文件夹,实际上是运行在内存中的伪文件系统。它是一种内核和内核模块用来和进程通信的机制,能够获得进程的相关信息。/proc在用户空间和内核空间之间架起一道重要的桥梁,该目录下的文件被用于收集系统和运行中内核的信息。例如/proc/cpuinfo文件中包含CPU硬件参数(频率、型号等)。
步骤4:守护进程访问环形缓冲区,获得最近五次的历史监控数据,根据公式(1)和(2)分别计算阈值T和变化度VD。
当数据节点采集到新的监控数据时,分别计算缓冲区中VL与其他数据的差值。当某个差值过大时,根据公式1可知,这将导致阈值较大,从而导致许多重要的资源变化被忽略。因此,为了避免突变值对制定阈值的影响,去掉四个差值中最大的值,计算剩下差值的平均值,并向上取整,作为阈值。然后计算新数据与最近一次推送值的差值,并向下取整,作为数据变化度。通过两次取整,避免了系统持续稳定运行,资源利用率极小幅变化时,阈值和变化度值非常接近,从而持续推送无用的监控数据。阈值T和变化度VD计算方法如下式所示:
公式1
公式2
在公式1和公式2中,N为环形缓冲区所缓存数据的个数,Vi为缓冲区第i的值,VL为最近一次推送值,VM为新的监控数据。Max函数的作用是找出缓冲区中各值与最近一次推送值的差值中最大的值,然后将其剔除,以避免异常值导致阈值过大。假如不用Max函数,虽然能够过滤更多的数据,但数据的准确性较低,推送的数据不能够反映真实的资源利用率变化。
如图2所示,简明地演示了获得新监控数据后,缓冲区数据的变化情况:假设某一时刻环形缓冲区的五个CPU利用率如图2(a)所示。从图中可以看出,除52%自身的四个监控数据中,43%与52%的差值最大,为了避免影响阈值的制定,应当忽略43%,通过阈值公式计算阈值为3。假如新的测量值为56%,那么数据变化度为4。
步骤5:比较变化度VD与阈值T的大小,如果VD>T,说明数据变化较大,立即将该数据推送给管理节点,同时将此次数据覆盖缓冲区中时间最久的数据,标记为最近一次推送值VL,将计时器置0。否则,此次监控数据将存入缓冲区,不被推送给管理节点。如图2(b)中,新数据“56%”覆盖“48%”,并用VL标记,将I指向下一个位置。
为了验证本发明的效果,进行了以下验证实验:选择CPU利用率作为测试数据,数据节点每秒采集一次自身的CPU利用率,结合历史数据,计算阈值和数据变化度,判断是否是有价值的数据。本发明共进行两次实验,这两次实验分别采集100次和160次。如表1所示,本发明方法能够大大减少监控数据的推送次数,两次实验分别推送54次和79次,减少了约50%的监控数据量,有效减轻了管理节点的工作负载,避免了网络资源白白浪费。
表1为数据采集次数与推送次数对比
图3清晰地描绘了实验一中数据节点采集到的数据与使用本方法后推送的数据之间的对比关系。从图中可以明显地看出,虽然数据节点只向管理节点推送了54次数据,只有数据采集量的一半,但能够细致地描绘出节点资源真实的变化情况,并没有漏掉许多重要的资源使用变化。这证明了本方法在过滤冗余数据,降低监控数据量方面优越的性能。