公开/公告号CN109933452A
专利类型发明专利
公开/公告日2019-06-25
原文格式PDF
申请/专利权人 中国科学院软件研究所;
申请/专利号CN201910220179.4
申请日2019-03-22
分类号G06F11/07(20060101);G06F11/30(20060101);G06F11/34(20060101);
代理机构11251 北京科迪生专利代理有限责任公司;
代理人安丽;成金玉
地址 100190 北京市海淀区中关村南四街4号
入库时间 2024-02-19 11:23:21
法律状态公告日
法律状态信息
法律状态
2020-06-19
授权
授权
2019-07-19
实质审查的生效 IPC(主分类):G06F11/07 申请日:20190322
实质审查的生效
2019-06-25
公开
公开
技术领域
本发明涉及微服务软件系统的故障诊断方法,尤其涉及一种面向异常传播的微服务智能监测方法,属于软件技术领域。
背景技术
单体式架构和SOA软件架构是软件公司普遍采用的架构形式,经过十几年的发展,软件系统已经变的异常复杂,扩展性与维护性很低,企业背负了沉重的技术债务。当今互联网竞争激烈,用户需求和市场环境时刻处于快速的变化当中,在面对当今的互联网应用时,传统软件架构形式的扩展性与灵活性明显不足,而设计、开发、测试及运维成本却显著增加。因此,微服务的概念被提出,微服务是一种将单个应用程序作为一组软件服务套件的软件架构形式,各个服务运行于独立的进程,彼此通过轻量级协议进行通信。微服务架构的特性非常适合敏捷开发与持续集成,解决了传统软件架构的痛点,获得了学术界和工业界的广泛关注与研究。
当软件系统微服务化以后,在提高维护性及灵活性的同时,却使得服务之间的依赖关系错综复杂,增加了故障发生的几率和故障带来的损失。例如在一个高流量的网站中,某个服务组件一旦发生延迟,可能导致所有应用资源被耗尽,造成所谓的雪崩效应,严重时可致整个系统瘫痪。因此有效监测系统,并快速定位故障原因是保障微服务可靠性与性能的关键技术之一。
针对微服务故障诊断的工作主要有以下几类:(1)基于度量监测的诊断方法。该方法主要是收集系统运行指标,比如CPU、内存、网络等,以此反映应用程序当前状态及一段时间内的运行趋势。如果某一度量超过预置的阀值,则表示系统出现了问题,并触发报警,然后,管理员以监测数据为依据,结合自身的经验来解决问题(Wang T,Zhang W,Ye C,Wei J,Zhong H,Huang T.FD4C:Automatic Fault Diagnosis Framework for Web Applicationsin Cloud Computing.IEEE Transactions on Systems,Man,and Cybernetics:Systems.2016,46(1):61-75;M.Farshchi,J.G.Schneider,I.Weber,and J.Grundy,“Metric selection and anomaly detection for cloud operations using log andmetric correlation analysis,”Journal of Systems and Software,2018,137,pp.531-549.);(2)基于日志的监测分析方法,日志明确地记录了系统的运行情况,便于持久化,并且可以很容易地搜索,通常是查明故障原因和支持更多业务目标的有效手段(ELK.https://www.elastic.co/);(3)基于分布式请求追踪的监测诊断方法,通过基于标注的方法获取请求的执行路径,通过对执行路径的分析或者将路径进行对比,来发现系统故障(A.Nandi,A.Mandal,S.Atreja,G.B.Dasgupta,and S.Bhattacharya,"AnomalyDetection Using Program Control Flow Graph Mining From Execution Logs,"22ndACM SIGKDD International Conference on Knowledge Discovery and Data Mining,San Francisco,California,USA,2016;T.Jia,P.Chen,L.Yang,Y.Li,F.Meng and J.Xu,"An Approach for Anomaly Diagnosis Based on Hybrid Graph Model with Logs forDistributed Services,"IEEE International Conference on Web Services,Honolulu,HI,2017,pp.25-32.)。其中基于度量、日志的监控故障诊断方式实现简单,但不能反映系统的整体状态,无法跟踪业务流,故障定位的级别通常是服务组件,在复杂的微服务交互关系中,管理员将耗费大量的时间来查找和定位问题;而基于分布式请求追踪的监测诊断方法通过日志或者植入代码的方式监测请求的轨迹作为故障诊断的参考,但是此方法监测的扩展性较低,无法做到对应用透明,也没有考虑到异常传播的问题。
发明内容
本发明的技术解决问题:克服现有技术的不足,提供一种面向微服务的高效故障诊断系统。通过对服务透明的调用监测,提高系统的扩展性,降低监测对微服务运行的影响;通过分析监测数据,实现接口级别的细粒度故障根因定位。
本发明技术解决方案:一种面向异常传播的微服务智能监测方法,实现步骤如下:
第一步,服务调用监测:基于代理技术监测服务调用信息,用多元组Ni=(requestUID,serviceUID,spanUID,parentUID,info)来记录服务调用关系,其中requestUID为请求标识符,在请求入口处生成;serviceUID为服务标识符;spanUID为服务调用span标识符;parentUID为父span标识符,如果为-1,表示当前span为根span;info包含其他信息,用多元组info=(serviceUID,startTime,endTime,duration)来表示,其中ServiceUID由服务组件和实例编号唯一标识;startTime和endTime是服务调用开始、结束时间;duration为服务调用的执行时间。基于上述监测到的服务调用信息,构建服务调用拓扑图的具体过程如下:
(1)初始阶段,拓扑图G为空,集合S中包含所收集的调用信息;
(2)从集合S中取出属于同一请求的且有调用关系的元组,将元组中的serviceUID所代表的服务实例作为点,调用关系作为有向边加入到G中,如果点或边已经存在,不重复添加;
(3)如果集合S不为空,则继续执行(2)。否则,算法结束。
第二步,异常服务检测:构建服务内接口调用次数与服务监测度量之间的关联模型,具体步骤如下:
(1)收集服务内度量的监测数据以及服务内所有接口调用次数的数据。对于某个服务S内的度量m来说,用向量
(2)基于上述数据构建Lasso回归模型,模型的自变量为通过(1)获得的服务接口调用次数构成的向量,因变量为某个度量m在时刻t的监测值。进一步构建的回归模型为:
(3)采用广义交叉验证法来选择调整参数t,广义交叉验证法的形式为:
(4)在服务运行过程中,基于Lasso回归模型对度量值进行预测,计算残差:
第三步,故障服务诊断:基于前两步得到的数据,将所有出现异常的服务根据其调用关系构建故障传播子图。在子图中,使用PageRank算法对每个服务的异常程度进行打分,具体步骤如下:
(1)初始阶段,用服务内异常度量的比例作为该服务的PR初值,P=[p0,p1,...,pn]T为多个服务的PR初值构成的列向量,其中pi为服务i中异常度量的比例;
(2)计算服务pi的PR值为
(3)如果Pk(pi)满足|Pk-Pk-1|<δ,则迭代结束。否则,继续执行(2)。
(4)根据服务的得分进行排序,认为得分最高的就是引发故障的服务。在服务内部,根据建立的Lasso模型进一步对服务接口调用的异常程度进行打分。具体步骤如下:
(41)对于第j个接口,将与其相关的异常度量的Lasso模型中的参数ωi以及异常度量的预测残差进行归一化,得到新值ai和bi;
(42)则第j个接口的异常得分为
(43)根据(2)中计算的接口的异常得分,对接口的异常程度进行排序。
本发明的原理:针对微服务的多语言特性,采用基于代理的机制监测服务之间的调用关系,实现对服务透明的服务调用监测;当服务进行接口调用时,会占用相应的系统资源,因此监测的度量值会表现出相应的变化,因此考虑建立接口调用与度量值之间的关联模型来刻画两者之间的影响关系。为了减少模型的复杂度,保留对度量最有影响的接口调用,采用Lasso回归方法构建接口调用次数和度量之间的关联模型,并依据该关联模型找出异常的度量,然后根据服务中异常度量所占的比例,找出出现异常的服务;当某个服务出现异常时,它很有可能会在一段时间内引起与其相关的服务也出现异常。因此用服务调用拓扑图来刻画服务之间异常的传播,采用PageRank算法,对服务的异常程度进行打分,找出引发异常的服务。在故障服务内部,基于接口调用与度量之间的回归模型,对接口的异常程度进行打分,最后定位发生故障的接口。
本发明与现有技术相比具有如下优点:
(1)服务透明监测:基于代理技术实现对服务调用的监测,做到监测对服务透明,业务开发人员无需做任何修改,并且可以最大限度降低调用监测对应用性能的影响。
(2)自动化异常服务检测:基于Lasso回归方法构建度量与接口调用的回归模型,在服务运行时,系统可以自动通过回归模型对度量值进行预测,如果残差的绝对值大于阈值,则认为出现异常,从而实现自动化发现异常服务。
(3)故障根因定位:基于检测出的异常服务以及服务调用拓扑图构建故障子图,故障子图可以很好地反映异常的传播过程,进一步采用PageRank算法对图中服务的异常程度进行打分。因为PageRank算法可以反映图中节点的影响程度,因此可以找出最有可能引发异常的服务。
附图说明
图1为本发明方法的实现流程图;
图2为本发明实例方法的使用环境。
具体实施方式
以下结合具体实施实例和附图对本发明进行详细说明。
如图1所示,本发明提出的面向异常传播的微服务故障诊断方法,包括以下步骤,(1)将代理部署在各个服务实例中,以收集服务调用关系以及服务的度量监测数据,并将数据持久化到数据库中;(2)在冷启动阶段,基于收集到的服务调用信息,构建服务调用拓扑图,并基于收集到的度量变化数据以及服务接口调用次数构建Lasso回归模型;(3)在服务运行阶段,基于构建的Lasso回归模型监测服务是否异常;(4)当服务出现异常时,基于PageRank算法找出最有可能引发异常的服务,并在异常服务内部定位异常的接口调用。
如图2所示,作为本发明实施实例方法的使用环境,目标微服务应用是Sock-Shop,采用Kubernetes作为基础运行环境,将服务实例部署在pod上,其中核心的10个服务各自有一个实例,MongoDB服务有三个实例,MySQL有一个实例。每个pod上都部署一个代理Agent,用于监测服务调用信息以及服务内度量变化。负载生成器模拟用户请求,产生负载;故障注入器通过预置的脚本,将故障注入到系统中,以测试故障诊断系统的诊断效果;故障诊断系统基于收集到的数据进行故障诊断。本发明所提出的方法在故障诊断系统实现。。
本发明实施实例方法流程:
(1)通过部署在服务实例中的代理Agent收集每个服务实例的度量监测值,包括CPU利用率,内存占用率、磁盘I/O速率、每秒请求数、服务内接口调用次数等多个监测值,以及服务请求调用信息;
(2)在冷启动阶段,通过负载生成器生成负载,收集服务请求调用信息,用多元组Ni=(requestUID,serviceUID,spanUID,parentUID,info)的形式记录下来,加入到集合中S中;
(3)在集合S中,按照requestUID对多元组进行分类,在requestUID相同的多元组中发现同一个请求中服务的调用关系,将有调用关系的服务加入到拓扑图G中,图中的点为服务实例,边表示服务的调用关系,如果图中点或者边已经存在,不重复添加。重复上述过程,直到集合S为空;
(4)收集服务内度量监测值以及服务内接口调用次数,分别作为Lasso回归模型的响应变量和解释变量。其中,用Yt表示度量m在时刻t的监测值,作为Lasso回归模型的响应变量,用向量
(5)基于上述数据构建Lasso回归模型,其表达式为:
(6)采用广义交叉验证法来选择调整参数c,广义交叉验证法的形式为:
(7)在服务运行过程中,基于Lasso回归模型对度量值进行预测,计算残差:
(8)基于(3)得到的服务调用拓扑图以及(7)得到的异常服务集合构建异常传播子图,下面用PageRank算法定位故障服务;
(9)在初始阶段,用服务内异常度量的比例作为该服务的PR初值,P=[p0,p1,...,pn]T为多个服务的PR初值构成的列向量,其中pi为服务i中异常度量的比例;
(10)通过公式
(11)多次迭代之后,当Pk(pi)满足|Pk-Pk-1|<δ,则迭代结束;
(12)根据服务的异常得分对服务的异常程度进行排序,认为得分最高的就是最有可能引发异常的服务。在异常服务内部,根据(5)构建的Lasso模型对服务内的接口的异常程度进行打分;
(13)对于第j个接口,将与其相关的异常度量的Lasso模型中的参数ωi以及异常度量的预测残差进行归一化,得到新值ai和bi;
(14)则第j个接口的异常得分为其中n为与第j个接口相关的异常度量的个数;
(15)根据(14)得到的异常的得分,对接口的异常程度进行排序。最后可以找出本次异常中的故障根因服务以及服务内的异常接口。
总之,本发明基于代理技术监测服务调用信息,建立微服务调用拓扑图以刻画微服务间异常传播关系;采用Lasso回归建模接口调用与度量间关联,通过监测关联模型的变化检测异常微服务;基于PageRank算法评估微服务及其调用接口的异常程度,本发明实现了透明化服务监测,自动化度量值预测以发现异常服务,智能化评估图中节点的异常程度以检测问题根因。
机译: 重金属废水处理过程异常工作条件智能监测方法及基于转移学习的仪表及储存介质
机译: 面向对象的数据库系统中的一种方法索引技术和动态更新传播
机译: 一种智能终端硬件是否异常运行的方法及智能终端