云计算环境下服务故障模型动态建立
2022-05-09段敏慧
段敏慧,姜 瑛
(云南省计算机技术应用重点实验室,昆明 650500)
(昆明理工大学 信息工程与自动化学院,昆明 650500)
1 引 言
当前,云计算环境聚集了大量的物理和虚拟资源,并提供基础架构即服务(Infrastructure-as-a-Service,IaaS)、平台即服务(Platform-as-a-Service,PaaS)、软件即服务(Software-as-a-Service,SaaS)等多个层次的服务[1].云计算服务的部署模式越来越趋于成熟,已经广泛应用于诸多领域,成为当前信息技术产业发展和应用创新的热点[2].但是,部署规模不断扩大的同时也带来了很多问题.例如云计算系统是由成千上万云资源节点构成的一个大规模复杂系统,由于物理机内部元件故障、链路故障以及系统过载等因素,通常难以保证每个计算节点都能够无故障地连续工作[3].云系统的复杂特征增加了云故障发生的可能性,且云故障的出现会直接影响访问相关资源的用户,从而造成巨大的损失[4].另外,服务的组件众多且依赖关系复杂将增加故障发生的概率,特别是当其中一个服务组件出现故障时,故障的影响会随着模块间的相互调用并不断扩散,最终导致服务质量下降或违约[5].因此,故障产生时若不能及时有效地识别并处理,不仅会影响系统的正常运行,而且会大大降低服务运行的质量.
由于故障模型在故障识别和诊断等方面表现出了强大的优势,逐渐成为当前研究的热点.故障模型是一种逻辑模型,不仅能够反映实际的物理故障,而且还能反映某一故障产生时服务运行的状况.因此,建立故障模型将有助于提高故障识别和诊断的效率,并能通过识别和诊断结果辅助系统管理员有效地处理故障,使系统保持在一个相对稳定的状态[6].然而,若建立的故障模型无法真实地体现动态出现的各类故障,则不利于故障的识别、诊断与处理.因此,建立有效的云计算环境下服务故障模型是一个亟待解决的问题.
2 相关工作
针对故障模型的建立方法,国内外学者已开展了大量研究.根据故障间的层次关系,部分研究人员开展了基于静态层级树形结构的故障建模.钮鑫涛等人提出了一种基于元组关系树的方法,该方法首先根据配置组合之间的关系来关联所有组合并形成树状结构,然后基于元组关系树提出了4种选择策略来发现故障源并辅助故障定位[7].王磊等人在传统诊断模型的基础上加入了保护启动信息以及电网拓扑元素来描述故障,通过保护启动信息、保护出口动作信息以及断路器跳闸信息构建了基于输电网故障的与或树诊断模型[8].Butoi A等人提出了一种基于故障树的服务可用性模型,首先从日志中提取事件抽象的模型来评估服务的可靠性,其次采用复制或实时迁移过程来维持服务的可用性,保证服务的健康运行[9].针对不同工作状态下难以建立通用的故障诊断模型的情况,姜天天等人提出了一种基于加权模糊神经Petri网的微网故障诊断模型,该诊断模型基于层次结构的Petri网构建并通过模糊神经网络训练具体参数用于故障诊断[10].刘诚诚等人将云计算故障分为IaaS层云故障、PaaS层云故障和SaaS层云故障,并根据各层的架构、组件对云计算故障进一步划分,搭建了一个3层结构的云计算故障检测模型[11].李春茂等人利用邻域粗糙集知识按属性重要度大小获取最小故障特征信息集,基于所建的分级故障诊断模型及二分类支持向量机分类器,利用最小故障特征信息集进行多级故障诊断[12].
由于不同故障与故障特征间具有内在的关联关系,张顺利等人提到网络虚拟化环境下,底层网络的透明性造成虚拟网提供商不能诊断所有的虚拟网服务故障,为解决此问题提出了一种基于映射关系的服务故障传播模型,通过将传播模型简化为一个二分贝叶斯网络传播模型来辅助故障的诊断[13].Wu等人分析了业务应用和网络设备的特点和相关性,提出了一种面向业务的网络管理模型,首先,通过分析业务与网络资源的依赖关系和网络资源本身的特点,建立了网络管理资源的体系结构,然后根据报警与故障之间的关系建立了二部图故障传播模型,最后通过分析故障产生的症状实现故障的定位[14].张继军等人对Petri网进行了扩展,提出了一种带输入输出的故障检测Petri网模型,通过该模型反映故障传播的固有特征以及表现形式,实现故障的检测和定位[15].梁潇等人结合专家知识和真实数据的挖掘方法找出了故障特征、故障类型和故障原因间的内在联系,搭建了一个网状的故障诊断模型,并通过该模型进行故障的推理诊断[16].王金鑫等人按照故障类型将润滑系统故障诊断任务分解为各类故障的诊断子任务,对于各子任务,利用故障树模型分析故障与征兆及多故障间的耦合关系,并通过故障树向贝叶斯网络的转化建立润滑系统的贝叶斯网络模型[17].Amira Chouchane等人设计了一种有效的诊断技术,首先根据标签Petri网建立离散事件系统模型,然后通过故障模型建立与每个故障转移相关的一组解析冗余关系来实现故障的检测和定位[18].田野等人通过历史故障库和专家经验搭建了一个网结构的蒸渗仪故障诊断模型,通过将异常数据特征输入到故障诊断模型中获得故障原因的概率分布及故障诊断结果[19].
在系统运行过程中,故障是动态产生的.然而,基于历史经验构建的故障模型无法体现动态出现的新故障.为了能够及时有效地识别和诊断动态变化的各类故障,黄大荣等人建立了一种基于客观熵权的电力变压器故障信息模式识别及诊断模型,首先引入信息熵对所含信息进行精确量化,建立基于距离及投影的故障模式判别函数,然后根据已有故障来判别新故障样本所属的类别得到故障模式类心向量,最后利用基于类心距离方式实现故障的持续诊断[20].刘政提出采用动态故障树的技术来描述和分析复杂分布式系统故障之间的内在关联关系、时序关系,并建立了动态的故障树模型,实现了基于动态故障树的复杂分布式系统故障检测系统,有利于复杂分布式系统故障建模和故障知识积累[21].高伟鹏提出了基于层级树形结构及深度神经网络的故障建模方法,通过故障模型对采集处理后的实时数据判断是否有组件或者服务发生异常情况并给出检测结果,最后按照检测结果用实时数据动态自适应更新故障模型[22].Yu等人提出了一种基于时频特征矩阵和元学习的多标签卷积神经网络故障诊断模型,首先提取在故障诊断中比较敏感的特征,然后采用多标签卷积神经网络方法实现对新故障类别的持续识别和诊断[23].
在上述研究中,部分研究针对静态故障模型的不足提出了相应的动态故障模型.例如,文献[20-23]通过分析故障与故障间的关联关系,对当前出现的故障进行识别与诊断,并基于诊断结果动态更新故障模型.但是,这些故障模型只关注了故障,而忽略了故障特征的分析与处理,未动态关联故障与故障特征.在系统运行的过程中,故障特征随着故障的产生而出现,是故障的具体表现形式.例如,文献[13、16、17、19]通过静态故障模型中的故障特征识别并诊断故障,在一定程度上提高了故障识别与诊断的准确率与效率.因此,故障特征及故障与故障特征间的关联关系有助于识别和诊断故障.
针对动态故障模型中存在的问题,本文提出了一种云计算环境下服务故障模型动态建立的方法,通过持续更新服务故障与服务故障特征,构建一个动态演化的服务故障与服务故障特征间的网状结构模型来辅助服务故障的识别与诊断.
3 云计算环境下服务故障模型的动态建立
服务故障模型的质量对服务故障的准确识别和快速诊断会产生较大影响.一个高质量的服务故障模型必须尽可能全面地在模型中体现服务故障与服务故障特征,同时持续更新不断出现的服务故障与服务故障特征.此外,由于服务故障与服务故障特征之间是多对多的关联关系,该关联关系会随着服务故障与服务故障特征的动态变化而变化,因此,只有建立动态演化的服务故障模型,才能体现云计算环境下服务故障的实际情况.
在云计算环境下,为了建立动态更新的服务故障模型,首先需要对服务运行数据进行预处理,以获取有效的数据;其次,从预处理后的服务运行数据中抽取出服务故障与服务故障特征;最后,建立服务故障与服务故障特征间的关联关系,并实现服务故障模型的动态更新.云计算环境下服务故障模型动态建立的流程图如图1所示.
图1 云计算环境下服务故障模型动态建立的流程图Fig.1 Flow chart of dynamic establishment of service failure model in cloud computing environment
3.1 预处理服务运行数据
目前,在获取云计算环境下服务运行数据的过程中,会因为系统原因、人为原因或采集设备能力限制等多种主客 观原因出现缺失值[24],若不对这些缺失值进行具体分析和处理,将会影响故障模型建立的质量和效率.针对服务数据缺失的具体情况,应该采用合理的方法进行填充.由于云计算环境下服务运行数据中的大部分内容(例如CPU、内存等)均为数据型特征,因此,采用平均值填补缺失值的方法才能保持服务运行数据的完整性.处理思路为标记服务运行数据缺失值出现的位置,计算缺失值临近数据的平均值并填补到缺失值位置.
此外,大量的服务运行数据中,由于部分数据的属性之间是不独立的,保留无效的属性会降低服务故障分类的准确率.因此,本文采用方差算法,保留服务运行数据中方差值较大的属性,以获取有效的服务运行数据集.
服务运行数据预处理算法如表1所示.
表1 服务运行数据预处理算法Table 1 Service running data preprocessing algorithm
通过以上算法对服务运行数据进行预处理,可以获得有助于服务故障模型建立的有效数据.
3.2 抽取服务故障与服务故障特征
经过预处理的服务运行数据集庞大且复杂,若将所有的数据都作为服务故障模型建立的数据源,势必会降低模型构建的效率.因此,需要对服务运行数据进行筛选,将能体现服务故障的异常服务运行数据划分出来.本文根据已有服务故障的异常数据特征形式进行了多次实验,通过异常的服务运行数据的表现范围划分了正常和异常的服务运行数据阈值区间.其中,所有属性的服务运行数据正常的阈值区间为[0,70),任意一个属性的服务运行数据异常的阈值区间为[70,+∞).在确定阈值区间后,依次将预处理的服务运行数据输入到两个阈值区间进行判断,若服务运行数据属于异常区间则保留.
由于保留的异常服务运行数据集中大部分数据之间具有相同的数据特征,且都属于同一类故障,若不对这些异常的服务故障数据归类,将有可能导致服务故障模型规模急剧增大.因此,本文按照多属性下不同数据特征产生不同服务故障的方式对异常的服务运行数据进行归类.主要思想是将具有相同数据特征的异常服务运行数据归为同一个集合,并标识为一类服务故障,按此过程抽取出若干不同类型的服务故障.此外,不同的服务故障产生时会伴随出现不同的服务故障特征,需要将不同服务故障相应的若干服务故障特征进行统计并抽取.
抽取服务故障与服务故障特征算法描述如表2所示.
表2 抽取服务故障与服务故障特征算法Table 2 Algorithm for extracting service failure and service failure feature
服务故障与服务故障特征间是具有映射关系的,对于单个服务故障而言,服务故障与服务故障特征间关联关系的树状结构图如图2所示.
图2 单个服务故障与服务故障特征间关联关系树状结构图Fig.2 Tree structure diagram of the relationship between a single service failure and service failure characteristics
其中,m表示抽取出的服务故障类别总数,K表示单个服务故障下抽取的服务故障特征总数,服务故障到服务故障特征间的连线表示它们之间存在的关联关系.
通过上述过程可以抽取若干服务故障与服务故障特征,并建立了服务故障与服务故障特征间关联关系树状结构,是动态更新服务故障模型的一个重要环节.
3.3 动态关联服务故障与服务故障特征
在云计算环境下,随着服务的不断运行,会持续出现大量新的服务故障与服务故障特征,若不将这些新的服务故障与服务故障特征更新到服务故障模型中,会导致模型在识别服务故障的能力上越来越弱.因此,需要动态关联服务故障与服务故障特征.
3.3.1 服务故障与服务故障特征的持续识别
随着服务的运行,出现的服务故障将越来越多.然而在新出现的服务故障中,有部分服务故障在已有服务故障模型中并未出现.因此,需要对已有服务故障和新出现的服务故障进行区分,并将识别出的新服务故障进行类别标记.由于朴素贝叶斯分类算法适用于大多数分类问题,具有较好的健壮性和高效性[25],因此,本节采用该算法来区分新服务故障及已有服务故障.识别服务故障后,将其产生的服务故障特征与已有服务故障模型中的服务故障特征集进行匹配,识别出新服务故障特征并进行标识.
服务故障与服务故障特征的持续识别算法描述如表3所示.
表3 服务故障与服务故障特征的持续识别算法Table 3 Continuous recognition algorithm for service failure and service failure characteristics
通过上述过程,将识别出已有服务故障模型未出现过的新服务故障与服务故障特征.
3.3.2 动态更新服务故障与服务故障特征间关联关系
服务故障特征是随着服务故障的动态产生而随之出现,由于同一服务故障可能存在多个服务故障特征,同一服务故障特征有可能是多个服务故障的体现,因此,服务故障与服务故障特征之间是多对多的关系.在识别新的服务故障与服务故障特征后,需要将新的服务故障与服务故障特征及它们之间的关联关系更新到已有服务故障模型中.对3.3.1节中识别出来的已有服务故障,将其新出现的服务故障特征增加到已有服务故障模型中,同时将它们之间的关联关系更新到已有服务故障模型中;对3.3.1节中识别出来的新服务故障与服务故障特征,则将其及服务故障与服务故障特征间的关联关系增加到已有服务故障模型中.
动态更新服务故障与服务故障特征间关联关系算法描述如表4所示.
表4 动态更新服务故障与服务故障特征间关联关系算法Table 4 Dynamically update the correlation algorithm between service failure and service failure characteristics
14.end for15.将第tr棵树中的服务故障作为新故障添加到knownNet中;16. 读取第tr棵树下对应的服务故障特征NFeatureList;17. for nf=1 to NFeatureList do18. 读取整个knownNet下的服务故障特征totalList;19. for tl=1 to totalList do20. if 第tl个服务故障特征等于nf类服务故障特征 then21. 将totalList中的第tl个服务故障特征与第tr棵树下对应的服务故障建立关联;22. else 在第tr棵树中的服务故障下新建一个nf类的服务故障特征;23. end for24. end for25.end for26.return NewNet;
动态更新服务故障与服务故障特征间关联关系的网状结构图如图3所示.
图3 服务故障与服务故障特征间关联关系的网状结构图Fig.3 Network structure diagram of the relationship between service failure and service failure characteristics
其中,n表示更新后的服务故障总数,p表示更新后的服务故障特征总数,服务故障与服务故障特征间的连线表示它们之间多对多的关联关系.
此外,为了进一步提高基于服务故障模型识别与诊断服务故障的效率,本文在服务故障与服务故障特征间的关联关系上增加了条件概率,用于表示服务故障特征在服务故障发生的条件下出现的概率.假设服务故障faultn与服务故障特征featurep间有关联关系,通过公式(1)可以计算服务故障faultn与服务故障特征featurep间的条件概率P(featurep|faultn).
(1)
在识别与诊断服务故障时,如果服务故障发生并出现某种服务故障特征,可以根据服务故障模型优先查找到与该类服务故障特征有关联关系且条件概率值较大的服务故障,然后通过朴素贝叶斯分类算法给出故障识别结果.
通过动态关联服务故障与服务故障特征,使服务故障模型不断地更新,为服务故障的识别提供了先验知识,为提高服务故障识别的准确率和效率提供了支持.
4 实验及分析
本文搭建了基于Hadoop 2.7的云计算平台,使用Java语言开发了一个基于云计算环境下服务运行数据监测的原型软件进行服务运行数据的采集.采集的服务运行数据中主要包括7个属性,其含义如表5所示.
表5 服务运行数据属性表Table 5 Service running data attribute table
本文共采集服务运行数据160591条,并从160591条服务运行数据中抽取65842条异常的服务运行数据进行实验.为了验证本文方法的有效性,我们将异常的服务运行数据分为3部分,第1个25842条异常的服务运行数据作为训练集建立服务故障模型,第2个20000条及第3个20000条异常的服务运行数据均作为测试集验证服务故障模型的识别效果.实验采用故障识别准确率和故障识别效率作为评价指标,其中,故障识别准确率表示正确识别故障类别的样本数占总服务故障样本数的比率;故障识别效率表示通过故障模型识别出服务故障所花费的总时间.
4.1 实验1
本次实验将第1个25842条异常的服务运行数据按照文献[20]和本文的方法分别建立了两个服务故障模型.依据文献[20]的方法建立的服务故障模型中有9类故障,本文方法所建的服务故障模型中有9类服务故障和7类服务故障特征.在文献[20]和本文的所建的服务故障模型中,9类故障的故障内容是相同的,但文献[20]的服务故障模型中只有故障,而本文的服务故障模型中既包含故障也包含故障特征,并建立了故障与故障特征间的关联关系,同时计算了它们之间的条件概率.
4.2 实验2
本次实验将第2个20000条异常的服务运行数据输入实验1中建立的两个已有服务故障模型,分别进行服务故障识别.文献[20]主要通过服务故障模型中的故障进行故障识别,本文通过服务故障模型中的故障特征及故障进行故障识别,两个模型识别结果如表6所示.
表6 实验2故障识别结果Table 6 Fault identification resultsinexperiment 2
通过表6可以看出,在使用服务故障模型识别故障时,本文的服务故障模型在故障识别的准确率和效率上优于文献[20].
依据本文第3节的方法,在进行服务故障识别的过程中同时要完成服务故障模型的更新.实验1中建立的已有服务故障模型有9类服务故障和7类服务故障特征,实验2新识别出2类服务故障及1类服务故障特征,将这些新服务故障与服务故障特征及它们之间的关联关系更新到已有服务故障模型中,同时更新服务故障与服务故障特征间的条件概率,本文的服务故障模型更新为11类服务故障和8类服务故障特征.经过实验2后,文献[20]的方法动态扩充了服务故障的样本数据,但并未将新产生的故障更新到服务故障模型中,其服务故障模型中有9类服务故障.
4.3 实验3
本次实验将第3个20000条异常的服务运行数据输入实验2中已更新的两个服务故障模型,分别进行服务故障识别.两个模型识别结果如表7所示.
表7 实验3故障识别结果Table 7 Fault identification resultsinexperiment 3
通过表7可以看出,本文的服务故障模型在故障识别的准确率上比文献[20]高,但是,故障识别时间比文献[20]所花费的识别时间长.
经过上述服务故障识别过程,本文的服务故障模型再次进行了更新.实验2中已更新的服务故障模型有11类服务故障和8类服务故障特征,实验3新识别出1类服务故障和1类服务故障特征,并将新服务故障与服务故障特征及它们之间的关联关系更新到服务故障模型中,同时计算其条件概率值并增加到服务故障模型,本文的服务故障模型更新为12类服务故障和9类服务故障特征.经过实验3后,文献[20]的方法再次扩充了服务故障的样本数据,其服务故障模型中仍为9类服务故障.
通过实验2与实验3,得到文献[20]与本文的服务故障模型在故障识别准确率上的对比结果如图4所示.
图4 两个模型在故障识别准确率上的对比结果Fig.4 Comparison results of the accuracy of fault recognition for the two models
通过图4可以看出,随着服务的持续运行,本文采用故障特征识别故障的方法比文献[20]采用故障识别故障的方法在准确率上有明显提高.
两个模型在故障识别效率上的对比结果如图5所示.
通过图5可以看出,随着故障模型样本数量的扩充,本文所花费的故障识别时间与文献[20]所花费的故障识别时间都呈现上升趋势.本文的故障识别过程中所耗费时间更多,是由于本文的服务故障模型在持续更新的过程中增加了新服务故障、服务故障特征及相应的样本数据,故障识别过程中所花费的时间相应增多.
图5 两个模型在故障识别时间上的对比结果Fig.5 Comparison results of the time of fault recognition for the two models
综上所述,本文动态建立的服务故障模型在识别服务故障时是有效的.
4.4 实验4
故障特征是故障具体的、可观测的信息,是故障模型的重要组成部分,引入故障特征有利于故障的识别与诊断.文献[13]的服务故障传播模型和本文的服务故障模型中都使用了故障与故障特征,并通过故障模型实现故障的识别与诊断.
本次实验从160591条服务运行数据中选取了其中的20686条服务运行数据,根据文献[13]的方法建立了服务故障传播模型,该模型中共包含6类故障和7类症状;按照本文方法建立的服务故障模型共包含6类服务故障和5类服务故障特征.对比两个服务故障模型,本文的故障特征少于文献[13]的症状,这是因为文献[13]在建模过程中只对故障进行了底层映射和归并,未对症状进行处理,因此,7类症状中存在相同类别.本文在建模过程中对同类别的服务故障和服务故障特征都进行了归并,因而5类服务故障特征互不相同.
然后,从65842条异常的服务运行数据中选取其中的10000条数据,分别输入两个服务故障模型,并采用本文3.3.2节中的方法用故障特征识别故障,两个模型识别结果如表8所示.
表8 实验4第1次故障识别结果Table 8 First fault identification resultsinexperiment 4
通过表8可以看出,本文的服务故障模型与文献[13]的服务故障传播模型在准确率上相同,在故障识别时间上比文献[13]所花费的识别时间短.两个模型在故障识别的准确率和效率上都有一定的效果,说明通过故障特征能够较好地识别故障.此外,与文献[13]的服务故障传播模型相比,本文的服务故障模型中不存在相同类别的服务故障特征,在一定程度上能够提高故障识别的效率.在故障识别过程中,从10000条异常的服务运行数据中新识别出2类服务故障及1类服务故障特征,本文的服务故障模型更新为8类服务故障和6类服务故障特征,通过增加新的服务故障与服务故障特征并更新它们之间的关联关系,为故障特征识别故障提供了更多的依据.文献[13]的方法并未将新产生的故障和症状更新到服务故障传播模型中,其服务故障传播模型中仍为6类服务故障和7类服务故障特征.
最后,再次从65842条异常的服务运行数据中选取新的10000条数据,分别输入文献[13]的服务故障传播模型和本文更新后的服务故障模型进行故障的识别.两个模型识别结果如表9所示.
表9 实验4第2次故障识别结果Table 9 Second fault identification resultsinexperiment 4
通过表9可以看出,本文的服务故障模型在故障识别的准确率上比文献[13]高,故障识别时间比文献[13]所花费的识别时间短.此外,与文献[13]的服务故障传播模型相比,本文更新后的服务故障模型在辅助故障特征识别故障的准确率上有明显提升,说明动态扩充的服务故障模型比静态的服务故障模型更有利于识别故障.但是,本文在故障识别过程中花费的时间比文献[13]所花费的时间有所增多,是因为本文的服务故障模型持续增加新的服务故障与服务故障特征,识别故障的效率上会受到一定的影响.
综上所述,使用本文服务故障模型中的服务故障特征能有效识别服务故障.
5 结束语
针对动态故障模型只关注于故障及故障间的关联关系,忽略了对故障特征及故障与故障特征间关联关系的分析与处理,本文提出了一种云计算环境下服务故障模型动态建立方法.首先,对服务运行数据进行预处理,将含有缺失值的服务运行数据进行平均值填充,并通过方差算法剔除服务运行数据集中无效的属性;其次,从服务运行数据集中抽取异常的服务运行数据,将这些数据按照相同的数据特征进行归类并标注故障类别,然后从不同的服务故障中抽取服务故障特征;再次,通过识别新服务故障和服务故障特征、新服务故障与服务故障特征间关联关系并动态更新服务故障模型,实现了服务故障模型的动态建立,为服务故障的识别和诊断提供了丰富的先验知识.
实验表明,本文动态建立的服务故障模型对识别服务故障是有效的.但是,随着对服务故障模型的动态更新,服务故障与服务故障特征间的关联关系网状结构将日益复杂,在一定程度上会降低识别与诊断服务故障的效率.因此,下一步将针对提高故障识别与诊断的效率进行研究.