一种基于服务调用拓扑的分布式应用性能监控方法
技术领域
本发明涉及分布式应用性能监控领域,主要针对局域网分布式应用的服务调用关系和服务节点的处理延时进行计算,实时提供监控信息,并在性能下降的情况下发出警报。
背景技术
企业级的应用大多是复杂的分布式应用,应用由多个服务组成,这些服务可能由不同的团队,使用不同的语言开发且分布于网络的不同位置上,使这些应用难以调试和确定系统的瓶颈,尤其发生故障时,难以快速确定问题发生的位置。通常通过分析服务调用拓扑和服务延时的方法解决这个问题。
目前主要检测服务之间调用关系的方法有两大类,一类采用对服务调用请求添加标签,另一类不改变服务调用请求,而将应用视为黑盒。前者为应用的服务调用请求添加一个全局唯一的标志,同一标签下的请求为一次调用,通过分析同一标签下的请求关系确定服务的调用关系和服务节点的延时。虽然这样可以获得准确的服务调用关系,但是对应用有侵入性,且往往只针对特定类型的应用,还会造成较大的系统负载。后者收集大量的服务调用数据,通过建立数学模型分析服务调用关系。
目前不改变服务调用请求的方法主要存在以下问题:
1.有些方法使用于大量数据集中处理,不是实时的,这些方法只适于事后分析;同时,这种方法会过度利用陈旧数据,不能适应网络的动态变化。
2.有些方法计算算法复杂度较高,消耗时间太大。
发明内容
本发明的目的在于针对现有技术的不同,提供一种基于服务调用拓扑的分布式应用性能监控方法。
本发明的目的是通过以下技术方案来实现的:一种基于服务调用拓扑的分布式应用性能监控方法,该方法包括以下步骤:
步骤1:监控分布式应用服务节点之间的网络调用请求,解析网络调用请求的网络包头部,将发送者、接收者和发生时间作为一条原始数据存储到一个可以快速索引的存储服务器,其中,发送者和接收者以服务节点所在主机IP或者<主机IP,端口Port>标记。
步骤2:读取原始数据,分析当前的应用服务调用关系和服务节点的延时,计算出单节点的服务调用关系。具体包含以下步骤:
(2.1)初始化系统。设定时间t1、t2,t1<t2,最小窗口参数MinWindowSize,最大窗口参数MaxWindowSize,最大值阈值MaxValHold,最大值个数阈值MaxNumHold,最小可能性MinProb,默认延时时长DefaultDelay,默认超时时长DefaultTimeout以及性能显著下降阈值ADHold。
(2.2)通过原始数据的发送者和接收者,查询t1到t2时间段内应用中存在的服务节点。
(2.3)遍历步骤2.2查询到的服务节点。当前的服务节点设为node。
(2.4)从存储服务器中查询出t1到t2时间段内从node发出和node收到的原始数据。
(2.5)对原始数据进行过滤,得到进入node的请求链表InMsg、从node发出的请求链表OutMsg,并计算离散化步长Step;具体包括以下子步骤:
(2.5.1)如果node没有服务延时队列,则为node创建服务延时队列;
(2.5.2)对原始数据进行过滤:对于从node发出的请求,在这个请求之前合理时间范围内有进入node的请求,那么将从node发出的请求加入OutMsg,对应所有进入node的请求加入InMsg。所述合理时间范围指进入的请求和发出的请求时间差距不超过服务处理的超时时间,也不小于服务的最短处理时间。在node的服务延时队列长度大于等于MinWindowSize时,使用延时的均值与两倍均方差的和作为超时时间,如果延时均值与两倍均方差的差大于0,使用这个值作为最短处理时间,否则使用延时均值的u分之一作为最短处理时间;其中u为[2,10]的整数,优选取3。在服务延时队列长度小于MinWindowSize时,使用DefaultTimeout作为超时时间,使用p分之DefaultDelay的作为最短处理时间;其中p为[2,10]的整数,优选取2。
(2.5.3)计算离散化步长Step:在node的服务延时队列长度小于MinWindowSize时,取DefaultDelay的k分之一作为Step;在服务延时队列长度大于等于MinWindowSize时,取延时均值的k分之一作为Step。k为大于4的整数,优选取10。
(2.6)计算node的服务延时D,具体包括以下子步骤:
(2.6.1)根据Step将InMsg离散化为序列In:以t1为零点,每隔step取一个时间点作为离散点,将这个点前后二分之Step内请求的数量作为离散点对应的值。
(2.6.2)按步骤2.6.1所述方法,根据Step将OutMsg离散化为序列Out;
(2.6.3)将In和Out带入公式1,计算得到h,并求出h的最大值、正的最大值点的平均值、最大值的个数。
(2.6.4)使用正的最大值点的平均值乘以Step作为服务延时D。
(2.7)判断服务延时D是否合理:如果步骤(2.6)计算的h的最大值不小于MaxValHold且最大值的个数不大于MaxNumHold且存在正的最大值点,那么D合理,执行步骤(2.8),否则执行步骤(2.13);
(2.8)按照窗口更新node的延时队列:当node的延时队列的长度小于MaxWindowSize时,新计算出的延时入队;当node的延时队列的长度大于等于MaxWindowSize时,最先计算的延时出队,新计算出的延时入队。
(2.9)判断node的延时队列的长度是否大于MinWindowSize,是则执行步骤(2.10);否则执行步骤(2.13);
(2.10)以node延时队列中的数据为样本,求出均值d和均方差r。如果当前均值d比之前的延时均值增加超过PAHold,则将node、t1、t2、之前的延时均值和当前的延时均值作为一条警报信息向运维人员发送,并存储于存储服务器。
(2.11)根据InMsg、OutMsg、d和r求出node的因果路径,并计算每条单节点因果路径的可能性,具体包括以下子步骤:
(2.11.1)选取OutMsg中的一条原始数据,设接收者为dst_node,时间为t3。令T=t3-d,R=ur,1<=u<=2。选出InMsg中时间在(T-R,min(T+R,t3))区间内的原始数据,设原始数据共N条,设这些记录的发送者为src_nodei,(其中,1<=i<=K,表示有K个不同的发送者),计算出node的单节点因果路径<src_nodei,node,dst_node>。
(2.11.2)计算单节点因果路径的可能性:如果有ni条原始数据的发送者src_nodei,则单节点因果路径<src_nodei,node,dst_node>的可能性为ni/N。或者按照进入node的时间与T的相隔越短权值越高的方式为每条单节点因果路径赋予权值,最后用发送者src_nodei的权值的总和与所有权值的总和的比值作为对应单节点因果路径的可能性。
(2.12)将可能性大于等于MinProb的因果路径存入存储数据库;
(2.13)判断是否有未被遍历的服务节点,是则执行步骤(2.3);否则执行步骤(2.14);
(2.14)令td=t2-t1,更新t1为t2,更新t2为t2+td。执行步骤(2.2)。
步骤3:将步骤2计算得到的单节点因果路径组合成服务调用拓扑图,具体包括以下子步骤:
(3.1)构造初始图,将从起始节点开始的单节点因果路径加入拓扑图,所述起始节点为分布式应用开始处理请求的服务节点,为每条路径添加标签:因边添加标签T,并设置状态为已使用,果边添加同一标签T,并设置状态为未使用;所述因边为连接单节点因果路径的前两个节点的有向边,所述果边为连接单节点因果路径的后两个节点的有向边;
(3.2)从初始图的果边开始层次遍历拓扑图的边,添加单节点因果路径,直到拓扑图延伸到终止节点。所述终止节点为其所有单节点因果路径为XYX模式的节点。设当前的单节点因果路径为ABC,当前节点的遍历过程如下:
(3.2.1)如果B为终止节点,则按层次遍历方法遍历下一个节点,否则继续;
(3.2.2)如果C在到达边AB的路径上(含节点A)出现过,则按层次遍历方法遍历下一个节点,否则继续;
(3.2.3)判断AB是否有未被使用的标签,如果有,设标签为T1,执行步骤(3.2.4);否则执行步骤(3.2.6);
(3.2.4)设置BC标签为T1,且设置T1为未使用;
(3.2.5)设置AB的标签T1为已使用,按层次遍历方法遍历下一个节点;
(3.2.6)创建新标签T2;
(3.2.7)设置BC标签为T2,且设置BC的标签T2为未使用;
(3.2.8)为AB和到达AB的路径添加标签T2,且设置这些标签为已使用,按层次遍历方法遍历下一个节点。
步骤4:根据拓扑图分析系统性能,在服务性能明显下降的情况下将分析结果发送给运维人员。具体包括以下步骤:
(4.1)根据步骤3的计算结果,形成服务调用拓扑图的图形化结果,直观地显示出带标签的因果路径、每个服务的延时和每条因果路径的可能性信息;
(4.2)根据步骤2中的警报信息,将经过警报发生节点的因果路径标注出来;
(4.3)找到整个拓扑图中服务延时最大的节点,并标记为系统瓶颈;
(4.4)将步骤(4.1)-(4.3)的信息发送给运维人员,从而实现分布式应用性能的监控。
本发明的有益效果是:本发明通过监控分布式应用服务的网络调用请求,解析出调用者、被调用者和请求时间,通过建立数学模型,确定服务的处理延时,进一步确定应用的服务调用拓扑。通过应用的服务调用拓扑和服务的延时信息,为运维人员提供可视化的应用状态分析,方便对分布式应用进行调试和性能分析。本发明分布式应用性能监控方法与一般的监控方法相比,能适应动态变化的分布式应用,特别地,如果将本发明和云计算的动态扩展结合起来,可以在服务性能显著下降之前为性能较差的服务提供较多的资源,保证服务正常运行。同时,本发明方法具有通用性,可用于任何分布式应用,且本发明方法是实时的,并不是对收集数据的事后分析,能够及时发现问题和系统瓶颈并反馈给运维人员。本发明方法实现简单,易于操作,具有可扩展性和易于部署的特点,适合为分布式应用提供性能监控。
附图说明
图1是本发明方法整体架构图;
图2是计算单节点的服务调用关系的流程图;
图3是将单节点因果路径组合成服务调用拓扑的流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
如图1所示,本发明提供的一种基于服务调用拓扑的分布式应用性能监控方法,包括以下步骤:
步骤1:监控分布式应用服务节点之间的网络调用请求(数据包),解析网络调用请求的网络包头部,将发送者、接收者和发生时间作为一条原始数据存储到一个可以快速索引的存储服务器,其中,发送者和接收者以服务节点所在主机IP或者<主机IP,端口Port>标记。
定期删除经过计算的原始数据,减少空间的浪费。如果用户关心主机维度的服务状态,那么用发送者和接收者所在主机IP标记;如果用户关心进程维度的服务状态,那么用发送者和接收者所在主机IP和端口Port标记。
步骤2:读取原始数据,分析当前的应用服务调用关系和服务节点的延时,计算出单节点的服务调用关系。具体包含以下步骤:
(2.1)初始化系统。设定时间t1,t2(t1<t2),最小窗口参数MinWindowSize,最大窗口参数MaxWindowSize,最大值阈值MaxValHold,最大值个数阈值MaxNumHold,最小可能性MinProb,默认延时时长DefaultDelay,默认超时时长DefaultTimeout以及性能显著下降阈值ADHold。
MinWindowSize是计算服务延时均值的最小样本的数量,用于防止偶然因素引起的误差;MaxWindowSize是本发明方法维护样本的数量,太大会导致系统维护过多数据,降低系统时效性,太小会影响本发明方法的计算准确性。MaxValHold建议为16,MaxNumHold建议为8。DefaultDelay为默认的服务节点处理延时,DefaultTimeout为默认的服务最长处理延时,这两个值设定应接近真实值,使本发明方法快速收敛。
(2.2)通过原始数据的发送者和接收者,查询t1到t2时间段内应用中存在的服务节点。
(2.3)遍历步骤2.2查询到的服务节点。当前的服务节点设为node。
(2.4)从存储服务器中查询出t1到t2时间段内从node发出和node收到的原始数据,即发送者为node和接收者为node的原始数据记录。
(2.5)对原始数据过滤,得到进入node的请求链表InMsg、从node发出的请求链表OutMsg,并计算离散化步长Step;具体包括以下子步骤:
(2.5.1)如果node没有服务延时队列,则为node创建服务延时队列;
(2.5.2)对原始数据进行过滤:对于从node发出的请求(原始数据中发送者为node的记录),在这个请求之前合理时间范围内有进入node的请求(原始数据中接收者是node的记录),那么将从node发出的请求加入OutMsg,对应所有进入node的请求加入InMsg。所述合理时间范围指进入的请求和发出的请求时间差距不超过服务处理的超时时间,也不小于服务的最短处理时间。在node的服务延时队列长度大于等于MinWindowSize时,使用延时的均值与两倍均方差的和作为超时时间,如果延时均值与两倍均方差的差大于0,使用这个值作为最短处理时间,否则使用延时均值的u分之一作为最短处理时间;其中u为[2,10]的整数,优选取3。在服务延时队列长度小于MinWindowSize时,使用DefaultTimeout作为超时时间,使用p分之DefaultDelay的作为最短处理时间;其中p为[2,10]的整数,优选取2。
过滤的目的:网络环境复杂多样,一个服务调用可能引发多个网络请求。过滤一方面使网络请求与服务调用对应,另一方面减少了参与计算的原始数据,保证计算的实时性。
(2.5.3)计算离散化步长Step:在node的服务延时队列长度小于MinWindowSize时,取DefaultDelay的k分之一作为Step;在服务延时队列长度大于等于MinWindowSize时,取延时均值的k分之一作为Step,k为大于4的整数,优选取10。
(2.6)计算node的服务延时D,具体包括以下子步骤:
(2.6.1)根据Step将InMsg离散化为序列In:以t1为零点,每隔step取一个时间点作为离散点,将这个点前后二分之Step内请求的数量作为离散点对应的值。
(2.6.2)按步骤2.6.1所述方法,根据Step将OutMsg离散化为序列Out;
(2.6.3)将In和Out带入公式1,计算得到h,并求出h的最大值、正的最大值点的平均值、最大值的个数。
实际计算中,由于步骤2.5.3中Step为服务延时的k分之一,所以最大值点应出现在k附近,因此不必计算全部的h序列,只计算h(-k)到h(2k)的值即可。这种计算方法的精度会受到影响,但提高了计算的实时性。
(2.6.4)使用正的最大值点的平均值乘以Step作为服务延时D。
(2.7)判断服务延时D是否合理:如果步骤(2.6)计算的h的最大值不小于MaxValHold且最大值的个数不大于MaxNumHold且存在正的最大值点,那么D合理,执行步骤(2.8),否则执行步骤(2.13);排除不合理的服务延时D可以避免错误结果带来的误差。
(2.8)按照窗口更新node的延时队列:当node的延时队列的长度小于MaxWindowSize时,新计算出的延时入队;当node的延时队列的长度大于等于MaxWindowSize时,最先计算的延时出队,新计算出的延时入队。
(2.9)判断node的延时队列的长度是否大于MinWindowSize,是则执行步骤(2.10);否则执行步骤(2.13);
(2.10)以node延时队列中的数据为样本,求出均值d和均方差r。如果当前均值d比之前的延时均值增加超过PAHold,则将node、t1、t2、之前的延时均值和当前的延时均值作为一条警报信息向运维人员发送,并存储于存储服务器。设置PAHold可以排除偶然因素引发的错误结果的影响。
(2.11)根据InMsg、OutMsg、d和r求出node的因果路径,并计算每条单节点因果路径的可能性:
(2.11.1)选取OutMsg中的一条原始数据,设接收者为dst_node,时间为t3。令T=t3-d,R=ur,1<=u<=2。选出InMsg中时间在(T-R,min(T+R,t3))区间内的原始数据,设原始数据共N条,设这些记录的发送者为src_nodei,(其中,1<=i<=K,表示有K个不同的发送者),计算出node的单节点因果路径<src_nodei,node,dst_node>。
(2.11.2)计算单节点因果路径的可能性:如果有ni条原始数据的发送者src_nodei,则单节点因果路径<src_nodei,node,dst_node>的可能性为ni/N。或者按照进入node的时间与T的相隔越短权值越高的方式为每条单节点因果路径赋予权值,最后用发送者src_nodei的权值的总和与所有权值的总和的比值作为对应单节点因果路径的可能性。
(2.12)将可能性大于等于MinProb的因果路径存入存储数据库;
(2.13)判断是否有未被遍历的服务节点;是则执行步骤(2.3);否则执行步骤(2.14);
(2.14)令td=t2-t1,更新t1为t2,更新t2为t2+td。执行步骤(2.2);如果t1到t2时间段包含了当前时间,那么暂停一段时间,直到t1到t2时间段不包含当前时间。
步骤3:将步骤2计算得到的单节点因果路径组合成服务调用拓扑图,具体包括以下子步骤:
(3.1)构造初始图,将从起始节点开始的单节点因果路径加入拓扑图,所述起始节点为分布式应用开始处理请求的服务节点,为每条路径添加标签:因边添加标签T,并设置状态为已使用,果边添加同一标签T,并设置状态为未使用;所述因边为连接单节点因果路径的前两个节点的有向边,所述果边为连接单节点因果路径的后两个节点的有向边;
标签的用途:同一标签表示一个网络调用请求的处理过程。标签的使用状态用于构造服务调用拓扑图时判断是否需要新建标签。
(3.2)从初始图的果边开始层次遍历拓扑图的边,添加单节点因果路径,直到拓扑图延伸到终止节点。所述终止节点为其所有单节点因果路径为XYX模式的节点。设当前的单节点因果路径为ABC,当前节点的遍历过程如下:
(3.2.1)如果B为终止节点,则按层次遍历方法遍历下一个节点,否则继续;
(3.2.2)如果C在到达边AB的路径上(含节点A)出现过,则按层次遍历方法遍历下一个节点,否则继续;
(3.2.3)判断AB是否有未被使用的标签,如果有,设标签为T1,执行步骤(3.2.4);否则执行步骤(3.2.6);
(3.2.4)T1,且设置T1为未使用;
(3.2.5)设置AB的标签T1为已使用,按层次遍历方法遍历下一个节点;
(3.2.6)创建新标签T2;
(3.2.7)设置BC标签为T2,且设置BC的标签T2为未使用;
(3.2.8)为AB和到达AB的路径添加标签T2,且设置这些标签为已使用,按层次遍历方法遍历下一个节点。
步骤4:根据拓扑图分析系统性能,在服务性能明显下降的情况下将分析结果发送给运维人员。包括以下步骤:
(4.1)根据步骤3的计算结果,形成服务调用拓扑图的图形化结果,直观地显示出带标签的因果路径、每个服务的延时和每条因果路径的可能性信息;
(4.2)根据步骤2中的警报信息,将经过警报发生节点的因果路径标注出来;
(4.3)找到整个拓扑图中服务延时最大的节点,并标记为系统瓶颈;
(4.4)将步骤(4.1)-(4.3)的信息发送给运维人员,从而实现分布式应用性能的监控。