CN109697456A - 业务分析方法、装置、设备及存储介质 - Google Patents
业务分析方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109697456A CN109697456A CN201811393680.2A CN201811393680A CN109697456A CN 109697456 A CN109697456 A CN 109697456A CN 201811393680 A CN201811393680 A CN 201811393680A CN 109697456 A CN109697456 A CN 109697456A
- Authority
- CN
- China
- Prior art keywords
- node
- call
- chain
- call chain
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 111
- 238000003745 diagnosis Methods 0.000 title claims abstract description 38
- 238000004458 analytical method Methods 0.000 claims abstract description 90
- 238000011156 evaluation Methods 0.000 claims abstract description 64
- 239000013598 vector Substances 0.000 claims description 162
- 125000004122 cyclic group Chemical group 0.000 claims description 41
- 230000002159 abnormal effect Effects 0.000 claims description 14
- 230000005055 memory storage Effects 0.000 claims description 2
- 238000001514 detection method Methods 0.000 abstract description 13
- 238000005516 engineering process Methods 0.000 abstract description 5
- 230000006870 function Effects 0.000 description 218
- 230000000875 corresponding effect Effects 0.000 description 141
- 230000008569 process Effects 0.000 description 60
- 238000010586 diagram Methods 0.000 description 54
- 239000011159 matrix material Substances 0.000 description 31
- 238000004422 calculation algorithm Methods 0.000 description 28
- 230000000694 effects Effects 0.000 description 16
- 238000012545 processing Methods 0.000 description 12
- 230000002596 correlated effect Effects 0.000 description 10
- 238000007726 management method Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 7
- 238000004590 computer program Methods 0.000 description 7
- 238000002474 experimental method Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 208000019300 CLIPPERS Diseases 0.000 description 4
- 208000021930 chronic lymphocytic inflammation with pontine perivascular enhancement responsive to steroids Diseases 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 238000010008 shearing Methods 0.000 description 4
- 230000003595 spectral effect Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013138 pruning Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 244000153665 Ficus glomerata Species 0.000 description 1
- 235000012571 Ficus glomerata Nutrition 0.000 description 1
- 102100037060 Forkhead box protein D3 Human genes 0.000 description 1
- 101001029308 Homo sapiens Forkhead box protein D3 Proteins 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000013210 evaluation model Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/243—Classification techniques relating to the number of classes
- G06F18/24323—Tree-organised classifiers
Landscapes
- Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种业务分析方法、装置、设备及存储介质,属于计算机技术领域。本申请通过基于调用链的结构,获取调用链之间的相似度,基于调用链之间的相似度,将业务的大量的调用链聚为不同的类,从而可以基于类进行调用链的性能分析或调用链的异常分析。由于同一类中的调用链的结构相似,能够映射为业务的一种场景,通过区分不同调用链所属的类,可以区分同一业务的不同场景,从而对实现基于场景的业务分析。可以避免某一场景下出现问题的调用链混杂在其他场景下的调用链时,漏检测该出现问题的调用链的情况。另外,可以避免正常情况下性能参数较差的调用链被误检测为出现问题的调用链的情况,从而极大地提高业务分析结果的准确性。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种业务分析方法、装置、设备及存储介质。
背景技术
随着计算机技术以及云计算技术的发展,计算机设备可以处理的业务越来越多,可以对业务进行分析,以便诊断业务处理的性能,定位业务处理的问题。
目前,在分析业务的过程中,会获取业务的所有调用链,分析业务的所有调用链,输出业务的分析结果。以分析业务的处理速度为例,会设置调用时长阈值,获取每个调用链的调用时长,检测每个调用链的调用时长是否超过该调用时长阈值,当任一调用链的调用时长超过该调用时长阈值时,则筛选出该调用链,将该调用链作为执行速度过慢的异常调用链,输出该异常调用链。
基于上述方案分析业务时,业务的分析结果的准确性较差。
发明内容
本申请实施例提供了一种业务分析方法、装置、设备及存储介质,能够解决相关技术中业务的分析结果的准确性较差的技术问题。所述技术方案如下:
第一方面,提供了一种业务分析方法,所述方法包括:
获取业务的多个调用链;
基于所述多个调用链的结构,获取所述多个调用链之间的相似度;
基于所述多个调用链之间的相似度,对所述多个调用链聚类,得到一个或多个类;
基于所述一个或多个类,进行调用链的性能分析或调用链的异常分析。
本实施例提供的方法,通过基于调用链的结构,获取调用链之间的相似度,基于调用链之间的相似度,将业务的大量的调用链聚为不同的类,从而可以基于类进行调用链的性能分析或调用链的异常分析。由于同一类中的调用链的结构相似,能够映射为业务的一种场景,通过区分不同调用链所属的类,可以区分同一业务的不同场景,从而对实现基于场景的业务分析。一方面,可以避免某一场景下出现问题的调用链混杂在其他场景下的调用链时,漏检测该出现问题的调用链的情况,从而提高业务分析的全面性。另一方面,对于调用链结构复杂、经过的网元较多、业务处理的运算量较大等原生因素而导致正常情况下性能参数较差的调用链来说,可以避免这种调用链被误检测为出现问题的调用链的情况,从而提高业务分析的精确性,因此,可以极大地提高业务分析结果的准确性,进而便于通过业务分析结果进行应用性能管理。
可选地,所述基于所述多个调用链的结构,获取所述多个调用链之间的相似度,包括:
基于所述多个调用链,生成多个树,每个树用于表示一个调用链;
对于所述多个调用链中的任两个调用链,获取所述两个调用链对应的树之间的相似度,作为所述两个调用链之间的相似度。
可选地,所述获取所述两个调用链对应的树之间的相似度之前,所述方法还包括:
对于所述多个树中的任一树,基于所述树中不同节点之间的逻辑关系,向所述树添加逻辑节点,所述逻辑节点用于表示所述逻辑关系。
可选地,所述基于所述树中不同节点之间的逻辑关系,向所述树添加逻辑节点,包括下述至少一个步骤:
对于所述多个树中的任一树,基于所述树中不同节点之间的逻辑关系,向所述树添加逻辑节点,所述逻辑节点用于表示所述逻辑关系。
可选地,所述基于所述树中不同节点之间的逻辑关系,向所述树添加逻辑节点,包括下述至少一个步骤:
当所述树中第一节点具有多个第一子节点时,获取所述多个第一子节点的调用时间段,当所述多个第一子节点的调用时间段不重叠时,在所述第一节点与所述多个第一子节点之间添加顺序节点,所述顺序节点用于表示所述第一节点先后调用所述多个第一子节点;
当所述树中第二节点具有多个第二子节点时,获取所述多个第二子节点的调用时间段,当所述多个第二子节点的调用时间段重叠时,在所述第二节点与所述多个第二子节点之间添加并行节点,所述并行节点用于表示所述第二节点同时调用所述多个第二子节点;
当所述树中第三节点具有多个第三子节点,且所述多个第三子节点连续相同时,在所述第三节点与目标第三子节点之间添加循环节点,删除所述多个第三子节点中所述目标第三子节点以外的第三子节点,所述循环节点用于表示所述第三节点循环调用所述目标第三子节点,所述目标第三子节点为所述多个第三子节点中的任一第三子节点;
通过在树中添加循环节点,至少可以达到以下效果:第一,如果函数A调用了函数B共计100次,则未添加循环节点前,节点“函数A”会有100个子节点“函数B”,导致树的分支过多,宽度较大,较为冗余,不便查看。而通过向树中添加循环节点,并删除重复的第三子节点,可以极大地减少了树中节点的数量,从而减少树的宽度,简化树的结构,达到剪枝的效果,让树的结构更加清晰,则后续基于树来展示调用链时,便于展示调用链的结构,同时帮助用户快速理解调用链的调用关系。第二,由于后续聚类过程中,会基于树的结构,获取树与树之间的距离,那么如果树中节点数量较多、结构复杂,就会使得聚类时运算量较大。因此,通过向树中添加循环节点,并删除重复的第三子节点,可以简化树的结构,从而减少聚类运算的计算量,提高计算效率。
当所述树中第四节点具有第四子节点,且所述第四节点和第四子节点相同时,在所述第四节点之前添加递归节点,删除所述第四子节点,所述递归节点用于表示所述第四节点调用自身。
通过在树中添加递归节点,至少可以达到以下效果:第一,未添加递归节点前,树的深度较大,较为冗余,不便查看。而通过向树中添加递归节点,并删除重复的第四子节点,可以简化树的结构,可以减少树的深度,让树的结构更加清晰。则后续基于树来展示调用链时,便于展示调用链的结构,同时帮助用户快速理解调用链的调用关系。第二,由于后续聚类过程中,会基于树的结构,获取树与树之间的距离,那么如果树中节点数量较多、结构复杂,就会使得聚类时运算量较大。因此,通过向树中添加递归节点,并删除重复的第四子节点,可以简化树的结构,从而减少聚类运算的计算量,提高计算效率。
可选地,所述在所述第一节点与所述多个第一子节点之间添加顺序节点之后,所述方法还包括:
根据所述多个第一子节点的时间戳,生成次序信息,所述次序信息用于指示所述第一节点调用所述多个第一子节点的先后次序;
向所述顺序节点写入所述次序信息。
通过这种可选方式,至少可以达到以下效果:对于任两个调用链来说,当这两个调用链均具有先后执行的多个第一子节点时,若该多个第一子节点的执行顺序不同,则生成这两个调用链对应的树时,向两个树的顺序节点写入的次序信息不同,从而可以通过两个树的顺序节点,区分这两个树,因此,在后续聚类过程中,可以避免这两个调用链对应的树相互混淆的情况,从而提高聚类运算的准确性。
可选地,所述获取所述两个调用链对应的树之间的相似度之前,所述方法还包括:
从一个或多个具有并行路径的树中,删除所述并行路径中关键路径以外的路径,所述并行路径是指同一调用链中调用时间点相同的多段路径,所述关键路径是指所述并行路径中调用时长最长的路径。
通过这种可选方式,可以达到的效果至少可以包括:由于网络中经常会出现某一节点并行调用其他节点的情况,以致调用链会出现很多并行路径,因此调用链会结构复杂,则基于调用链生成的树也会结构复杂,导致对树聚类时,运算量较大,耗费的计算资源过多。而通过删除关键路径以外的路径,首先,对于关键路径以外的路径来说,由于这些路径的调用时长小于关键路径,因此这些路径对调用链的性能分析或异常分析的影响都较小,因此即使删除掉这些路径,也不会影响分析结果的准确性。另一方面,可以实现对树剪裁的功能,简化树的结构,则对树进行聚类时,可以减少聚类的运算量,显著提高聚类运算的效率,同时节约聚类运算的资源。
可选地,所述基于所述多个调用链的结构,获取所述多个调用链之间的相似度,包括:
基于所述多个调用链的结构,获取所述多个调用链的向量,每个向量用于指示一个调用链的结构;
对于所述多个调用链中的任两个调用链,根据所述两个调用链对应的向量之间的相似度,获取所述两个调用链之间的相似度;或者,根据所述两个调用链对应的向量之间的距离,获取所述两个调用链之间的相似度。
可选地,所述基于所述多个调用链的结构,获取所述多个调用链的向量,包括:
对于所述多个调用链中的任一调用链,获取所述调用链的节点数量以及深度中的至少一项;
根据所述节点数量以及深度中的至少一项,获取所述调用链的向量。
可选地,所述基于所述一个或多个类,进行调用链的性能分析或调用链的异常分析,包括下述至少一个步骤:
对于所述一个或多个类中的任一类,获取所述类的性能分析阈值,通过所述类的性能分析阈值,对所述类进行调用链的性能分析;
对于所述一个或多个类中的任一类,获取所述类的异常分析阈值,通过所述类的异常分析阈值,对所述类进行调用链的异常分析;
对于所述一个或多个类中的任一类,获取所述类的性能分析模型在当前时间点的第一性能参数,通过所述类中调用链在当前时间点的第二性能参数与所述第一性能参数之间的偏差,对所述类进行调用链的性能分析;
对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链与第二调用链符合偏差条件时,将第一调用链输出为第二调用链的断链;
可选地,所述当第一调用链为第二调用链的子链,且第一调用链与第二调用链符合偏差条件时,将第一调用链输出为第二调用链的断链,包括:
当第一调用链为第二调用链的子链,且第一调用链的节点数量与第二调用链的节点数量的比例小于第一比例阈值时,将第一调用链输出为第二调用链的断链;或者,
当第一调用链为第二调用链的子链,且第一调用链的深度与第二调用链的深度的比例小于第二比例阈值时,将第一调用链输出为第二调用链的断链;或者,
当第一调用链为第二调用链的子链,且第一调用链的节点数量与第二调用链的节点数量的差值小于第一差值阈值时,将第一调用链输出为第二调用链的断链;或者,
当第一调用链为第二调用链的子链,且第一调用链的深度与第二调用链的深度的差值小于第二差值阈值时,将第一调用链输出为第二调用链的断链。
对于所述业务的任一调用链,获取所述调用链与所述一个或多个类之间的相似度,得到一个或多个相似度,当所述一个或多个相似度小于相似度阈值时,将所述调用链输出为异常链。
可选地,所述基于所述多个调用链之间的相似度,对所述多个调用链聚类之后,所述方法还包括:
统计所述一个或多个类的多个调用链的调用次数、错误次数、调用时长、节点数量、节点标识、调用链长度中的至少一项,得到一个或多个类的统计结果;
显示所述一个或多个类的统计结果。
可选地,所述获取所述两个调用链对应的树之间的相似度,包括:
获取所述两个调用链对应的树中之间公共的节点以及公共的逻辑节点;
基于所述公共的节点以及公共的逻辑节点,生成所述两个调用链对应的树的相同子树;
基于所述相同子树,获取所述两个调用链对应的树之间的相似度。
可选地,所述获取所述两个调用链对应的树中之间公共的节点以及公共的逻辑节点,包括:
当所述所述两个调用链对应的树中每个树具有顺序节点,且所述两个调用链对应的树中每个树的顺序节点的次序信息相同时,将所述顺序节点作为公共的逻辑节点。
可选地,所述基于所述相同子树,获取所述两个调用链对应的树之间的相似度,包括:
基于所述相同子树的节点数量以及所述两个调用链对应的树的节点基数,获取所述两个调用链对应的树之间的相似度相似度与相同子树的节点数量正相关且与一个或多个节点基数负相关;或者,
基于所述相同子树的节点数量以及所述两个调用链对应的树的节点数量,获取所述两个调用链对应的树之间的相似度。
可选地,所述获取所述两个调用链对应的树之间的相似度,包括:
根据所述两个调用链对应的树之间相互转换经过的次数,获取所述两个调用链对应的树之间的相似度;
可选地,所述根据所述两个调用链对应的树之间相互转换经过的次数,获取所述两个调用链对应的树之间的相似度,包括:
对于第一树以及第二树,获取第一树剪切为第二树经过的次数,根据该次数获取第一树与第二树之间的相似度,该相似度与该次数正相关。
可选地,所述调用链的获取过程,包括:
获取多个调用信息;
根据多个调用信息的链路标识,对该多个调用信息进行分组,得到多个组。每个组包括同一调用链的多个调用信息;
对于多个组中的每个组,根据该组中每个调用信息的父节点标识,构建一条调用链。
第二方面,提供了一种业务分析装置,所述装置用于执行上述业务分析方法。具体地,该业务分析装置包括用于执行上述第一方面或第一方面的任一种可选方式所述的业务分析方法的功能模块。
第三方面,提供一种计算机设备,所述计算机设备包括处理器和存储器;所述处理器执行所述存储器存储的指令,使得所述计算机设备执行上述第一方面或第一方面的任一种可选方式所述的业务分析方法所执行的操作。
第四方面,提供一种计算机可读存储介质,所述存储介质中存储指令,计算机设备执行所述指令以实现第一方面或第一方面的任一种可选方式所述的业务分析方法所执行的操作。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得该计算机设备能够实现上述第一方面或第一方面的任一种可选方式所述的业务分析方法所执行的操作。
第六方面,提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述第一方面或第一方面的任一种可选方式所述的业务分析方法所执行的操作。
附图说明
图1是本申请实施例提供的一种实施环境的架构图;
图2是本申请实施例提供的一种计算机设备的结构示意图;
图3是本申请实施例提供的一种业务分析方法的流程图;
图4是本申请实施例提供的一种调用链的示意图;
图5是本申请实施例提供的一种调用信息的示意图;
图6是本申请实施例提供的一种基于调用链生成的树的示意图;
图7是本申请实施例提供的一种标记树的示意图;
图8是本申请实施例提供的一种具有逻辑节点的树的示意图;
图9是本申请实施例提供的一种调用时间段的示意图;
图10是本申请实施例提供的一种调用时间段的示意图;
图11是本申请实施例提供的一种调用时间段的示意图;
图12是本申请实施例提供的一种调用时间段的示意图;
图13是本申请实施例提供的一种调用时间段的示意图;
图14是本申请实施例提供的一种调用时间段的示意图;
图15是本申请实施例提供的一种调用时间段的示意图;
图16是本申请实施例提供的一种调用时间段的示意图;
图17是本申请实施例提供的一种向树添加顺序节点的示意图;
图18是本申请实施例提供的一种有序树的示意图;
图19是本申请实施例提供的一种向树添加并行节点的示意图;
图20是本申请实施例提供的一种向树添加循环节点的示意图;
图21是本申请实施例提供的一种向树添加顺序节点的示意图;
图22是本申请实施例提供的一种向树添加递归节点的示意图;
图23是本申请实施例提供的一种通过关键路径对树进行剪裁的示意图;
图24是本申请实施例提供的一种聚类树状图的示意图;
图25是本申请实施例提供的一种聚类树状图的示意图;
图26是本申请实施例提供的一种调用链对应的向量的示意图;
图27是本申请实施例提供的一种相似度矩阵的示意图;
图28是本申请实施例提供的一种对聚类树状图剪切的示意图;
图29是本申请实施例提供的一种应用性能管理系统的架构图;
图30是本申请实施例提供的一种应用性能管理系统的架构图;
图31是本申请实施例提供的一种业务分析的结果展示界面的示意图;
图32是本申请实施例提供的一种调用链结构的示意图;
图33是本申请实施例提供的一种性能分析模型的示意图;
图34是本申请实施例提供的一种性能分析模型的示意图;
图35是本申请实施例提供的一种调用链的示意图;
图36是本申请实施例提供的一种调用链对应的向量的示意图;
图37是本申请实施例提供的一种业务分析的结果展示界面的示意图;
图38是本申请实施例提供的一种业务分析的结果展示界面的示意图;
图39是本申请实施例提供的一种业务分析的结果展示界面的示意图;
图40是本申请实施例提供的一种业务分析的结果展示界面的示意图;
图41是本申请实施例提供的一种业务分析装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1是本申请实施例提供的一种实施环境的架构图,参见图1,下述实施例提供的业务分析方法可以应用于该实施环境架构中。该实施环境架构中可以包括多个服务器、多个终端以及多个数据库。其中,图1中的服务器或者终端可以提供为下述实施例中的计算机设备。图1中的数据库可以存储大量的调用信息,计算机设备可以从数据库中获取调用信息,以便根据调用信息生成调用链。当然,图1中的数据库也可以存储大量的调用链,计算机设备可以从数据库中获取业务的多个调用链。
图2是本发明实施例提供的一种计算机设备的结构示意图,该计算机设备200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,简称:CPU)201和一个或一个以上的存储器202,其中,存储器202中存储有至少一条指令,至少一条指令由处理器201加载并执行以实现下述各个方法实施例提供的业务分析方法。当然,该计算机设备200还可以具有有线或无线网络接口以及输入输出接口等部件,以便进行输入输出,该计算机设备200还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由计算机设备中的处理器执行以完成下述实施例中的业务分析方法。例如,计算机可读存储介质可以是只读存储器(Read-Only Memory,简称:ROM)、随机存取存储器(Random Access Memory,简称:RAM)、只读光盘(Compact Disc Read-Only Memory,简称:CD-ROM)、磁带、软盘和光数据存储设备等。
图3是本申请实施例提供的一种业务分析方法的流程图,如图3所示,包括以下步骤:
301、计算机设备获取业务的多个调用链。
调用链用于指示处理业务的多个节点以及多个节点之间的调用关系。该处理业务的节点可以为软件,例如,处理业务的节点可以为应用、服务、微服务、模块、子模块、类或函数;当然,该处理业务的节点也可以为硬件,例如,该处理业务的节点可以为任一服务器或多台服务器的集群,本实施例对该处理业务的节点的具体形态不做限定。
关于调用链包含的具体内容,可选地,调用链可以包括多个节点的标识,节点的标识用于指示对应的节点。例如,节点的标识可以为节点的身份标识号(identification,缩写:ID)、名称、编号等。另外,调用链可以封装多个节点之间的调用关系,例如,调用链可以为链表,链表中每个节点持有上一个节点或下一个节点的指针或引用,从而通过该指针或引用指示该节点的父节点或子节点。
举例来说,调用链可以包括前端服务、中间层服务以及后端服务,前端服务可以调用中间层服务,中间层服务可以调用后端服务。示例性地,参见图4,终端触发了图4所示的调用链,该调用链为:前端服务A调用中间层服务B以及中间层服务C,中间层服务C调用后端服务D和后端服务E。
在一种可能的实现中,获取调用链的过程可以包括以下步骤一至步骤三:
步骤一、获取多个调用信息。
调用信息的英文名称可以为span信息。调用信息用于描述一次调用过程,调用信息可以包括链路标识、调用信息的标识、节点的标识、父节点的标识、时间戳、调用时长、状态码中的至少一项。
链路标识用于标识调用链,在程序中,链路标识可以记录为“trace_id”。
节点的标识用于标识生成调用信息的节点,例如可以为生成调用信息的节点的名称。可选地,在程序中,节点的标识可以记录为“spanName”。后续在获取不同调用链之间的相似度的过程中,可以使用节点的标识,判定不同调用链中的节点是否相同。
调用信息的标识用于标识调用信息。可选地,在程序中,调用信息的标识可以记录为“span_id”。可选地,调用信息的标识可以为生成该调用信息的节点的标识的哈希值,例如,调用信息的标识可以为函数名的哈希值,又如,调用信息的标识可以为服务名的哈希值,再如,调用信息的标识可以为服务实例名的哈希值。举例来说,调用信息的标识可以为“spanName”的哈希值。当然,调用信息的标识还可以为函数名、服务名以及服务实例名中任两项或两项以上的组合的哈希值,例如,调用信息的标识可以为函数名以及服务名的哈希值,本实施例对调用信息的标识的具体形式不做限定。
父节点的标识用于标识生成调用信息的节点的父节点。例如,父节点的标识可以为调用链中调用信息的前一个调用信息的标识,在程序中,父节点的标识可以记录为“parent_id”。
时间戳用于指示节点执行调用动作的时间点。例如,时间戳可以指示节点开始调用的时间点以及节点结束调用的时间点。具体来说,调用信息可以视为描述一次调用过程的元数据(英文:metadata)。参见图5,图5为调用信息的示意图,一次调用过程可以通过四个动作定义,该四个动作包括客户端发送请求(英文:client send,缩写:cs)、服务器接收(英文:server receive,缩写:sr)请求、服务器发送(英文:server send,缩写:ss)请求以及客户端接收(英文:client receive,缩写:cr)请求,相应地,调用信息可以包括这四种动作的信息以及通过这四种动作统计得出的相关信息,示例性地,该时间戳可以包括cs的时间戳、sr的时间戳、ss的时间戳、cr的时间戳中的至少一项。其中,cs的时间戳以及ss的时间戳可以指示节点开始调用的时间点,sr的时间戳以及cr的时间戳可以指示节点结束调用的时间点。
调用时长用于指示节点执行调用动作的耗时,调用时长可以为节点开始调用的时间点与节点结束调用的时间点之间的时间差。例如,调用时长可以为cr的时间戳与cs的时间戳的时间差。在程序中,调用时长可以记录为“duration”。
状态码(英文:Status code)用于指示调用动作的完成状态,状态码可以包括成功和失败。
举例来说,调用信息可以如下表1所示。其中,表1中的cs的时间戳、sr的时间戳、ss的时间戳以及cr的时间戳采用Unix时间戳(英文:Unix epoch、Unix time、POSIX time或Unix timestamp)的格式表示,该Unix时间戳是从1970年1月1日开始所经过的秒数。当然,时间戳也可以采用Unix时间戳以外的格式表示,例如采用协调世界时(英文:CoordinatedUniversal Time,缩写:UTC)的格式表示,本实施例对时间戳的具体数据格式不做限定。
表1
其中,表1中high的含义为高,low的含义为低,表述性状态传递(Representational State Transfer,REST)是一种软件架构的规范,用于描述超文本传输协议(HyperText Transfer Protocol,缩写:HTTP)层中客户端与服务器的数据交互规则。
步骤二、根据多个调用信息的链路标识,对该多个调用信息进行分组,得到多个组。每个组包括同一调用链的多个调用信息。
在一种可能的实现中,对于多个调用信息中的任两个调用信息,可以判断该两个调用信息的链路标识是否相同,若该两个调用信息的链路标识相同,表明这两个调用信息对应同一条调用链,则将该两个调用信息划分至同一个组中,如此,可以将多个调用信息按照链路标识分组,每个组中调用信息的链路标识相同,因此每个组中的调用信息对应于同一调用链。
步骤三、对于多个组中的每个组,根据该组中每个调用信息的父节点标识,构建一条调用链。
可选地,可以从组中选择父节点标识为空或父节点标识为预设标识的调用信息,确定生成该调用信息的节点,作为调用链中第一个节点。之后,从组中选择父节点的标识为该第一个节点的标识的调用信息,确定生成该调用信息的节点,作为调用链中第二个节点。依次类推,对于组中任一个调用信息,可以根据该调用信息中节点的标识以及父节点的标识,确定生成该调用信息的节点以及该节点的父节点,从而通过每个调用信息中节点的标识以及父节点的标识,对该组中每个调用信息进行组织,从而串联出一条调用链。
需要说明的是,本步骤中获取到的多个调用链可以属于同一个业务,相应地,后续过程中可以通过该多个调用链的聚类结果,来对该业务进行分析。例如,可以获取登录业务的多个调用链,则后续过程中可以通过该多个调用链的聚类结果,来对登录业务进行分析。又如,可以获取支付业务的多个调用链,则后续过程中可以通过该多个调用链的聚类结果,来对支付业务进行分析。当然,还可以获取其他业务的调用链,本实施例对业务的类型不做限定。
可选地,可以获取多个业务的调用链,对该多个业务的调用链进行分组,得到多个组,每个组包括同一业务的多个调用链,从而将调用链按照业务进行隔离。则本步骤中,可以获取任一组中的多个调用链,来对该组对应的业务进行分析。进一步地,可以针对多个组分别执行下述业务分析的方法,从而实现对多种业务分别进行分析的功能。
在一个示例性场景中,某游戏应用包括登录业务、注册业务、支付业务等10个业务,可以获取该游戏应用的所有调用链,对该游戏应用的所有调用链按照业务分组,得到10个组,第1个组包括登录业务的调用链,第2个组包括注册业务的调用链,依次类推,则后续通过对第1个组的调用链进行聚类运算,可以确定登录业务的性能以及异常,对通过第2个组的调用链进行聚类运算,可以确定注册业务的性能以及异常,依次类推。
关于对多个业务的调用链进行分组的方式,在一种可能的实现中,可以根据调用链的第一个节点的标识,对多个业务的调用链进行分组。对于任两个调用链,可以判断这两个调用链的第一个节点的标识是否相同,若这两个调用链的第一个节点的标识相同,则将两个调用链划分至一个组,则每个组中调用链的第一个节点的标识相同,因此每个组中的调用链对应于同一业务。
可选地,也可以获取多个调用信息,对多个调用信息进行分组,得到多个组,每个组包括同一业务的多个调用信息,从而将调用信息按照业务隔离。之后,对于多个组中的每个组,可以根据该组的多个调用信息,生成多个调用链,之后通过对该多个调用链进行聚类,可以对得到该组对应的业务进行分析。在一个示例性场景中,某游戏应用包括登录业务、注册业务、支付业务等10个业务,可以获取该游戏应用的所有调用信息,对该游戏应用的所有调用链按照业务分组,得到10个组,第1个组包括登录业务的调用信息,第2个组包括注册业务的调用信息,依次类推;之后,可以根据第1个组的调用信息生成调用链,后续通过对第1个组的调用链进行聚类运算,可以确定登录业务的性能以及异常;同理地,可以根据第2个组的调用信息生成调用链,后续通过对第2个组的调用链进行聚类运算,可以确定注册业务的性能以及异常,依次类推。
302、计算机设备基于多个调用链的结构,获取多个调用链之间的相似度。
实现方式一、将调用链表示为树,通过树与树之间的相似度,来获取调用链与调用链之间的相似度。
具体地,实现方式一可以包括下述步骤一至步骤四:
步骤一、计算机设备生成多个树。
每个树用于表示一个调用链。每个树可以包括多个节点,树中的任一节点可以指代调用链中的一个节点,即span。例如,树中的根节点可以指代调用链的第一个节点,树中的叶子节点可以指代调用链的最后一个节点。树中不同节点之间的父子关系可以指代调用链中不同节点之间的调用关系。具体来说,若树中任一节点连接了至少一个子节点,可以指代调用链中对应的节点调用了至少一个子节点。其中,对于树来说,树中任一节点的子节点是指节点连接的下一个节点,树中第i层节点的子节点为第i+1层节点,i为正整数;对于调用链来说,调用链中任一节点的子节点是指节点调用的节点;示例性地,假设树中的各个节点分别采用阿拉伯数字标识,调用链中的各个节点分别采用各个英文字母标识,假设树中节点1指代调用链中节点a,树中节点2指代调用链中节点b,树中节点3指代调用链中节点c,则若树中节点1为节点2和节点3的父节点,可以指代调用链中节点a调用了节点b和节点c。
可选地,树可以为标记树(英文:labeled tree),在生成树的过程中,可以向树中每个节点写入对应调用链中对应节点的标识,以使树中每个节点携带对应调用链中对应节点的标识。具体来说,树中的每个节点携带的标识可以为服务的名称以及函数的名称,例如,树中节点携带的标识可以为“服务名:函数名”,例如可以为:bs-qmall:com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker.invoke。另外,树中的每个节点携带的标识也可以为函数的名称。当然,树中节点携带的标识还可以具有其它任意形式,本实施例对树中节点携带的标识的类型、数据格式以及形式均不做限定。
通过将调用链表示为标记树,至少可以达到以下效果:
对于任两个调用链,若两个调用链的调用关系相似,则基于这两个调用链生成的树的结构也会相似。示例性地,参见图6,调用链1为:函数A调用了函数B和函数C。调用链2为:函数A调用了函数X和函数Y。由于调用链1和调用链2均存在一个函数调用2个函数的调用关系,因此基于调用链1和调用链2生成的树均如树a所示,为一种具有2个分支的树结构,可见两个调用链的树结构相似。而通过将调用链表示为标记树,参见图7,基于调用链1生成的树如树b所示,基于调用链2生成的树如树c所示,树b和树c结构相似,而树中节点携带的标识不同,因此设备可以通过树b和树c中节点的标识,区分树b和树c,因此,在后续聚类过程中,可以避免这两个树相混淆。也即是,可以通过标记树,区分基于调用关系相似而节点不同的调用链生成的树相互混淆的情况,从而提高聚类运算的准确性。
步骤二、对于多个树中的任一树,计算机设备基于树中不同节点之间的逻辑关系,向树添加逻辑节点。
逻辑节点用于表示树中不同节点之间的逻辑关系,也即是调用链中不同节点之间的逻辑关系。具体来说,逻辑节点可以包括顺序节点、并行节点、循环节点以及递归节点中的至少一项。顺序节点用于表示树中不同节点具有按照时间先后顺序依次执行的关系,在程序中,顺序节点可以记录为SEQ(英文:sequential)节点。并行节点用于表示树中不同节点具有同时执行的关系,在程序中并行节点可以记录为AND节点。循环节点用于表示树中任一节点具有循环调用其他节点的关系,在程序中循环节点可以记录为LOOP节点。递归节点用于表示树中任一节点具有调用自身的关系,在程序中递归节点可以记录为REC节点。
可选地,逻辑节点可以位于树中不同节点之间,逻辑节点可以表示树中该逻辑节点的子节点的逻辑执行关系。具体来说,顺序节点可以表示树中该顺序节点的多个子节点具有按照时间先后顺序依次执行的关系。举例来说,参见图8,图8中的树a中SEQ节点即为顺序节点,SEQ节点的子节点为函数B和函数C,SEQ节点表示函数B和函数C按照时间先后顺序依次执行;并行节点可以用于表示树中该并行节点的多个子节点具有同时执行的关系,举例来说,参见图8,图8中的树b中AND节点即为并行节点,AND节点的子节点为函数B和函数C,AND节点表示函数B和函数C同时执行;循环节点可以表示树中该循环节点的父节点循环调用该父节点的子节点,举例来说,图8中的树c中LOOP节点即为循环节点,LOOP节点表示函数A循环调用函数B;递归节点用于表示树中递归节点的子节点具有调用自身的关系,举例来说,图8中的树d中REC节点即为递归节点,REC节点的子节点为函数B,则REC节点表示函数B递归地调用自身。
可选地,与上文中的标记树对应,可以获取逻辑节点的标识,向树中每个逻辑节点写入对应逻辑节点的标识。举例来说,可以向顺序节点写入顺序节点的标识“SEQ”,向并行节点写入并行节点的标识“AND”,向循环节点写入循环节点的标识“LOOP”,向递归节点写入递归节点的标识“REC”。
可选地,向树中添加顺序节点的具体过程可以参见以下(1),向树中添加并行节点的具体过程可以参见以下(2),向树中添加循环节点的具体过程可以参见以下(3),向树中添加递归节点的具体过程可以参见以下(4)。为了区分描述,下述(1)至(4)中将树中的任一节点分别称为第一节点、第二节点、第三节点以及第四节点,相应地,将第一节点的子节点称为第一子节点,将第二节点的子节点称为第二子节点,将第三节点的子节点称为第三子节点,将第四节点的子节点称为第四子节点。需要说明的是,术语“第一节点”、“第二节点”、“第三节点”以及“第四节点”仅是为了区分描述树中不同的节点,而不应理解为明示或暗示节点的顺序、数量、相对重要性以及其他含义。同理地,术语“第一子节点”、“第二子节点”、“第三子节点”以及“第四子节点”仅是为了区分描述树中不同的节点的子节点,而不应理解为明示或暗示节点的顺序、数量、相对重要性以及其他含义。
(1)当树中第一节点具有多个第一子节点时,获取多个第一子节点的调用时间段;当多个第一子节点的调用时间段不重叠时,在第一节点与多个第一子节点之间添加顺序节点,顺序节点用于表示第一节点先后调用多个第一子节点。
调用时间段是指执行调用动作的时间段,调用时间段的起始时间点为开始调用的时间点,调用时间段的结束时间点为结束调用的时间点。例如,调用时间段的起始时间点可以为cs的时间戳,调用时间段的结束时间点可以为cr的时间戳。又如,调用时间段的起始时间点可以为ss的时间戳,调用时间段的结束时间点可以为sr的时间戳。再如,调用时间段的起始时间点可以为cs的时间戳,调用时间段的结束时间点可以为sr的时间戳。再如,调用时间段的起始时间点可以为ss的时间戳,调用时间段的结束时间点可以为cr的时间戳。当然,上述调用时间段的形式仅是举例说明,本实施例对表示调用时间段的时间戳不做限定。
以任两个调用时间段分别称为调用时间段1和调用时间段2为例,参见图9、图10、图11和图12,调用时间段1和调用时间段2重叠可以包括:调用时间段1落在调用时间段2的时间范围内(例如图9)、调用时间段2落在调用时间段1的时间范围内(例如图10)、调用时间段1和调用时间段2的交集大于0(例如图11和图12)这几种情况。相应地,调用时间段1和调用时间段2不重叠可以包括:调用时间段1早于调用时间段2、调用时间段1晚于调用时间段2、调用时间段1的结束时间点和调用时间段2的起始时间点重合这几种情况。以数学的方式表述,假设调用时间段1的起始时间点为cs1,调用时间段1的结束时间点为cr1,调用时间段2的起始时间点为cs2,调用时间段2的结束时间点为cr2,如果符合以下条件(1)至条件(4)中的任一项,则可以视为调用时间段1和调用时间段2重叠。相应地,可以确定调用时间段1对应的节点和调用时间段2对应的节点并行调用。
其中,以下条件(1)至条件(4)中的“>”表示时间关系的晚于,例如,时间t1>时间t2表示时间t1晚于时间t2,以下条件(1)至条件(4)中的“<”表示时间关系的早于,例如,时间t1<时间t2表示时间t1早于时间t2。
条件(1):cs2<cs1<cr1<cr2。符合条件(1)的调用时间段1和调用时间段2可以如图9所示。
条件(2):cs1<cs2<cr2<cr1。符合条件(2)的调用时间段1和调用时间段2可以如图10所示。
条件(3):cs1<cs2<cr1<cr2。符合条件(3)的调用时间段1和调用时间段2可以如图11所示。
条件(4):cs2<cs1<cr2<cr1。符合条件(4)的调用时间段1和调用时间段2可以如图12所示。
相应地,参见图13、图14、图15以及图16,调用时间段1和调用时间段2不重叠可以包括:调用时间段1早于调用时间段2(例如图13)、调用时间段1晚于调用时间段2(例如图15)、调用时间段1的结束时间点和调用时间段2的起始时间点重合(例如图14)、调用时间段2的结束时间点和调用时间段1的起始时间点重合(例如图16)这几种情况。
以数学的方式表述,假设调用时间段1的起始时间点为cs1,调用时间段1的结束时间点为cr1,调用时间段2的起始时间点为cs2,调用时间段2的结束时间点为cr2,如果符合以下条件(5)至条件(6)中的任一项,则可以视为调用时间段1和调用时间段2不重叠。相应地,可以确定调用时间段1对应的节点和调用时间段2对应的节点顺序调用。
条件(5):cr1≤cs2。符合条件(5)的调用时间段1和调用时间段2可以包括图13和图14,表明调用时间段1结束后调用时间段2才开始,可以确定调用时间段1对应的节点先调用,调用时间段2对应的节点晚调用。
条件(6):cr2≤cs1。符合条件(6)的调用时间段1和调用时间段2可以包括图15和图16,表明调用时间段2结束后调用时间段1才开始,可以确定调用时间段2对应的节点先调用,调用时间段1对应的节点晚调用。
在一种可能的实现中,对于树中的任一第一节点,当确定第一节点具有多个第一子节点时,则获取每个第一子节点的至少一个时间戳,根据多个第一子节点的至少一个时间戳,判断多个第一子节点的调用时间段是否重叠,当多个第一子节点的调用时间段不重叠时,可以确定该多个第一子节点按照顺序执行,则生成顺序节点,在第一节点之后、该多个第一子节点之前添加该顺序节点,则添加顺序节点后,顺序节点为第一节点的子节点,同时顺序节点为多个第一子节点的父节点。其中,树中任一节点的时间戳可以为该节点指代的调用链中的节点进行调用的时间戳,具体可以为调用信息中的时间戳,例如,树中节点“函数A”的时间戳可以为节点的标识为“函数A”的span信息中的cs的时间戳以及cr的时间戳。
在一个示例性场景中,参见图17,假设添加顺序节点前,树如图17中的左图所示,当树中的节点“函数A”具有子节点“函数B”和子节点“函数C”时,可以获取子节点“函数B”的cs的时间戳以及cr的时间戳,并获取子节点“函数C”的cs的时间戳以及cr的时间戳,当子节点“函数B”的cr的时间戳早于“函数C”的cs的时间戳时,可以认为“函数B”和“函数C”的调用时间段不重叠,则将“函数B”和“函数C”视为两个顺序调用的节点,则在节点“函数A”与子节点“函数B”和子节点“函数C”之间添加顺序节点“SEQ”,从而得到图17中的右图,图17中的右图中顺序节点“SEQ”为节点“函数A”的子节点,顺序节点“SEQ”为子节点“函数B”和子节点“函数C”的父节点。当然,采用函数B”以及“函数C”的cs的时间戳以及cr的时间戳,来确定“函数B”和“函数C”的调用时间段不重叠,进而在“函数B”和“函数C”之前添加顺序节点仅是一个举例性质的说明,也可以采用函数B”以及“函数C”的ss的时间戳以及sr的时间戳来确定“函数B”和“函数C”的调用时间段不重叠,进而在“函数B”和“函数C”之前添加顺序节点。当然,还可以采用其他类型的时间戳来进行判断,并进而添加顺序节点,在此不对所有的变形方式一一赘述。
可选地,可以使用有序树来表示调用链。具体来说,可以向顺序节点写入多个第一子节点的次序信息,以使顺序节点中携带该多个第一子节点的次序信息,从而可以通过该次序信息,区分多个第一子节点执行的先后顺序。在一种可能的实现中,可以向顺序节点写入次序信息的过程可以包括下述步骤a至步骤b。
步骤a、根据多个第一子节点的时间戳,生成次序信息。
次序信息用于指示第一节点调用多个第一子节点的先后次序。举例来说,次序信息可以包括多个第一子节点的标识,该多个第一子节点的标识的排列顺序可以表示调用多个第一子节点的先后次序。例如,次序信息中任一第一子节点的标识的位置越靠前,表示第一节点越先调用该第一子节点。例如,假设节点“函数A”先调用子节点“函数B”,后调用子节点“函数C”,则次序信息可以包括“函数B,函数C”。
在一种可能的实现中,生成次序信息的过程可以包括:对该多个第一子节点的时间戳按照从早到晚的顺序排序,得到依次排列的多个时间戳,将该多个第一子节点的标识按照该多个时间戳的排列顺序排序,将依次排列的多个第一子节点的标识作为次序信息。其中,可以采用任一种时间戳作为进行排序时使用的时间戳,例如,可以对多个第一子节点的cr的时间戳进行排序,又如,可以对多个第一子节点的cs的时间戳进行排序,本实施例对生成次序信息时使用的时间戳不做限定。
步骤b、向顺序节点写入次序信息。
通过在顺序节点中携带该多个第一子节点的次序信息,至少可以达到以下效果:对于任两个调用链来说,当这两个调用链均具有先后执行的多个第一子节点时,若该多个第一子节点的执行顺序不同,则生成这两个调用链对应的树时,向两个树的顺序节点写入的次序信息不同,从而可以通过两个树的顺序节点,区分这两个树,因此,在后续聚类过程中,可以避免这两个调用链对应的树相互混淆的情况,从而提高聚类运算的准确性。
示例性地,参见图18,调用链1为:函数A先调用了函数B,之后函数A调用了函数C。调用链1对应的树如图18中的树1所示。调用链2为:函数A先调用了函数C,之后函数A调用了函数B。调用链2对应的树如图18中的树2所示。从图18可见,通过将调用链表示为有向树,可以通过树1中顺序节点携带的次序信息,确定树1中函数B执行次序先于函数C;通过树2中顺序节点携带的次序信息,确定树2中函数C执行次序先于函数B。如此,可以通过树1和树2中顺序节点的次序信息,区分树1和树2这两个相似的树,因此在后续对树1和树2进行聚类过程中,可以避免树1和树2混淆,从而提高聚类的准确性。
(2)当树中第二节点具有多个第二子节点时,获取多个第二子节点的调用时间段;当多个第二子节点的调用时间段重叠时,在第二节点与多个第二子节点之间添加并行节点,并行节点用于表示第二节点同时调用多个第二子节点。
在一种可能的实现中,对于树中的任一第二节点,当确定第二节点具有多个第二子节点时,则获取每个第二子节点的至少一个时间戳,根据多个第二子节点的至少一个时间戳,判断多个第二子节点的调用时间段是否重叠,当多个第二子节点的调用时间段重叠时,可以确定该多个第二子节点同时执行,则生成并行节点,在第二节点之后、该多个第二子节点之前添加该并行节点,则添加并行节点后,并行节点为第二节点的子节点,同时并行节点为多个第二子节点的父节点。
在一个示例性场景中,参见图19,假设添加并行节点前,树如图19中的左图所示,当树中的节点“函数A”具有子节点“函数B”和子节点“函数C”时,可以获取子节点“函数B”的cs的时间戳以及cr的时间戳,并获取子节点“函数C”的cs的时间戳以及cr的时间戳,当子节点“函数B”的cr的时间戳早于子节点“函数C”的cr的时间戳时,在节点“函数A”与子节点“函数B”和子节点“函数C”之间添加并行节点“AND”,从而得到图19中的右图,图19中的右图中并行节点“AND”为节点“函数A”的子节点,并行节点“AND”为子节点“函数B”和子节点“函数C”的父节点。当然,采用函数B”以及“函数C”的cs的时间戳以及cr的时间戳,来确定“函数B”和“函数C”的调用时间段重叠,进而在“函数B”和“函数C”之前添加并行节点仅是一个举例性质的说明,也可以采用函数B”以及“函数C”的ss的时间戳以及sr的时间戳来确定“函数B”和“函数C”的调用时间段重叠,进而在“函数B”和“函数C”之前添加并行节点。当然,还可以采用其他类型的时间戳来进行判断,并进而添加并行节点,在此不对所有的变形方式一一赘述。
(3)当树中第三节点具有多个第三子节点,且多个第三子节点连续相同时,在第三节点与目标第三子节点之间添加循环节点,删除多个第三子节点中目标第三子节点以外的第三子节点,目标第三子节点为多个第三子节点中的任一第三子节点,循环节点用于表示第三节点循环调用目标第三子节点。
在一种可能的实现中,对于树中的任一第三节点,当确定第三节点具有多个第三子节点时,则判断多个第三子节点的标识是否连续相同,当多个第三子节点的标识连续相同时,可以确定该第三节点循环调用该多个第三子节点,则生成循环节点,并选取该多个第三子节点中的任一第三子节点为目标第三子节点,在第三节点之后、该目标第三子节点之前添加循环节点,删除目标第三子节点以外的第三子节点。则添加循环节点后,循环节点为第三节点的子节点,同时循环节点为目标第三子节点的父节点。
举例来说,参见图20,图20的上图示出了包含循环调用关系的调用链,图20的下图中的树1示出了添加循环节点前,调用链对应的树1,图20的下图中的树2示出了添加循环节点后,调用链对应的树2。在生成树1后,当确定树1中的节点“函数A”具有100子节点“函数B”时,可以获取100个子节点“函数B”的标识,当100个子节点“函数B”的标识连续相同时,则选取第1个子节点“函数B”为目标第三子节点,在节点“函数A”和第1个子节点“函数B”之间添加循环节点“LOOP”,并删除第2个子节点“函数B”至第100个子节点“函数B”,从而得到图20中的树2。
可选地,在添加循环节点的过程中,若子节点相同但不连续相同,可以为不连续相同的子节点添加顺序节点。具体来说,当当树中第三节点具有多个第三子节点,该多个第三子节点相同且多个第三子节点不连续相同时,可以选取该多个第三子节点中的任一第三子节点为目标第三子节点,在第三节点之后、该目标第三子节点之前添加顺序节点。举例来说,参见图21,在生成树1后,当确定树1中的节点“函数A”具有子节点“函数B”、“函数C”、“函数B”、“函数D”以及“函数B”,则“函数A”虽然具有多个相同的子节点“函数B”,而由于子节点“函数B”不连续相同,则无需添加循环节点,而是添加顺序节点。
可选地,可以获取第三子节点的数量,向循环节点写入该第三子节点的数量,以使循环节点携带第三子节点的数量,从而通过该第三子节点的数量,标识第三节点循环调用第三子节点的次数。例如,如果树中的节点“函数A”具有100个子节点“函数B”时,可以在向树中添加循环节点“LOOP”后,向循环节点“LOOP”写入“100”,从而标识函数A循环调用函数B的次数为100次。
通过在树中添加循环节点,至少可以达到以下效果:
第一,如果调用链中函数A循环调用函数B时,则树中节点“函数A”会具有多个相同的子节点“函数B”,例如如果函数A调用了函数B共计100次,则未添加循环节点前,节点“函数A”会有100个子节点“函数B”,导致树的分支过多,宽度较大,较为冗余,不便查看。而通过向树中添加循环节点,并删除重复的第三子节点,可以减少树的宽度,从而简化树的结构,达到剪枝的效果,让树的结构更加清晰。例如,参见图20,图20的树2中,通过节点“函数A”、节点“函数B”以及循环节点“LOOP”这3个节点,即可表示图20的树1的树结构,同时减少了99个节点“函数B”,从而极大地减少了树中节点的数量,去除了重复的节点,简化了树的结构,则后续基于树来展示调用链时,便于展示调用链的结构,同时帮助用户快速理解调用链的调用关系。
第二,由于后续聚类过程中,会基于树的结构,获取树与树之间的距离,那么如果树中节点数量较多、结构复杂,就会使得聚类时运算量较大。因此,通过向树中添加循环节点,并删除重复的第三子节点,可以简化树的结构,从而减少聚类运算的计算量,提高计算效率。
(4)当树中第四节点具有第四子节点,且第四节点和第四子节点相同时,在第四节点之前添加递归节点,删除第四子节点,递归节点用于表示第四节点调用自身。
在一种可能的实现中,对于树中的任一第四节点,当确定第四节点具有第四子节点时,则判断该第四子节点的标识和第四节点的标识是否相同,当第四子节点的标识和第四节点的标识相同时,可以确定该第四节点调用自身,则在第四节点之前添加递归节点,以使递归节点成为第四节点的父节点,再删除第四子节点。
进一步地,当第四节点具有第四孙子节点时,且第四孙子节点和第四节点相同时,可以删除第四孙子节点。依次类推,可以遍历第四节点的每个后代节点,对于第四节点的任一后代节点,当该后代节点和第四节点相同时,则删除该后代节点。
举例来说,参见图22,图22中的第1个图示出了包含递归调用关系的调用链,图22中的第2个图示出了添加递归节点前,调用链对应的树(即树1),图22中的第3个图示出了添加递归节点后,调用链对应的树(即树2)。在生成树1后,当确定树1中的节点“函数B”具有子节点“函数B”时,且节点“函数B”和子节点“函数B”相同时,可以在节点“函数B”之前添加递归节点“REC”,并删除子节点“函数B”。以此类推,可以遍历节点“函数B”的每个后代节点,确定节点“函数B”具有100个后代节点“函数B”,则删除100个后代节点“函数B”,从而得到图22中的树2。
通过在树中添加递归节点,至少可以达到以下效果:
第一,如果调用链中函数B递归调用自身时,则树中节点“函数B”会具有多层相同的后代节点“函数B”,例如如果函数B共计调用自身100次,则未添加递归节点前,树中会有101层具有节点“函数B”的层,可见树的深度较大,较为冗余,不便查看。而通过向树中添加递归节点,并删除重复的第四子节点,可以简化树的结构,可以减少树的深度,从而简化树的结构,让树的结构更加清晰。例如,参见图22,图22的树2中,通过节点“函数A”、节点“函数B”以及递归节点“REC”这3个节点,即可表示图22的树1的树结构,同时减少了100个节点“函数B”,从而极大地减少了树中节点的数量,去除了重复的节点,简化了树的结构,则后续基于树来展示调用链时,便于展示调用链的结构,同时帮助用户快速理解调用链的调用关系。
第二,由于后续聚类过程中,会基于树的结构,获取树与树之间的距离,那么如果树中节点数量较多、结构复杂,就会使得聚类时运算量较大。因此,通过向树中添加递归节点,并删除重复的第四子节点,可以简化树的结构,从而减少聚类运算的计算量,提高计算效率。
综上所述,上述(1)至(4)示出了添加逻辑节点的示例性实现方式。可选地,对于任一个树来说,可以执行上述(1)至(4)多次。例如,可以遍历树中的每个节点,每当确定任一节点具有多个子节点时,即执行上述(1)至(4)中的任一项或多项的组合。相应地,树中可以具有不同类型的逻辑节点,例如树中既有顺序节点,又有递归节点。其中,遍历树中的每个节点的方式可以包括深度优先遍历算法以及广度优先遍历算法等,本实施例对遍历树的方式不做限定。
需要说明的是,添加逻辑节点的步骤仅是可选步骤,而非必选步骤,可选地,也可以在生成树之后,直接执行下述步骤三或步骤四。
步骤三、计算机设备从一个或多个具有并行路径的树中,删除并行路径中关键路径以外的路径。
并行路径是指同一调用链中调用时间点相同的多段路径。例如,参见图23,调用链为函数A调用函数B和函数C,且函数A调用函数B的调用时间点与函数A调用C的调用时间点相同,即函数A同时调用了函数B和函数C,则路径AB和路径AC为并行路径。关键路径是指并行路径中调用时长最长的路径。例如,参见图23,假设函数B的调用时长为1ms(ms的含义为毫秒),函数C的调用时长为10ms,路径AB和路径AC中调用时长最长的路径为路径AC,则路径AC为关键路径。
关于删除关键路径以外的路径的过程,在一种可能的实现中,对于任一个树来说,可以检测该树是否具有并行路径,当该树具有并行路径时,则确定并行路径中每段路径的调用时长,从并行路径中选取调用时长最长的路径,得到该关键路径,删除关键路径以外的路径。
本步骤可以达到的效果至少可以包括:
由于网络中经常会出现某一节点并行调用其他节点的情况,以致调用链会出现很多并行路径,因此调用链会结构复杂,则基于调用链生成的树也会结构复杂,导致对树聚类时,运算量较大,耗费的计算资源过多。而通过删除关键路径以外的路径,首先,对于关键路径以外的路径来说,由于这些路径的调用时长小于关键路径,因此这些路径对调用链的性能分析或异常分析的影响都较小,因此即使删除掉这些路径,也不会影响分析结果的准确性。另一方面,可以实现对树剪裁的功能,简化树的结构,则对树进行聚类时,可以减少聚类的运算量,显著提高聚类运算的效率,同时节约聚类运算的资源。
例如,参见图23,图23所示的调用链中函数A同时调用了函数B和函数C,假设函数B的调用时长为1ms,函数C的调用时长为10ms,由于函数C的调用时长远大于函数B的调用时长,因此最终决定端到端的响应时长的是函数C。即使函数B出现了异常,调用时长慢了5倍左右,变成了5ms,则由于端到端的响应时长仍然根据函数C的调用时长确定,是10ms,因此最终端到端的响应时长保持不变。可见,删除路径AB不会影响聚类运算的准确性,并且可以减少聚类运算的运算量。
需要说明的是,删除关键路径以外的路径的步骤仅是可选步骤,而非必选步骤,可选地,也可以在生成树之后,直接执行下述步骤四。
步骤四、对于多个调用链中的任两个调用链,获取两个调用链对应的树之间的相似度,作为两个调用链之间的相似度。
具体来说,对于任两个调用链,可以根据两个调用链对应的树,获取两个树的相同子树;根据该相同子树,获取两个树的相似度,作为两个调用链之间的相似度。
该相同子树也称公共子树,是两个树均具有的部分。相同子树包括两个树均具有的节点,同时相同子树中节点之间的关系与两个树中每个树中节点之间的关系对应。相同子树可以视为两个树共同符合的模板,该相同子树的节点数量可以反映两个树中每个树的结构的共性的强弱。举例来说,参见图24,假设两个树为树1和树2,则两个树的相同子树可以为树6。假设两个树为树3和树4,则两个树的相同子树可以为树7。需要说明的是,虽然图24未示出,两个树中的每个树可以具有逻辑节点,在此仅是为了描述方便,未在图24中绘制逻辑节点。
在一种可能的实现中,获取两个树的相同子树的过程可以包括下述步骤3.1至步骤3.2:
步骤3.1、获取两个树相同的节点以及相同的逻辑节点。
可以根据两个树中节点的标识以及逻辑节点的标识,确定两个树相同的节点以及相同的逻辑节点。具体来说,对于两个树中不同树中任两个节点,如果这两个节点的标识以及这两个节点在树中的位置相同时,可以确定这两个节点为两个树中相同的节点。进一步地,当两个树中每个树具有顺序节点,且两个树中每个树的顺序节点的次序信息以及位置相同时,可以确定顺序节点为每个树的相同的逻辑节点。
步骤3.2、基于相同的节点以及相同的逻辑节点,生成两个树的相同子树,该相同子树包括相同的节点以及相同的逻辑节点。
举例来说,参见图24,假设两个树为树1和树2,则可以获取树1和树2中相同的节点为函数0、函数1、函数2、函数4以及函数7,则可以基于函数0、函数1、函数2、函数4以及函数7,生成树6。
关于获取两个树的相似度的过程,在一种可能的实现中,可以获取相同子树的节点数量,基于该相同子树的节点数量,获取两个树中不同树之间的相似度,该相似度与该相同子树的节点数量正相关,也即是,相同子树的节点数量越多,相似度越高。可选地,获取相似度的过程具体可以包括以下方式(1)以及方式(2)中任一种或多种的组合。
方式(1)基于两个树的相同子树的节点数量以及该两个树的节点基数,获取两个树的相似度,相似度与相同子树的节点数量正相关且与节点基数负相关。
节点基数用于指示生成对应树的调用链的节点的数量。具体地,对于两个树的任一个树来说,如果该树基于调用链生成的原始的树,则该树的节点基数可以为树的节点数量,例如可以等于生成该树的调用信息的数量。如果该树为多个树通过聚类生成的相同子树,则该树的节点基数可以根据生成该树的多个树的节点基数确定,例如,树的节点基数可以为生成该树的多个树的节点基数的最大值。
示例性地,参见图24,图24为聚类树状图的示意图,图24的聚类树状图示出了树1、树2、树3、树4以及树5的聚类结果。在聚类树状图中,作为叶子节点的树的节点基数可以等于树的节点数量,例如,树1的节点基数可以等于树1的节点数量,即8。另外,作为非叶子节点的树的节点基数可以等于生成该树的每个叶子节点对应的树的节点基数的最大值,例如,由于树6是树1和树2生成的相同子树,则树6的节点基数可以等于树1的节点基数和树2的节点基数的最大值,由于树1的节点基数为8,树2的节点基数也为8,则树6的节点基数为8和8中的最大值,即8。又如,由于树7是树3和树4生成的相同子树,则树7的节点基数可以等于树3的节点基数和树4的节点基数的最大值,由于树3的节点基数为7,树4的节点基数也为8,则树6的节点基数为7和8中的最大值,即8。
关于获取两个树的相似度的具体过程,可选地,可以获取两个树中相同子树的节点数量,获取两个树中每个树的节点基数,从两个树中每个树的节点基数中选取最大的节点基数,获取相同子树的节点数量与该节点基数之间的比值,将该比值作为两个树的相似度。
示例性地,参见图24,对于树1和树2来说,树1和树2的相同子树6有5个节点,分别是函数0、函数1、函数2、函数4以及函数7,而树1和树2的节点基数均为8,则树1和树2的相似度为5/8=0.633。对于树6和树7来说,树6和树7的相同子树有4个节点,分别是函数0、函数1、函数4以及函数7,而树6和树7的节点基数为8,则树6和树7的相似度为4/8=0.5。
通过这种相似度的计算方式,达到的效果至少可以包括:
在聚类过程中,随着聚类的不断执行,聚类针对的对象会从基于调用链生成的原始的树,变为多个树聚类生成的相同子树,因此会出现:确定出相同子树与相同子树组成的两个树、以及确定出原始的树以及聚类生成的相同子树组成的两个树等情况。由于相同子树的节点数量少于原始的树的节点数量,若直接根据两个相同子树的相同子树的节点数量以及两个相同子树本身的节点数量,确定两个相同子树的相似度,由于相似度的分母较小,会使得计算出的两个相同子树的相似度高于其他两个树的相似度,那么由于每次都会对相似度最高的两个树聚类,会导致这两个相同子树再次被聚类,依次类推,这两个相同子树再次聚类后得到的相同子树的节点数量会更少,因此会被再次和其他相同子树聚类,直至聚成一类。而这种聚类过程,会导致过早生成过于抽象的相同子树,影响聚类结果的准确性。
示例性地,参见图25,当对树1和树2聚类为树6,将树3和树4聚类为树7后,而由于树6和树7为相同子树,树6的节点数量为5,树7的节点数量为5,由于树6和树7的节点数量很少,若直接根据树6和树7的相同子树的节点数量以及树6和树7本身的节点数量,获取树6和树7的相似度,则树6和树7的相似度=4/5=0/8,则树6和树7的相似度会高于树5和树7的相似度,导致树6和树7比树5和树7先聚合,进而导致聚类结果不准确。
而通过这种相似度的计算方法,相同子树的节点基数可以保持不变,例如可以始终为生成该相同子树的多个原始的树的节点基数的最大值,而不会随着聚类过程的执行而减少,因此,当获取相同子树与其他树的相似度时,可以保证相似度的分母可以随着聚类的不断执行而不断变小,也就可以避免相同子树与其他树的相似度过高,也就可以避免相同子树过早地与其他树聚类,从而保证聚类树状图的结构保持均衡,从而可以提高聚类结果的准确性。
方式(2)基于两个树的相同子树的节点数量以及该两个树的节点数量,获取两个树的相似度。
可选地,可以获取两个树中一个或多个树的节点数量,确定两个树中一个或多个树的节点数量的最大值,获取相同子树的节点数量与该节点数量的最大值之间的比值,将该比值作为相似度。以数学的方式表达,树T1和树T2的相似度可以通过以下等式计算:
其中,Sim表示树T1和树T2的相似度,Num表示相同子树的节点数量,|T1|表示树T1的节点数量,|T2|表示树T2的节点数量,max是表示最大值的符号,例如,max(A,B)的含义是A和B中的最大值,“=”是表示数值相等的符号。
采用方式(2)来获取两个树的相似度时,生成的聚类树状图可以如图25所示。
需要说明的是,上述方式(1)以及方式(2)仅是对基于相同子树来获取不同树之间的相似度的举例说明,可选地,还可以通过方式(1)以及方式(2)以外的其他方式,来基于相同子树来获取不同树之间的相似度。当然,还可以无需获取不同树之间的相同子树,而是通过相同子树以外的其他方式来获取不同树之间的相似度。例如,可以根据不同树之间相互转换时经过的次数,来获取不同树之间的相似度。举例来说,以两个调用链对应的树分别称为第一树和第二树为例,可以获取第一树剪切为第二树经过的次数,根据该次数获取第一树与第二树之间的相似度,该相似度与该次数正相关。又如,可以根据树的结构,将树建模为向量,获取不同向量之间的相似度,作为不同树之间的相似度。再如,可以获取大量的样本调用链对应的样本树,预先为不同样本树标注相似度;采用机器学习算法,根据标注了相似度的样本树进行训练,得到相似度预测模型,使用该相似度预测模型,来预测不同树之间的相似度。当然,还可以采用其他相似度函数或距离函数来获取不同树之间的相似度,该相似度函数或距离函数可以根据实验、经验、需求或业务场景任意选取,本实施例对获取不同树之间的相似度的具体方式不做限定。
实现方式二、将调用链建模为向量,通过向量与向量之间的相似度,来获取调用链与调用链之间的相似度。
具体地,实现方式二可以包括下述步骤一至步骤四:
步骤一、基于多个调用链,获取多个调用链的向量。
每个向量用于指示一个调用链的结构。具体地,向量可以包括至少一个维度,向量的每个维度对应一种特征,向量在任一维度的取值可以指示该维度对应的特征的特征值。如此,可以将调用链表示为高维向量空间中的一个点。以数学的方式表述,假设调用链具有n种特征,相应地,调用链的向量可以具有n个维度。假设向量表示为x,则x={x1、x2、…,xn},其中n为正整数。
其中,在一种可能的实现中,向量在任一维度的取值可以等于该维度对应的特征的特征值,例如,向量在任一维度的取值为m,表示调用链在该维度对应的特征的特征值为m。在另一种可能的实现中,向量在任一维度的取值也可以为二值化的值。例如,向量在任一维度的取值可以为第一取值或第二取值,向量在任一维度的取值取第一取值时,表示调用链在该维度对应的特征的特征值未超过特征值阈值,向量在任一维度的取值取第二取值时,表示调用链在该维度对应的特征的特征值超过特征值阈值。其中,第一取值和第二取值可以为任两个不同的数值,例如,第一取值可以为0,第二取值可以为1。当然,这两种实现方式仅是举例说明,向量在任一维度的取值还可以具有其他任意含义,例如可以为与维度对应的特征的特征值存在相关关系的任一数值,本实施例对此不做限定。
关于将调用链建模为向量的具体过程,在一种可能的实现中,对于多个调用链中的任一调用链,可以获取调用链的至少一种特征,根据调用链中的至少一种特征,获取向量中至少一种维度的取值。其中,在一种可能的实现中,可以将向量中对应的维度置为维度对应的特征的特征值,在另一种可能的实现中,也可以根据调用链的至少一种特征,对向量中至少一种维度的取值进行二值化。例如,可以判断特征是否超过特征值阈值,若特征超过特征值阈值,则将向量中对应的维度置为第一取值,若特征未超过特征值阈值,将向量中对应的维度置为第二取值。当然,这两种实现方式仅是举例说明,将调用链建模为向量的过程还可以采用任意算法实现,例如可以获取与维度对应的特征的特征值存在相关关系的任一数值,将向量中对应的维度置为与该特征值存在相关关系的数值,本实施例对此不做限定。
示例性地,以采用调用链的节点数量和/或深度,作为建模时使用的调用链的特征为例,步骤一可以通过下述步骤1.1至步骤1.2实现:
步骤1.1对于多个调用链中的任一调用链,获取调用链的节点数量以及深度中的至少一项。
调用链的节点数量可以为调用链中所有span的数量。可选地,调用链的节点数量可以在程序中记为“span_num”。调用链的深度可以为调用链的层数。可选地,调用链的深度可以在程序中记为“depth”。
步骤1.2根据节点数量以及深度中的至少一项,获取调用链的向量。
在一种可能的实现中,对于多个调用链中的任一调用链,可以获取调用链的节点数量以及深度中的至少一项,根据调用链的节点数量以及深度中的至少一项,获取向量中至少一种维度的取值。
其中,以向量的维度为2为例,在一种可能的实现中,可以将向量中节点数量对应的维度置为调用链的节点数量,将向量中深度对应的维度置为调用链的深度。在另一种可能的实现中,也可以根据调用链的节点数量以及深度中的至少一项,对向量中2个维度的取值进行二值化。例如,可以判断调用链的节点数量是否超过节点数量阈值,若节点数量超过节点数量阈值,则将向量中节点数量的维度置为第一取值,若节点数量未超过节点数量阈值,将向量中对应的维度置为第二取值。同理地,可以判断调用链的深度是否超过深度阈值,若深度超过深度阈值,则将向量中深度的维度置为第一取值,若深度未超过深度阈值,将向量中对应的维度置为第二取值。当然,这两种实现方式仅是举例说明,将调用链建模为向量的过程还可以采用任意算法实现,例如可以获取与节点数量存在相关关系的任一数值,将向量中节点数量对应的维度置为与该节点数量存在相关关系的数值,本实施例对此不做限定。
示例性地,每个调用链可以表示为一个2维向量,假设向量表示为x,则x={节点数量,深度},则调用链可以映射为二维空间内的一个点。如果有一组调用链,则可以将一组调用链映射为二维空间内的多个点。例如,,假设有以下六个调用链,节点数量个数和深度如下表2所示,则参见图26,这6个调用链可以映射为二维空间的6个点,点的横坐标为节点数量个数,点的纵坐标为深度,例如调用链1映射为(15,8),调用链2映射为(16,7),以此类推。
表2
调用链 | 节点数量 | 深度 |
调用链1 | 15 | 8 |
调用链2 | 16 | 7 |
调用链3 | 12 | 7 |
调用链4 | 32 | 12 |
调用链5 | 35 | 14 |
调用链6 | 33 | 11 |
当获取调用链的向量之后,可以执行下述步骤二或者下述步骤三,来获取调用链与调用链之间的相似度。
步骤二、对于多个调用链中的任两个调用链,根据两个调用链对应的向量之间的距离,获取两个调用链之间的相似度。
对于多个调用链中的任两个调用链,可以根据两个调用链对应的向量,获取两个向量之间的距离,根据两个向量之间的距离,获取两个调用链之间的相似度,该相似度与向量之间的距离负相关,即,两个向量之间的距离越小,表明两个调用链之间的相似度越大。
其中,关于获取向量之间的距离的方式,举例来说,可以获取两个向量的欧式距离(英文名称:euclidian distance),作为向量之间的距离。具体地,假设向量的维度为2,并假设两个向量分别为p1(x1,y2)、p2(x2,y2),则两个向量的欧式距离可以通过以下公式获取:
其中,ρ表示p1(x1,y2)和p2(x2,y2)这两个向量的欧式距离。
需要说明的是,上述仅是以向量的维度为2为例进行举例说明,可选地,调用链可以具有3个或3个以上的特征,相应地,调用链的向量可以具有3个或3个以上的维度,如此,通过将调用链建模为向量,可以将调用链映射为高维空间中的点。以调用链的向量具有n个维度为例,假设两个向量分别表示为x={x1,x2,…,xn}和y={y1,y2,…,yn},则这2个向量的欧式距离可以通过以下公式获取:
其中,d(x,y)表示x={x1,x2,…,xn}和y={y1,y2,…,yn}这两个向量的欧式距离。
需要说明的是,欧式距离仅是对向量之间的距离的举例说明,可选地,可以通过其他方式,来获取向量之间的距离。示例性地,可以通过欧式距离、切比雪夫距离、汉明距离、标准欧氏距离、相关距离等任意方式来获取向量之间的距离,当然,还可以通过设置任一距离函数,采用距离函数对两个向量进行运算,得到向量之间的距离,本实施例对获取向量之间的距离的具体方式不做限定。
关于根据向量之间的距离获取调用链之间的相似度的方式,可以获取与向量之间的距离负相关的任一数值,作为调用链之间的相似度。例如可以获取向量之间的距离的负数作为调用链之间的相似度,又如可以获取向量之间的距离的倒数作为调用链之间的相似度等,本实施例对此不做限定。
步骤三、对于多个调用链中的任两个调用链,根据两个调用链对应的向量之间的相似度,获取两个调用链之间的相似度。
对于多个调用链中的任两个调用链,可以根据两个调用链对应的向量,获取两个向量之间的相似度,根据两个向量之间的相似度,获取两个调用链之间的相似度,该相似度与向量之间的相似度负相关,即,两个向量之间的相似度越大,表明两个调用链之间的相似度越大。
其中,关于获取向量之间的距离的方式,举例来说,可以获取两个向量的余弦相似度,作为向量之间的距离。当然,还可以采用任意相似度函数对两个向量进行运算,得到向量之间的相似度。本实施例对获取向量之间的相似度的具体方式不做限定。
303、计算机设备基于多个调用链之间的相似度,对多个调用链聚类,得到一个或多个类。
类又称簇,是指彼此相似的对象组成的集合。本实施例中,类包括至少一个调用链,同一个类中不同的调用链之间的结构相似,而不同类中调用链之间的结构不相似。具体地,与上述步骤302中的实现方式一对应,步骤303可以包括下述实现方式一。与上述步骤302中的实现方式二对应,步骤303可以包括下述实现方式二。
实现方式一、计算机设备基于多个树之间的相似度,对多个树聚类,得到一个或多个类,每个类包括具有相同子树的多个调用链。
可选地,可以基于多个树之间的相似度,对多个树层次聚类(英文名称:Hierarchical Clustering),得到聚类树状图(英文名称为:dendrogram),对聚类树状图解析,得到一个或多个类。需要说明的是,本实施例中“树”的概念与“聚类树状图”的概念不同,“树”是指表示调用链的数据,每个“树”可以等价为一个调用链。而“聚类树状图”是一种以树状结构进行表示的聚类结果,“聚类树状图”中的叶子节点指代一个调用链,“聚类树状图”中的非叶子节点指代多个调用链聚成的一个类。
在一种可能的实现中,层次聚类的过程可以包括下述步骤a至步骤d:
步骤a、将每个树作为一个类。
在开始聚类时,可以将每个调用链对应的树作为初始的类。相应地,可以在聚类树状图中生成多个叶子节点,每个叶子节点可以指代每个调用链对应的树。例如,参见图24或图25,假设上述过程中为5个调用链生成了5个树,可以将这5个树均作为类,从而得到初始的5个类,相应地,在聚类树状图中生成5个叶子节点,这5个叶子节点指代这5个树。
步骤b、根据不同树之间的相似度,生成相似度矩阵。
相似度矩阵中每一行指代一个树,每一列指代一个树,相似度矩阵中每个元素为行指代的树与列指代的树之间的相似度。示例性地,该相似度矩阵可以如图27所示。
关于生成相似度矩阵的过程,可选地,可以从多个树中任选两个树;获取两个树之间的相似度;将相似度矩阵中该两个树对应的元素置为该相似度。
步骤c、更新相似度矩阵。
可以根据相似度矩阵中的每个相似度,从相似度矩阵中选取最高的相似度,确定该最高的相似度所处的行和列,对行和列对应的两个树进行聚类,得到一个相同子树。之后,可以从相似度矩阵中,删除这两个树对应的行和列,并向相似度矩阵中,为生成的相同子树添加行和列,从而更新相似度矩阵。相应地,可以从聚类树状图中选取最高的相似度对应的两个叶子节点,为这两个叶子节点向聚类树状图中添加一个非叶节点,该非叶节点为这两个叶子节点的父节点。
之后,可以根据更新后的相似度矩阵,重复执行上述步骤二和步骤三,随着聚类过程的不断执行,相似度矩阵中被删除的行和列会越来越多,则相似度矩阵的元素会越来越少,相应地,聚类树状图中非叶节点会越来越多,聚类树状图的高度会越来越大。当相似度矩阵剩余一个元素,聚类树状图生成了根节点时,表明多个调用链对应的树已经聚成一类,聚类过程完成。
步骤d、解析聚类树状图。
可选地,可以从聚类树状图中选择一个或多个剪切位置,沿着该一个或多个剪切位置对聚类树状图剪切,得到一个或多个类。在一种可能的实现中,从聚类树状图中选择剪切位置的方式可以包括下述(1)至(3)中任一项或多项的结合:
(1)可以获取相似度阈值,确定聚类树状图中相似度等于该相似度阈值的位置,将该相似度等于相似度阈值的位置作为剪切位置,则沿着一个或多个剪切位置对聚类树状图剪切后,可以得到一个或多个相似度大于该相似度阈值的类。示例性地,参见图28,通过相似度阈值,对聚类树状图剪切后可以得到4个类。其中,该相似度阈值可以根据实验或经验确定,本实施例对相似度阈值的具体数值不做限定。
(2)可以获取预设数量,从聚类树状图中,选择数量为该预设数量的剪切位置,沿着该剪切位置对聚类树状图剪切,得到数量为预设数量的类。示例性地,参见图28,假设预设数量为7,则可以从聚类树状图中,选择7个剪切位置,沿着该7个剪切位置对聚类树状图剪切,得到7个类。
(3)可以获取聚类树状图的高度半值,确定聚类树状图中高度与该高度半值对应的位置,作为剪切位置,沿着一个或多个剪切位置对聚类树状图剪切,得到一个或多个类。其中,该高度半值可以为聚类树状图的总层数的一半。示例性地,参见图28,图28中聚类树状图共计有4层,则高度半值为2,可以将聚类树状图中第2层下方的位置作为剪切位置,得到14个剪切位置,每个剪切位置下方的所有叶子节点为1个类,共计14个类。
可选地,上述(1)至(3)仅是对解析聚类树状图的方式的举例描述,还可以采用上述(1)至(3)以外的其他方式解析聚类树状图,例如可以结合聚类树状图的具体形态,解析聚类树状图,本实施例对解析聚类树状图的具体方式不做限定。
需要说明的是,层次聚类仅是对树进行聚类的举例说明,可选地,可以采用任一种聚类算法,来对多个树进行聚类,得到至少一个类。其中,对树进行聚类的方式包括而不限于基于划分的聚类算法、基于密度的聚类算法、基于网络的聚类算法、基于模型的聚类算法、基于模糊的聚类算法、基于约束的聚类算法、基于约束的聚类算法、基于粒度的聚类算法、谱聚类算法、核聚类算法、量子聚类算法中的任一种或多种的结合,本实施例对聚类算法不做限定。以采用谱聚类算法对多个树进行聚类为例,对多个树进行聚类的过程可以包括:可以将每个树映射为空间中的一点,将多个点以边连接,得到无向图。对于任两个点对应的边,根据两个点对应的树之间的相似度,获取边对应的权重,该权重与相似度正相关。之后,可以根据各个边的权重,对无向图进行切图,得到该无向图的至少一个子图,以使同一子图中不同的权重的和值尽量高,而不同子图中边的权重的和值尽量低。之后,可以将每个子图中的所有点对应的树作为一个类。以采用k-means算法对多个树进行聚类为例,假设树的数量为n1,类的数量为k1,对多个树进行聚类的过程可以包括:从n1个树中,任选k1个树,作为k1个初始化的类;对于剩余的n1-k1个树中的每个树,基于树的相似度,获取树与k1个初始化的类的距离,得到k1个距离;根据该k1个距离,从k1个初始化的类中选取最小的距离对应的初始化的类,将该树归入到该初始化的类中;对每个树执行上述步骤,从而将n1-k1个树归入k1个初始化的类中;对于k1个初始化的类中的每个类,根据类中每个树的相似度,获取该类中的所有树的平均值,作为类的中心值;获取所有树与k1个中心值的距离,循环执行在所有树中分出k1个类,并计算类的中心值的步骤,直到循环次数大于预设的循环次数为止,得到k1个类。其中,n1和k1为正整数,且n1大于或等于k1。
实现方式二、计算机设备基于多个向量之间的相似度,对多个向量聚类,得到一个或多个类,每个类包括至少一个向量。
可选地,可以基于多个向量之间的相似度,对多个向量层次聚类,得到聚类树状图,对聚类树状图解析,得到一个或多个类。在一种可能的实现中,层次聚类的过程可以包括下述步骤a至步骤d:
步骤a、将每个向量作为一个类。
在开始聚类时,可以将每个调用链对应的向量作为初始的类。相应地,可以在聚类树状图中生成多个叶子节点,每个叶子节点可以指代每个调用链对应的向量。
步骤b、根据不同向量之间的相似度,生成相似度矩阵。
相似度矩阵中每一行指代一个向量,每一列指代一个向量,相似度矩阵中每个元素为行指代的向量与列指代的向量之间的相似度。示例性地,该相似度矩阵可以如图27所示。关于生成相似度矩阵的过程,可选地,可以从多个向量中任选两个向量,将两个向量作为一个向量组合,得到多个向量组合;对于多个向量组合中的任一向量组合,可以根据向量组合中不同向量之间的相似度,将相似度矩阵中该向量组合对应的元素置为该相似度。其中,关于获取向量组合中不同向量的相似度的方式,可选地,对于多个向量组合中的每个向量组合,可以基于向量组合中各个向量的相同子向量,获取向量组合中不同向量之间的相似度。
步骤c、更新相似度矩阵。
可以根据相似度矩阵中的每个相似度,从相似度矩阵中选取最高的相似度,确定该最高的相似度所处的行和列,对行和列对应的两个向量进行聚类,得到一个类。之后,可以从相似度矩阵中,删除这两个向量对应的行和列,并向相似度矩阵中,为生成的类添加行和列,从而更新相似度矩阵。相应地,可以从聚类树状图中选取最高的相似度对应的两个叶子节点,为这两个叶子节点向聚类树状图中添加一个非叶节点,该非叶节点为这两个叶子节点的父节点。
之后,可以根据更新后的相似度矩阵,重复执行上述步骤二和步骤三,随着聚类过程的不断执行,相似度矩阵中被删除的行和列会越来越多,则相似度矩阵的元素会越来越少,相应地,聚类树状图中非叶节点会越来越多,聚类树状图的高度会越来越大。当相似度矩阵剩余一个元素,聚类树状图生成了根节点时,表明多个调用链对应的向量已经聚成一类,聚类过程完成。
步骤d、解析聚类树状图。
实现方式二的步骤d与上述实现方式一的步骤d同理,在此不做赘述。
需要说明的是,层次聚类仅是对向量进行聚类的举例说明,可选地,可以采用任一种聚类算法,来对多个树进行聚类,得到至少一个类。其中,对向量进行聚类的方式包括而不限于基于划分的聚类算法、基于密度的聚类算法、基于网络的聚类算法、基于模型的聚类算法、基于模糊的聚类算法、基于约束的聚类算法、基于约束的聚类算法、基于粒度的聚类算法、谱聚类算法、核聚类算法、量子聚类算法中的任一种或多种的结合,本实施例对聚类算法不做限定。以采用谱聚类算法对多个向量进行聚类为例,对多个向量进行聚类的过程可以包括:可以将每个向量映射为空间中的一点,将多个点以边连接,得到无向图。对于任两个点对应的边,根据两个点对应的向量之间的相似度,获取边对应的权重,该权重与相似度正相关。之后,可以根据各个边的权重,对无向图进行切图,得到该无向图的至少一个子图,以使同一子图中不同的权重的和值尽量高,而不同子图中边的权重的和值尽量低。之后,可以将每个子图中的所有点对应的向量作为一个类。以采用k-means算法对多个向量进行聚类为例,假设向量的数量为n2,类的数量为k2,对多个向量进行聚类的过程可以包括:从n2个向量中,任选k2个向量,作为k2个初始化的类;对于剩余的n2-k2个向量中的每个向量,基于向量的相似度,获取向量与k2个初始化的类的距离,得到k2个距离;根据该k2个距离,从k2个初始化的类中选取最小的距离对应的初始化的类,将该向量归入到该初始化的类中;对每个向量执行上述步骤,从而将n2-k2个向量向量归入k2个初始化的类中;对于k2个初始化的类中的每个类,根据类中每个向量的相似度,获取该类中的所有向量的平均值,作为类的中心值;获取所有向量与k2个中心值的距离,循环执行在所有向量中分出k2个类,并计算类的中心值的步骤,直到循环次数大于预设的循环次数为止,得到k2个类。其中,n2和k2为正整数,且n2大于或等于k2。
综上所述,通过执行上述流程,可以按照调用链的结构,将同一业务的大量调用链聚为不同的类,同一类中不同调用链的结构相似,而不同类中调用链的结构的差异较大。而一种调用链的结构可以视为业务的一种执行过程的采样快照,能够代表业务的这种执行过程的场景。例如,支付业务的大量调用链可以聚为3个类,第1个类代表余额支付的场景,第2个类代表银行卡支付的场景,第3个类代表社交应用代付的场景。因此,当将业务的调用链划分为类以后,也就实现了将业务划分为场景的功能,可以基于场景对业务进行分析,从而将场景引入应用性能管理的系统架构中,对应用性能管理的数据模型带来了巨大的改变。
例如,参见图29,传统的应用性能管理的系统架构由3层组成,自顶而下分别是业务、调用链以及调用信息。而通过执行上述流程,参见图30,可以将类代表的场景引入应用性能管理的系统架构中,将场景作为业务与调用链之间的一层,则应用性能管理的系统架构可以变为4层,自顶而下分别是业务、场景、调用链以及调用信息。由此,可以对同一业务区分不同的场景,分别针对每个场景进行调用链的分析。如此,通过引入基于场景的业务分析,可以极大地扩展应用性能管理的功能,提升用户体验。以下通过下述步骤304至305,对基于场景的业务分析的应用进行示例性描述。
304、计算机设备基于一个或多个类,进行调用链的性能分析或调用链的异常分析。
对于任一业务来说,业务的同一种场景的调用链的结构相似,而不同场景的调用链的结构不相似。因此,通过执行上述步骤,将调用链按照结构之间的相似度,聚成一个或多个类,每个类可以代表业务的一种场景,通过对每个类进行调用链的性能分析。
需要说明的是,“类”和“场景”为两个等同的术语,均指代结构相似的多个调用链。可选地,可以在后台运算时,将聚类结果称为“类”,而在前台展示时,将聚类结果称为“场景”,从而通过“场景”这个相对通俗易懂的术语,帮助用户理解“类”的含义。当然,“场景”仅是“类”的一种名称,“类”还可以称为“组”、“群”、“簇”、“group”(含义为组)、“集合”等,当然“类”还可以具有其他等同含义的称呼,后续若出现与本实施例中定义的“类”的含义实质相同的其他术语,可以将“类”调换和更改为该其他术语。
可选地,步骤304可以包括下述应用方式一至应用方式五中的任一项或多项的组合。
应用方式一、可以获取每个类的性能分析阈值,通过每个类的性能分析阈值,对每个类进行调用链的性能分析。其中,性能分析阈值用于检测调用链的性能,举例来说,性能分析阈值可以包括时延阈值、错误次数阈值等。当然,性能分析阈值还可以为其他类型的阈值,可以为任一能够指示服务质量(quality of service,缩写:QoS)问题的参数,包括而不限于调用链长度、调用链对应的调用信息数量、类的相同子树的层数等,本实施例对性能分析阈值的具体类型不做限定。
关于性能分析的具体过程,对于任一个类中的任一个调用链,可以判断该调用链的性能参数是否大于类对应的性能分析阈值,当调用链的性能参数大于性能分析阈值时,则将该调用链视为性能不符合要求的调用链,输出该调用链。以性能分析阈值为时延阈值为例,可以判断该调用链的时延是否大于类对应的时延阈值,当调用链的时延大于时延阈值时,则将该调用链视为慢链,输出该调用链。
关于获取类的性能分析阈值的过程,可选地,可以获取类与性能分析阈值之间的对应关系,对于聚类得到的任一个类,可以查询该对应关系,得到类对应的性能分析阈值。其中,类与性能分析阈值之间的对应关系包括至少一个类以及对应的至少一个性能分析阈值。以性能分析阈值为时延阈值为例,类与时延阈值之间的对应关系可以如下表3所示。
表3
类 | 时延阈值 |
类1 | 10ms |
类2 | 1s |
…… | …… |
类n | 500ms |
可选地,不同类对应的性能分析阈值可以不同。如此,对于任两个调用链来说,当两个调用链的性能参数相同时,若两个调用链属于不同的类,由于两个类的性能分析阈值不同,则两个调用链的性能分析结果可以不同。
举例来说,假设某支付业务具有余额扣款的场景(以下简称场景a)以及银行卡扣款的场景(以下简称场景b),场景a下的调用链的平均时延为10ms,其中调用链x的时延为50ms。场景b下的调用链的平均时延为1s,其中调用链y的时延为50ms。经过聚类后,确定调用链1属于场景a,调用链2属于场景b。可以设置场景a对应的时延阈值为12ms,场景b对应的时延阈值为1.2s。那么,在进行调用链的性能分析时,由于调用链x的时延大于场景a对应的时延阈值,因此通过场景a的时延阈值,能够检测出调用链x为慢链。由于调用链y的时延小于场景b对应的时延阈值,因此通过场景b的时延阈值,能够检测出调用链y为正常链。
由此例可以看出,通过将调用链划分为不同的类,按照类对应的性能分析阈值进行调用链的性能分析,一方面,对于正常情况下性能参数良好,而由于出现问题而导致性能参数异常差的调用链来说,如果这种调用链混杂在其他场景下的调用链中,将导致出现问题的调用链无法检测出来,导致漏检测。结合上例,若通过1.2s的时延阈值检测调用链,则会将调用链x和场景b下的调用链混杂在一起,也就会将调用链x和场景b下的调用链均检测为正常链,而无法检测出调用链x为场景a下的慢链。而通过按照调用链对应的类的性能分析阈值来进行调用链的性能分析,若任一调用链出现问题,该调用链的性能参数将会差于该调用链所属的类的其他调用链,因此可以区分不同场景下的调用链,从而准确地检测出出现问题的调用链。例如结合上例,通过12ms的时延阈值检测类1的调用链,通过1.2s的时延阈值检测类2的调用链,可以将存在问题的调用链x与场景b下的调用链区分开来,从而准确地将调用链1检测为慢链。另一方面,对于由于调用链结构复杂、经过的网元较多、业务处理的运算量较大等原生因素而导致正常情况下性能参数较差的调用链来说,如果通过其他场景下的性能分析阈值,来分析这种正常情况下性能参数较差的调用链,将导致这些并未出现问题的调用链也检测为出现问题的调用链,导致误检测。结合上例,若通过12ms的时延阈值检测调用链,则会将场景b下的调用链均检测为慢链。而通过按照调用链对应的类的性能分析阈值来进行调用链的性能分析,对于由于其原生因素而导致性能参数较差且未出现问题的调用链来说,该类的性能分析阈值会较高,因此不会将该调用链误检测为出现问题的调用链。例如结合上例,通过1.2s的时延阈值检测类2的调用链,可以避免场景b下的调用链被误检测为慢链。综合上述第一方面和第二方面,可以证明,通过本实施例提供的方法,可以极大地提高调用链的性能分析的准确性。
关于建立该类与性能分析阈值之间的对应关系的过程,在一种可能的实现中,可以基于类的多个调用链的性能特征,获取类对应的性能分析阈值。例如,可以获取类的多个调用链的性能特征的平均值,作为类对应的性能分析阈值。当然,该类与性能分析阈值之间的对应关系也可以根据经验或实验设置,本实施例对此不做限定。
在一个示例性实例中,参见图31,对某业务的1215个调用链聚类后得到了2个类(在图31中将类称为场景),类1的调用链的平均时延大约在10ms左右,类2的调用链的平均时延大约在1s左右。可以将类1的调用链的时延阈值设置为10ms,通过10ms,对类1进行调用链的性能分析,具体地,可以检测类1中每个调用链的时延是否大于10ms,当类1中任一调用链的时延大于10ms时,则输出类1的该调用链;将类2的调用链的时延阈值设置为1s,通过1s,对类2进行调用链的性能分析,具体地,可以检测类2中每个调用链的时延是否大于1s,当类2中任一调用链的时延大于10ms时,则输出该类的调用链。其示出了性能分析的结果示意图,可见,采用本实施例提供的方法,可以准确地将类1中3个时延为200ms的调用链,识别为性能存在问题的调用链。
可选地,可以将类对应的相同子树,输出为类的调用链结构。其中,可以将类的调用链结构,作为类代表的场景的调用链结构,显示场景的调用链结构。示例性地,参见图32,假设对某业务的调用链聚类后,得到了4个类,可以将类1的相同子树,输出为场景1的调用链结构,将类2的相同子树,输出为场景2的调用链结构,依次类推,可以显示4个场景的调用链结构。
应用方式二、具体可以包括下述步骤一至步骤二:
步骤一、对于一个或多个类中的任一类,获取类的性能分析模型在当前时间点的第一性能参数。
性能分析模型用于指示类的调用链的性能参数的正常变化趋势。性能分析模型可以视为调用链的性能参数的基线,当调用链的性能参数符合该性能分析模型时,可以确定调用链的性能参数正常,当调用链的性能参数偏离该性能分析模型时,可以确定调用链的性能参数异常。
可选地,性能参数可以包括时延、错误率以及吞吐量中的至少一种。相应地,性能分析模型可以包括时延分析模型、错误率分析模型以及吞吐量分析模型中的至少一项。当然,性能参数还可以为其他需要分析的参数,性能分析模型还可以为用于分析其他性能参数的模型,本实施例对性能参数的类型以及性能分析参数的类型均不做限定。
可选地,性能分析模型的数据形式可以为函数、曲线或者直线,当然性能分析模型还可以采用其他数据形式表示。可选地,性能分析模型可以为周期性函数,性能分析模型的周期可以包括日、周等。示例性地,参见图33和图34,图33和图34为性能分析模型的示意图,性能分析模型可以如图33和图34中的周期性曲线所示。
可选地,类的性能分析模型可以根据对应类的调用链的历史数据获取。例如,类的时延分析模型可以根据对应类的调用链的历史时延获取,类的吞吐量分析模型可以根据对应类的调用链的历史吞吐量获取。
可选地,不同类的性能分析模型可以不同。以性能分析模型的数据形式为曲线为例,不同类的性能分析曲线的形状可以不同,具体地,不同类的性能分析曲线可以具有不同的频率、波峰以及波谷,如此,可以根据任一类的性能分析模型,对相应类的调用链进行性能分析,从而保证性能分析结果与对应类匹配。
可选地,第一性能参数为性能分析模型在当前时间点的取值。例如,假设性能分析模型表示为y=f(t),其中f表示函数,t表示时间,y表示性能分析模型,可以将t取当前时间点,带入该性能分析模型,将得到的y作为第一性能参数。
步骤二、通过类中调用链在当前时间点的第二性能参数与第一性能参数之间的偏差,对类进行调用链的性能分析。
对于至少一个类中的每个类,可以获取类中的调用链在当前时间点的第二性能参数,获取第二性能参数与第一性能参数之间的偏差,通过该偏差,对类进行调用链的性能分析。其中,关于通过偏差进行性能分析的方式,举例来说,可以设置偏差阈值,当偏差大于偏差阈值时,则将该调用链视为性能不符合要求的调用链,可以输出该调用链。在一个示例性场景中,假设性能分析模型为时延分析模型,可以获取类中调用链在当前时间点的时延以及时延分析模型在当前时间点的时延,获取2个时延之间的偏差,当偏差大于偏差阈值时,将调用链输出为慢链。当然,通过偏差阈值来进行性能分析的过程仅是举例描述,还可以采用其他方式进行性能分析,例如,可以实时获取类在当前时间点的第二性能参数与第一性能参数之间的偏差,随着时间的推移,得到多个偏差,当该多个偏差中预设数量的偏差大于偏差阈值时,将调用链输出为慢链。
应用方式三、可以获取每个类的异常分析阈值,通过每个类的异常分析阈值,对每个类进行调用链的异常分析。其中,异常分析阈值用于检测调用链是否出现异常,举例来说,异常分析阈值可以包括调用链长度阈值、时延阈值、错误次数阈值、调用信息次数阈值、调用次数阈值等。当然,异常分析阈值还可以为其他类型的阈值,例如可以为任意能够指示非QoS问题的参数,本实施例对异常分析阈值的具体类型不做限定。
通过类的异常分析阈值进行调用链的异常分析与上述通过性能分析阈值进行调用链的性能分析的过程同理,详见上述描述,在此不做赘述。
应用方式四、计算机设备基于一个或多个类,检测调用链中的断链。
断链是指未执行完成的调用链。断链为调用链的子链,断链的节点数量可以小于调用链的节点数量,断链的深度可以小于调用链的深度。其中,子链为调用链中的一部分,子链包括调用链中一个或多个连续的节点,子链的节点数量小于调用链的节点数量。以数学的方式表述,对于两个调用链C1和C2,如果C1和C2符合:C1∩C2=C1,则可以确定C1为C2的子链。其中,符号∩表示取交集。
关于检测断链的具体过程,对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链与第二调用链符合偏差条件时,将第一调用链输出为第二调用链的断链。其中,第一调用链以及第二调用链为同一个类中任两个不同的调用链。偏差条件用于指示断链与正常调用链相比具有的偏差,偏差条件可以根据断链的节点数量与正常调用链的节点数量的比例、断链的深度与正常调用链的深度的比例、断链的节点数量与正常调用链的节点数量的差值、断链的深度与正常调用链的深度的差值中的至少一项确定。
示例性地,检测断链的具体过程可以包括下述实现方式一至实现方式四中的任一项或多项的组合:
实现方式一、对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链的节点数量与第二调用链的节点数量的比例小于第一比例阈值时,将第一调用链输出为第二调用链的断链。
可选地,实现方式一可以包括下述步骤一至步骤二:
步骤一、确定第一调用链为第二调用链的子链。
在一种可能的实现中,可以获取第一调用链对应的树以及第二调用链对应的树,判断第一调用链对应的树是否为第二调用链对应的树的子树,如果第一调用链对应的树为第二调用链对应的树的子树,则确定第一调用链为第二调用链的子链。
步骤二、确定第一调用链的节点数量与第二调用链的节点数量的比例小于第一比例阈值。
具体地,可以获取第一调用链的节点数量,获取第二调用链的节点数量;根据第一调用链的节点数量以及第二调用链的节点数量,获取第一调用链的节点数量与第二调用链的节点数量的比例;判断第一调用链的节点数量与第二调用链的节点数量的比例是否小于第一比例阈值;如果第一调用链的节点数量与第二调用链的节点数量的比例小于第一比例阈值,则将第一调用链输出为第二调用链的断链。其中,该第一比例阈值可以根据实验、经验或需求设置,例如可以为0.7,本实施例对第一比例阈值的具体数值不做限定。
以数学的方式表述,对于两个调用链C1和C2,如果C1和C2符合:C1∩C2=C1,且|C1|/|C2|<T1,则可以确定C1为C2的断链。其中,||是表示调用链长度的符号,“=”是表示数值相等的符号,例如,|X|=m的含义是:调用链X的长度是m。T1表示第一比例阈值。
需要说明的是,上述仅是以先执行步骤一,再执行步骤二为例进行举例描述,可选地,也可以先执行步骤二,再执行步骤一,本实施例对实现方式一的步骤一和步骤二的执行顺序不做限定。
示例性地,参见图35,图35示出了调用链C1、调用链C2、调用链C3以及调用链C4,其中调用链C1的节点数量为7,调用链C2的节点数量为6,调用链C3的节点数量为3,调用链C4的节点数量为3。假设第一比例阈值为0.7,对于调用链C1以及调用链C2来说,调用链C2为调用链C1的子链,而调用链C2的节点数量与调用链C1的节点数量的比例=|C2|/|C1|=6/7=0.857>0.7,因此调用链C2不是调用链C1的断链;对于调用链C1以及调用链C3来说,调用链C3不为调用链C1的子链,因此调用链C3不是调用链C1的断链;对于调用链C1以及调用链C4来说,调用链C4为调用链C1的子链,而调用链C2的节点数量与调用链C1的节点数量的比例=|C4|/|C1|=3/7=0.43<0.7,因此调用链C2是调用链C1的断链。
实现方式二、对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链的深度与第二调用链的深度的比例小于第二比例阈值时,将第一调用链输出为第二调用链的断链。
可选地,实现方式二可以包括下述步骤一至步骤二:
步骤一、确定第一调用链为第二调用链的子链。
实现方式二的步骤一与上述实现方式一的步骤一同理,在此不做赘述。
步骤二、确定第一调用链的节点数量与第二调用链的节点数量的比例小于第二比例阈值。
具体地,可以获取第一调用链的深度,获取第二调用链的深度;根据第一调用链的深度以及第二调用链的深度,获取第一调用链的深度与第二调用链的深度的比例;判断第一调用链的深度与第二调用链的深度的比例是否小于第二比例阈值;如果第一调用链的深度与第二调用链的深度的比例小于第二比例阈值,则将第一调用链输出为第二调用链的断链。其中,该第二比例阈值可以根据实验、经验或需求设置,本实施例对第二比例阈值的具体数值不做限定。
以数学的方式表述,对于两个调用链C1和C2,如果C1和C2符合:C1∩C2=C1,且depth(C1)/depth(C2)<T2,则可以确定C1为C2的断链。其中,depth是表示调用链的深度的符号,“=”是表示数值相等的符号,例如,depth(X)=m的含义是:调用链X的深度是m。T2表示第二比例阈值。
需要说明的是,上述仅是以先执行步骤一,再执行步骤二为例进行举例描述,可选地,也可以先执行步骤二,再执行步骤一,本实施例对实现方式二的步骤一和步骤二的执行顺序不做限定。
实现方式三、对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链的节点数量与第二调用链的节点数量的差值小于第一差值阈值时,将第一调用链输出为第二调用链的断链。
可选地,实现方式三可以包括下述步骤一至步骤二:
步骤一、确定第一调用链为第二调用链的子链。
实现方式三的步骤一与上述实现方式一的步骤一同理,在此不做赘述。
步骤二、确定第一调用链的节点数量与第二调用链的节点数量的差值小于第一差值阈值。
具体地,可以获取第一调用链的节点数量,获取第二调用链的节点数量;根据第一调用链的节点数量以及第二调用链的节点数量,获取第一调用链的节点数量与第二调用链的节点数量的差值;判断第一调用链的节点数量与第二调用链的节点数量的差值是否小于第一差值阈值;如果第一调用链的节点数量与第二调用链的节点数量的差值小于第一差值阈值,则将第一调用链输出为第二调用链的断链。其中,该第一差值阈值可以根据实验、经验或需求设置,本实施例对第一差值的具体数值不做限定。
以数学的方式表述,对于两个调用链C1和C2,如果C1和C2符合:C1∩C2=C1,且|C1|-|C2|<T3,则可以确定C1为C2的断链。其中,||是表示调用链长度的符号,“=”是表示数值相等的符号,T3表示第一差值阈值,<表示数值上的小于。
需要说明的是,上述仅是以先执行步骤一,再执行步骤二为例进行举例描述,可选地,也可以先执行步骤二,再执行步骤一,本实施例对实现方式三的步骤一和步骤二的执行顺序不做限定。
实现方式四、对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链的深度与第二调用链的深度的差值小于第二差值阈值时,将第一调用链输出为第二调用链的断链。
可选地,实现方式四可以包括下述步骤一至步骤二:
步骤一、确定第一调用链为第二调用链的子链。
实现方式四的步骤一与上述实现方式一的步骤一同理,在此不做赘述。
步骤二、确定第一调用链的深度与第二调用链的深度的差值小于第一差值。
具体地,可以获取第一调用链的深度,获取第二调用链的深度;根据第一调用链的深度以及第二调用链的深度,获取第一调用链的深度与第二调用链的深度的差值;判断第一调用链的深度与第二调用链的深度的差值是否小于第二差值阈值;如果第一调用链的深度与第二调用链的深度的差值小于第二差值阈值,则将第一调用链输出为第二调用链的断链。其中,该第二差值阈值可以根据实验、经验或需求设置,本实施例对第二差值阈值的具体数值不做限定。
以数学的方式表述,对于两个调用链C1和C2,如果C1和C2符合:C1∩C2=C1,且depth(C1)-depth(C2)<T4,则可以确定C1为C2的断链。其中,depth是表示调用链的深度的符号,“=”是表示数值相等的符号,T4表示第二差值阈值。
需要说明的是,上述仅是以先执行步骤一,再执行步骤二为例进行举例描述,可选地,也可以先执行步骤二,再执行步骤一,本实施例对实现方式四的步骤一和步骤二的执行顺序不做限定。
应用方式五、计算机设备基于一个或多个类,检测调用链中的异常链。
异常链是指结构异常的调用链。异常链与一个或多个类中调用链的结构的相似度小于相似度阈值,异常链可以视为结构与其他类均不相似的调用链。
可选地,检测异常链的具体过程可以包括下述步骤一至步骤二:
步骤一、对于业务的任一调用链,获取调用链与一个或多个类之间的相似度,得到一个或多个相似度。
对于一个或多个类中的任一类,可以获取调用链与该类的相似度。在一种可能的实现中,可以基于调用链的结构与类中每个调用链的结构,获取调用链与类中每个调用链的相似度,得到类中多个调用链对应的相似度;获取多个相似度中的最小值,将该最小值作为调用链与该类的相似度。在另一种可能的实现中,可以基于调用链的结构与类对应的相同子树的结构,获取调用链与相同子树的相似度,作为调用链与该类的相似度。其中,业务的任一调用链可以为待检测的调用链,例如为新获取的调用链,本实施例对调用链的来源不做限定。
可选地,在获取调用链与类中每个调用链的相似度时,可以将调用链与类中的每个调用链表示为树,通过树与树之间的相似度,来获取调用链与类中的每个调用链之间的相似度,这种实现方式的具体过程详见上述步骤302中的实现方式一,在此不做赘述;另外,也可以将调用链与类中的每个调用链建模为向量,通过向量与向量之间的相似度,来获取调用链与与类中的每个调用链之间的相似度,这种实现方式的具体过程详见上述步骤302中的实现方式二,在此不做赘述。同理地,在获取调用链与类的相同子树的相似度时,也可以将调用链与类中的相同子树建模为向量,通过向量与向量之间的相似度,来获取调用链与相同子树之间的相似度。
依次类推,可以为每个类获取一个相似度,则针对业务的一个或多个类,可以得到一个或多个相似度。示例性地,假设某金融业务具有代表余额支付场景的类1、代表银行卡支付场景的类2以及代表社交应用代付场景的类3,当新获取了任一调用链时,可以获取该调用链与类1的相似度、该调用链与类2的相似度以及该调用链与类3的相似度,得到3个相似度。
步骤二、当一个或多个相似度小于相似度阈值时,将调用链输出为异常链。
可以判断一个或多个相似度是否小于相似度阈值,当一个或多个相似度均小于相似度阈值时,可以将调用链视为与一个或多个类均不相似的调用链,则将调用链输出为异常链;当一个或多个相似度中任一相似度大于相似度阈值时,可以确定该大于相似度阈值的相似度对应的类,将调用链视为与该类中的调用链。
在一个示例性场景中,参见图36,假设将业务的大量调用链聚为2类,图36中以加号表示的调用链为类1,以实心圆点表示的调用链为类2。此时新获取了一个调用链,该调用链的节点数量为24,调用链的深度为20,则该调用链可以表示为向量(24,20)。将这个调用链所代表的向量显示在图36中,以三角来进行表示,可以看出,该调用链与类1和类2之间的距离均比较远,可以将该调用链检测为一个异常链。
综上所述,结合图29、图30以及上述应用方式一至应用方式五,对本实施例至少可以达到的效果进行论述:
相关技术中,会将业务的所有调用链放在一起,采用同一种分析标准对业务的所有调用链进行分析,得到业务的分析结果。然而,由于不同场景下的调用链之间没有可比性,会导致分析结果的准确性较差。而本实施例中,通过将同一业务的调用链进行聚类,可以区分不同场景下的调用链,分别采用每个场景对应的分析标准,对相应场景下的调用链进行分析,例如,对于金融业务来说,如果调用链X为余额支付场景下的调用链,则采用余额支付场景下的性能分析阈值或性能分析模型,检测调用链X是否为慢链,采用余额支付场景下的正常调用链以及偏差条件,检测调用链X是否为断链,采用余额支付场景下的每个调用链的结构,检测调用链X是否为异常链。而如果调用链Y为银行卡支付场景下的调用链,则采用银行卡支付场景下的性能分析阈值或性能分析模型,检测调用链Y是否为慢链,采用银行卡支付场景下的正常调用链以及偏差条件,检测调用链Y是否为断链,采用银行卡支付场景下的每个调用链的结构,检测调用链Y是否为异常链。
305、计算机设备对每个类进行调用链的特征统计,显示统计结果。
可选地,本步骤可以包括下述步骤一至步骤二:
步骤一、统计一个或多个类的多个调用链的调用次数、错误次数、调用时长、节点数量、节点标识、调用链长度中的至少一项,得到统计结果。
对于一个或多个类中的任一个类来说,对该类的调用链的特征统计方式包括而不限于以下方式中任一项或多项的组合:获取调用链的特征的和值、获取调用链的特征的平均值、获取调用链的特征的加权和值、获取调用链的特征的最大值、获取调用链的特征的最小值、选取特征属于任一取值范围的调用链、选取特征排在预设位数的调用链、获取多个调用链的特征分布图、对调用链的特征进行图形化展示、对调用链的特征进行曲线拟合等。本实施例对特征统计的具体方式不做限定。
其中,调用链的特征包括而不限于调用次数、错误次数、调用时长、节点数量、节点标识、调用链长度中任一项或多项的组合。本实施例对待统计的调用链的特征不做限定。
步骤二、显示一个或多个类的统计结果。
可以生成结果展示界面,在该结果展示界面中显示一个或多个类的统计结果。可选地,该结果展示界面可以包括一个或多个场景展示区域,每个场景展示区域包括一个类的统计结果。可选地,对于调用链的同一种特征,可以选取一个或多个类中该特征最大的类,在该类对应的场景展示区域中,对该类的统计结果进行突出显示,例如对该类的统计结果填充预设颜色,又如对该类的统计结果的预设范围内添加提示标记等。
示例性地,假设对某业务的调用链聚类后得到了4个类,类1的统计结果为:调用次数为303,平均时延为0.011,平均span数为17,平均层数为7,错误数为131;类2的统计结果为:调用次数为741,平均时延为0.009,平均span数为17,平均层数为7,错误数为18;类3的统计结果为:调用次数为91,平均时延为0.980,平均span数为13,平均层数为6,错误数为3;类4的统计结果为:调用次数为154,平均时延为0.033,平均span数为24,平均层数为8,错误数为109。参见图37,其示出了结果展示界面的示意图,该结果展示界面包括4个场景展示区域,场景展示区域“场景1”展示类1的统计结果,场景展示区域“场景2”展示类2的统计结果,以此类推。图37中,类3的平均时延解决1s,远大于类1、类2以及类3的平均时延,因此场景展示区域“场景3”中对平均时延的条目进行了突出显示。图37中,类4的错误率高于类1、类2以及类3的错误率,因此场景展示区域“场景4”中对错误率的条目进行了突出显示。
示例性地,可以统计任一类中调用次数最多的N个函数,显示调用次数最多的N个函数的函数名称。另外,可以统计任一类中调用时长最长的N个函数,显示调用时长最长的N个函数的函数名称。其中,N为正整数,图38中示出了N为5时的示意图。
参见图39,可以显示每个类的时延分布示意图以及调用链长度的分布示意图。图39中的饼图展示每个类的时延分布比例图。当接收到对“场景2”的选择指令时,可以显示“场景2”对应的类2的时延分布示意图以及调用链长度示意图,可以看出场景2的时延基本都很低,调用链长度比较集中。
当接收到对“场景3”的选择指令时,参见图40,可以显示“场景3”对应的类3的时延分布示意图以及调用链长度示意图,可以看出场景3的时延基本上都在1秒左右返回结果,但是右下角的几个调用链返回结果的速度过快,可以识别出这几个调用链为存在问题的调用链,可以针对这几个调用链进行一步下钻,以分析问题。
本实施例提供的方法,通过基于调用链的结构,获取调用链之间的相似度,基于调用链之间的相似度,将业务的大量的调用链聚为不同的类,从而可以基于类进行调用链的性能分析或调用链的异常分析。由于同一类中的调用链的结构相似,能够映射为业务的一种场景,通过区分不同调用链所属的类,可以区分同一业务的不同场景,从而对实现基于场景的业务分析。一方面,可以避免某一场景下出现问题的调用链混杂在其他场景下的调用链时,漏检测该出现问题的调用链的情况,从而提高业务分析的全面性。另一方面,对于调用链结构复杂、经过的网元较多、业务处理的运算量较大等原生因素而导致正常情况下性能参数较差的调用链来说,可以避免这种调用链被误检测为出现问题的调用链的情况,从而提高业务分析的精确性,因此,可以极大地提高业务分析结果的准确性,进而便于通过业务分析结果进行应用性能管理。
图41是本申请实施例提供的一种业务分析装置的结构示意图,如图41所示,该装置包括:
获取模块4101,用于执行上述步骤301;
该获取模块4101,还用于执行上述步骤302;
聚类模块4102,用于执行上述步骤303;
分析模块4103,用于执行上述步骤304。
可选地,该获取模块4101,用于执行上述步骤302中的实现方式一。
可选地,该装置还包括:
添加模块,用于向该树添加逻辑节点。
可选地,该添加模块,用于执行向该树添加逻辑节点、向该树添加并行节点、向该树添加循环节点、向该树添加递归节点的步骤中的至少一个步骤。
可选地,该装置还包括:
生成模块,用于生成次序信息;
写入模块,用于向该顺序节点写入该次序信息。
可选地,该装置还包括:
删除模块,用于从具有并行路径的树中,删除该并行路径中关键路径以外的路径。
可选地,该获取模块4101,用于执行上述步骤302中的实现方式二。
可选地,该获取模块4101,用于获取该调用链的向量。
可选地,该分析模块4103,用于执行步骤304中应用方式一至应用方式五中的任一项或多项的组合。
可选地,该分析模块4103,还用于执行步骤305;
该装置还包括:
显示模块,用于显示该一个或多个类的统计结果。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的业务分析装置在分析业务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的业务分析装置与业务分析方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在一个示例性实施例中,本申请还提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得该计算机设备能够实现上述实施例中业务分析方法所执行的操作。
在一个示例性实施例中,本申请还提供了一种芯片,该芯片包括处理器和/或程序指令,当该芯片运行时,实现上述实施例中业务分析方法所执行的操作。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机程序指令。在计算机上加载和执行该计算机程序指令时,全部或部分地产生按照本申请实施例该的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digitalvideo disc,DVD)、或者半导体介质(例如固态硬盘)等。
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中的字符“/”,一般表示前后关联对象是一种“或”的关系。
本申请中术语“多个”的含义是指两个或两个以上,例如,多个数据包是指两个或两个以上的数据包。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,本领域技术人员可以理解,“第一”“第二”等字样不对数量和执行顺序进行限定。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上该仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (22)
1.一种业务分析方法,其特征在于,所述方法包括:
获取业务的多个调用链;
基于所述多个调用链的结构,获取所述多个调用链之间的相似度;
基于所述多个调用链之间的相似度,对所述多个调用链聚类,得到一个或多个类;
基于所述一个或多个类,进行调用链的性能分析或调用链的异常分析。
2.根据权利要求1所述的方法,其特征在于,所述基于所述多个调用链的结构,获取所述多个调用链之间的相似度,包括:
基于所述多个调用链,生成多个树,每个树用于表示一个调用链;
对于所述多个调用链中的任两个调用链,获取所述两个调用链对应的树之间的相似度,作为所述两个调用链之间的相似度。
3.根据权利要求2所述的方法,其特征在于,所述获取所述两个调用链对应的树之间的相似度之前,所述方法还包括:
对于所述多个树中的任一树,基于所述树中不同节点之间的逻辑关系,向所述树添加逻辑节点,所述逻辑节点用于表示所述逻辑关系。
4.根据权利要求3所述的方法,其特征在于,所述基于所述树中不同节点之间的逻辑关系,向所述树添加逻辑节点,包括下述至少一个步骤:
当所述树中第一节点具有多个第一子节点时,获取所述多个第一子节点的调用时间段,当所述多个第一子节点的调用时间段不重叠时,在所述第一节点与所述多个第一子节点之间添加顺序节点,所述顺序节点用于表示所述第一节点先后调用所述多个第一子节点;
当所述树中第二节点具有多个第二子节点时,获取所述多个第二子节点的调用时间段,当所述多个第二子节点的调用时间段重叠时,在所述第二节点与所述多个第二子节点之间添加并行节点,所述并行节点用于表示所述第二节点同时调用所述多个第二子节点;
当所述树中第三节点具有多个第三子节点,且所述多个第三子节点连续相同时,在所述第三节点与目标第三子节点之间添加循环节点,删除所述多个第三子节点中所述目标第三子节点以外的第三子节点,所述循环节点用于表示所述第三节点循环调用所述目标第三子节点,所述目标第三子节点为所述多个第三子节点中的任一第三子节点;
当所述树中第四节点具有第四子节点,且所述第四节点和第四子节点相同时,在所述第四节点之前添加递归节点,删除所述第四子节点,所述递归节点用于表示所述第四节点调用自身。
5.根据权利要求4所述的方法,其特征在于,所述在所述第一节点与所述多个第一子节点之间添加顺序节点之后,所述方法还包括:
根据所述多个第一子节点的时间戳,生成次序信息,所述次序信息用于指示所述第一节点调用所述多个第一子节点的先后次序;
向所述顺序节点写入所述次序信息。
6.根据权利要求2所述的方法,其特征在于,所述获取所述两个调用链对应的树之间的相似度之前,所述方法还包括:
从一个或多个具有并行路径的树中,删除所述并行路径中关键路径以外的路径,所述并行路径是指同一调用链中调用时间点相同的多段路径,所述关键路径是指所述并行路径中调用时长最长的路径。
7.根据权利要求1所述的方法,其特征在于,所述基于所述多个调用链的结构,获取所述多个调用链之间的相似度,包括:
基于所述多个调用链的结构,获取所述多个调用链的向量,每个向量用于指示一个调用链的结构;
对于所述多个调用链中的任两个调用链,根据所述两个调用链对应的向量之间的相似度,获取所述两个调用链之间的相似度;或者,根据所述两个调用链对应的向量之间的距离,获取所述两个调用链之间的相似度。
8.根据权利要求7所述的方法,其特征在于,所述基于所述多个调用链的结构,获取所述多个调用链的向量,包括:
对于所述多个调用链中的任一调用链,获取所述调用链的节点数量以及深度中的至少一项;
根据所述节点数量以及深度中的至少一项,获取所述调用链的向量。
9.根据权利要求1所述的方法,其特征在于,所述基于所述一个或多个类,进行调用链的性能分析或调用链的异常分析,包括下述至少一个步骤:
对于所述一个或多个类中的任一类,获取所述类的性能分析阈值,通过所述类的性能分析阈值,对所述类进行调用链的性能分析;
对于所述一个或多个类中的任一类,获取所述类的异常分析阈值,通过所述类的异常分析阈值,对所述类进行调用链的异常分析;
对于所述一个或多个类中的任一类,获取所述类的性能分析模型在当前时间点的第一性能参数,通过所述类中调用链在当前时间点的第二性能参数与所述第一性能参数之间的偏差,对所述类进行调用链的性能分析;
对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链与第二调用链符合偏差条件时,将第一调用链输出为第二调用链的断链;
对于所述业务的任一调用链,获取所述调用链与所述一个或多个类之间的相似度,得到一个或多个相似度,当所述一个或多个相似度小于相似度阈值时,将所述调用链输出为异常链。
10.根据权利要求1所述的方法,其特征在于,所述基于所述多个调用链之间的相似度,对所述多个调用链聚类之后,所述方法还包括:
统计所述一个或多个类的多个调用链的调用次数、错误次数、调用时长、节点数量、节点标识、调用链长度中的至少一项,得到一个或多个类的统计结果;
显示所述一个或多个类的统计结果。
11.一种业务分析装置,其特征在于,所述装置包括:
获取模块,用于获取业务的多个调用链;
所述获取模块,还用于基于所述多个调用链的结构,获取所述多个调用链之间的相似度;
聚类模块,用于基于所述多个调用链之间的相似度,对所述多个调用链聚类,得到一个或多个类;
分析模块,用于基于所述一个或多个类,进行调用链的性能分析或调用链的异常分析。
12.根据权利要求11所述的装置,其特征在于,所述获取模块,用于:基于所述多个调用链,生成多个树,每个树用于表示一个调用链;对于所述多个调用链中的任两个调用链,获取所述两个调用链对应的树之间的相似度,作为所述两个调用链之间的相似度。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
添加模块,用于对于所述多个树中的任一树,基于所述树中不同节点之间的逻辑关系,向所述树添加逻辑节点,所述逻辑节点用于表示所述逻辑关系。
14.根据权利要求13所述的装置,其特征在于,所述添加模块,用于执行下述至少一个步骤:
当所述树中第一节点具有多个第一子节点时,获取所述多个第一子节点的调用时间段,当所述多个第一子节点的调用时间段不重叠时,在所述第一节点与所述多个第一子节点之间添加顺序节点,所述顺序节点用于表示所述第一节点先后调用所述多个第一子节点;
当所述树中第二节点具有多个第二子节点时,获取所述多个第二子节点的调用时间段,当所述多个第二子节点的调用时间段重叠时,在所述第二节点与所述多个第二子节点之间添加并行节点,所述并行节点用于表示所述第二节点同时调用所述多个第二子节点;
当所述树中第三节点具有多个第三子节点,且所述多个第三子节点连续相同时,在所述第三节点与目标第三子节点之间添加循环节点,删除所述多个第三子节点中所述目标第三子节点以外的第三子节点,所述循环节点用于表示所述第三节点循环调用所述目标第三子节点,所述目标第三子节点为所述多个第三子节点中的任一第三子节点;
当所述树中第四节点具有第四子节点,且所述第四节点和第四子节点相同时,在所述第四节点之前添加递归节点,删除所述第四子节点,所述递归节点用于表示所述第四节点调用自身。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
生成模块,用于根据所述多个第一子节点的时间戳,生成次序信息,所述次序信息用于指示所述第一节点调用所述多个第一子节点的先后次序;
写入模块,用于向所述顺序节点写入所述次序信息。
16.根据权利要求12所述的装置,其特征在于,所述装置还包括:
删除模块,用于从一个或多个具有并行路径的树中,删除所述并行路径中关键路径以外的路径,所述并行路径是指同一调用链中调用时间点相同的多段路径,所述关键路径是指所述并行路径中调用时长最长的路径。
17.根据权利要求11所述的装置,其特征在于,所述获取模块,用于:基于所述多个调用链的结构,获取所述多个调用链的向量,每个向量用于指示一个调用链的结构;对于所述多个调用链中的任两个调用链,根据所述两个调用链对应的向量之间的相似度,获取所述两个调用链之间的相似度;或者,根据所述两个调用链对应的向量之间的距离,获取所述两个调用链之间的相似度。
18.根据权利要求17所述的装置,其特征在于,所述获取模块,用于:对于所述多个调用链中的任一调用链,获取所述调用链的节点数量以及深度中的至少一项;根据所述节点数量以及深度中的至少一项,获取所述调用链的向量。
19.根据权利要求11所述的装置,其特征在于,所述分析模块,用于执行下述至少一个步骤:
对于所述一个或多个类中的任一类,获取所述类的性能分析阈值,通过所述类的性能分析阈值,对所述类进行调用链的性能分析;
对于所述一个或多个类中的任一类,获取所述类的异常分析阈值,通过所述类的异常分析阈值,对所述类进行调用链的异常分析;
对于所述一个或多个类中的任一类,获取所述类的性能分析模型在当前时间点的第一性能参数,通过所述类中调用链在当前时间点的第二性能参数与所述第一性能参数之间的偏差,对所述类进行调用链的性能分析;
对于一个或多个类中的任一类中的第一调用链以及第二调用链,当第一调用链为第二调用链的子链,且第一调用链与第二调用链符合偏差条件时,将第一调用链输出为第二调用链的断链;
对于所述业务的任一调用链,获取所述调用链与所述一个或多个类之间的相似度,得到一个或多个相似度,当所述一个或多个相似度小于相似度阈值时,将所述调用链输出为异常链。
20.根据权利要求11所述的装置,其特征在于,所述分析模块,还用于:统计所述一个或多个类的多个调用链的调用次数、错误次数、调用时长、节点数量、节点标识、调用链长度中的至少一项,得到一个或多个类的统计结果;
所述装置还包括:
显示模块,用于显示所述一个或多个类的统计结果。
21.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器;所述处理器执行所述存储器存储的指令,使得所述计算机设备执行权利要求1至10中任一项所述的业务分析方法。
22.一种计算机可读存储介质,其特征在于,所述存储介质中存储指令,计算机设备执行所述指令以实现如权利要求1至10中任一项所述的业务分析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811393680.2A CN109697456B (zh) | 2018-11-21 | 2018-11-21 | 业务分析方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811393680.2A CN109697456B (zh) | 2018-11-21 | 2018-11-21 | 业务分析方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109697456A true CN109697456A (zh) | 2019-04-30 |
CN109697456B CN109697456B (zh) | 2021-02-09 |
Family
ID=66230147
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811393680.2A Active CN109697456B (zh) | 2018-11-21 | 2018-11-21 | 业务分析方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109697456B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110995468A (zh) * | 2019-11-13 | 2020-04-10 | 上海钧正网络科技有限公司 | 待分析系统的系统故障处理方法、装置、设备和存储介质 |
CN111522606A (zh) * | 2020-04-26 | 2020-08-11 | 广东优特云科技有限公司 | 一种数据处理的方法、装置、设备及存储介质 |
CN111553600A (zh) * | 2020-04-29 | 2020-08-18 | 广元量知汇科技有限公司 | 基于大数据的智慧城市业务分配系统 |
WO2020252896A1 (zh) * | 2019-06-18 | 2020-12-24 | 平安科技(深圳)有限公司 | 基于hash表的全链路数据采样方法、装置、设备及存储介质 |
CN112631880A (zh) * | 2019-10-08 | 2021-04-09 | 中国移动通信集团浙江有限公司 | 基于调用链的性能分析方法及装置 |
CN112817785A (zh) * | 2019-11-15 | 2021-05-18 | 亚信科技(中国)有限公司 | 一种微服务系统的异常检测方法及装置 |
CN113014506A (zh) * | 2021-02-10 | 2021-06-22 | 中国工商银行股份有限公司 | 一种生产运维方法、装置及系统 |
CN113282561A (zh) * | 2021-06-21 | 2021-08-20 | 支付宝(杭州)信息技术有限公司 | 链路生成方法及装置 |
CN113452607A (zh) * | 2020-03-24 | 2021-09-28 | 华为技术有限公司 | 分布式链路采集的方法、装置、计算设备和存储介质 |
CN113516174A (zh) * | 2021-06-03 | 2021-10-19 | 清华大学 | 调用链异常检测方法、计算机设备以及可读存储介质 |
CN117827214A (zh) * | 2023-12-25 | 2024-04-05 | 慧之安信息技术股份有限公司 | 一种算法管理平台中的算法拓展方法及系统 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101771578A (zh) * | 2008-12-29 | 2010-07-07 | 中国移动通信集团公司 | 一种网络性能检测方法及设备 |
CN102082718A (zh) * | 2011-02-23 | 2011-06-01 | 中国人民解放军信息工程大学 | 一种面向服务的虚拟网中业务聚类方法 |
CN103456192A (zh) * | 2013-09-01 | 2013-12-18 | 中国民航大学 | 一种基于轨迹谱聚类的终端区盛行交通流识别方法 |
CN104392297A (zh) * | 2014-10-27 | 2015-03-04 | 普元信息技术股份有限公司 | 大数据环境下实现非业务流程违规行为检测的方法及系统 |
CN106776906A (zh) * | 2016-11-30 | 2017-05-31 | 努比亚技术有限公司 | 一种应用聚类方法及装置 |
CN107733710A (zh) * | 2017-10-17 | 2018-02-23 | 平安科技(深圳)有限公司 | 链路调用关系的构建方法、装置、计算机设备及存储介质 |
WO2018045545A1 (en) * | 2016-09-09 | 2018-03-15 | Microsoft Technology Licensing, Llc | Automated performance debugging of production applications |
CN108052440A (zh) * | 2017-12-22 | 2018-05-18 | 平安养老保险股份有限公司 | 对业务系统操作逻辑的修正方法、装置、设备和存储介质 |
CN108322320A (zh) * | 2017-01-18 | 2018-07-24 | 华为技术有限公司 | 业务生存性分析方法及装置 |
-
2018
- 2018-11-21 CN CN201811393680.2A patent/CN109697456B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101771578A (zh) * | 2008-12-29 | 2010-07-07 | 中国移动通信集团公司 | 一种网络性能检测方法及设备 |
CN102082718A (zh) * | 2011-02-23 | 2011-06-01 | 中国人民解放军信息工程大学 | 一种面向服务的虚拟网中业务聚类方法 |
CN103456192A (zh) * | 2013-09-01 | 2013-12-18 | 中国民航大学 | 一种基于轨迹谱聚类的终端区盛行交通流识别方法 |
CN104392297A (zh) * | 2014-10-27 | 2015-03-04 | 普元信息技术股份有限公司 | 大数据环境下实现非业务流程违规行为检测的方法及系统 |
WO2018045545A1 (en) * | 2016-09-09 | 2018-03-15 | Microsoft Technology Licensing, Llc | Automated performance debugging of production applications |
CN106776906A (zh) * | 2016-11-30 | 2017-05-31 | 努比亚技术有限公司 | 一种应用聚类方法及装置 |
CN108322320A (zh) * | 2017-01-18 | 2018-07-24 | 华为技术有限公司 | 业务生存性分析方法及装置 |
CN107733710A (zh) * | 2017-10-17 | 2018-02-23 | 平安科技(深圳)有限公司 | 链路调用关系的构建方法、装置、计算机设备及存储介质 |
CN108052440A (zh) * | 2017-12-22 | 2018-05-18 | 平安养老保险股份有限公司 | 对业务系统操作逻辑的修正方法、装置、设备和存储介质 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020252896A1 (zh) * | 2019-06-18 | 2020-12-24 | 平安科技(深圳)有限公司 | 基于hash表的全链路数据采样方法、装置、设备及存储介质 |
CN112631880A (zh) * | 2019-10-08 | 2021-04-09 | 中国移动通信集团浙江有限公司 | 基于调用链的性能分析方法及装置 |
CN110995468A (zh) * | 2019-11-13 | 2020-04-10 | 上海钧正网络科技有限公司 | 待分析系统的系统故障处理方法、装置、设备和存储介质 |
CN112817785A (zh) * | 2019-11-15 | 2021-05-18 | 亚信科技(中国)有限公司 | 一种微服务系统的异常检测方法及装置 |
CN113452607A (zh) * | 2020-03-24 | 2021-09-28 | 华为技术有限公司 | 分布式链路采集的方法、装置、计算设备和存储介质 |
CN111522606A (zh) * | 2020-04-26 | 2020-08-11 | 广东优特云科技有限公司 | 一种数据处理的方法、装置、设备及存储介质 |
CN111522606B (zh) * | 2020-04-26 | 2023-08-04 | 广东优特云科技有限公司 | 一种数据处理的方法、装置、设备及存储介质 |
CN111553600A (zh) * | 2020-04-29 | 2020-08-18 | 广元量知汇科技有限公司 | 基于大数据的智慧城市业务分配系统 |
CN113014506A (zh) * | 2021-02-10 | 2021-06-22 | 中国工商银行股份有限公司 | 一种生产运维方法、装置及系统 |
CN113014506B (zh) * | 2021-02-10 | 2023-04-07 | 中国工商银行股份有限公司 | 一种生产运维方法、装置及系统 |
CN113516174A (zh) * | 2021-06-03 | 2021-10-19 | 清华大学 | 调用链异常检测方法、计算机设备以及可读存储介质 |
CN113282561B (zh) * | 2021-06-21 | 2022-11-22 | 蚂蚁胜信(上海)信息技术有限公司 | 链路生成方法及装置 |
CN113282561A (zh) * | 2021-06-21 | 2021-08-20 | 支付宝(杭州)信息技术有限公司 | 链路生成方法及装置 |
CN117827214A (zh) * | 2023-12-25 | 2024-04-05 | 慧之安信息技术股份有限公司 | 一种算法管理平台中的算法拓展方法及系统 |
CN117827214B (zh) * | 2023-12-25 | 2024-06-11 | 慧之安信息技术股份有限公司 | 一种算法管理平台中的算法拓展方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109697456B (zh) | 2021-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109697456A (zh) | 业务分析方法、装置、设备及存储介质 | |
US11636397B1 (en) | Graphical user interface for concurrent forecasting of multiple time series | |
US9832280B2 (en) | User profile configuring method and device | |
Liu et al. | Monitoring and analyzing big traffic data of a large-scale cellular network with Hadoop | |
CN104756106B (zh) | 表征数据存储系统中的数据源 | |
US20170109657A1 (en) | Machine Learning-Based Model for Identifying Executions of a Business Process | |
CN103336790B (zh) | 基于Hadoop的邻域粗糙集快速属性约简方法 | |
Li et al. | A comparative analysis of evolutionary and memetic algorithms for community detection from signed social networks | |
US20170109668A1 (en) | Model for Linking Between Nonconsecutively Performed Steps in a Business Process | |
US20170109667A1 (en) | Automaton-Based Identification of Executions of a Business Process | |
JP2019505912A (ja) | ストリーミングデータのアウトライア検出 | |
CN103336791B (zh) | 基于Hadoop的粗糙集快速属性约简方法 | |
TW201905733A (zh) | 多源資料融合方法和裝置 | |
US20170109639A1 (en) | General Model for Linking Between Nonconsecutively Performed Steps in Business Processes | |
CN106161098B (zh) | 一种网络行为检测方法及装置 | |
CN111708774B (zh) | 一种基于大数据的产业分析系统 | |
US20140337274A1 (en) | System and method for analyzing big data in a network environment | |
CN112087316B (zh) | 基于异常数据分析的网络异常根源定位方法 | |
CN110460662A (zh) | 物联网数据的处理方法和系统 | |
CN109587000A (zh) | 基于群智网络测量数据的高延迟异常检测方法及系统 | |
CN117221087A (zh) | 告警根因定位方法、装置及介质 | |
CN115756929A (zh) | 一种基于动态服务依赖图的异常根因定位方法及系统 | |
US20170109640A1 (en) | Generation of Candidate Sequences Using Crowd-Based Seeds of Commonly-Performed Steps of a Business Process | |
CN109559121A (zh) | 交易路径调用异常分析方法、装置、设备及可读存储介质 | |
US20170109637A1 (en) | Crowd-Based Model for Identifying Nonconsecutive Executions of a Business Process |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220211 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |