跨度分类的制作方法

文档序号:30710311发布日期:2022-07-10 08:21阅读:155来源:国知局
跨度分类的制作方法

1.本发明涉及使用实时分布式跟踪和跨度、在线模型学习以及机器学习对数据(例如微服务应用中的分析数据)进行分类。


背景技术:

2.对于复杂的大规模微服务应用,监控和分析分布式跟踪流以确保服务质量和高可靠性是基本要求。
3.使用分布式跟踪技术有很多优点,其中包括可以利用跟踪来监控微服务应用的通信。跟踪由跨度组成。它们包含可用于在运行时检测异常和性能瓶颈的信息。跨度s
t
是描述给定时间t时微服务的状态、响应时间和/或其它特性的属性-值对(pi,vi)的向量。总的来说,相同类型的跨度组合在一起形成时间序列{s1,s2,...,s
t
},其中下标t表示时间。跨度的时间序列可以方便地用于分析微服务应用。例如,如果用于表征微服务间通信的属性pi=response time的值vi在时间ti,t
i+1
,t
i+2
时突然增大,这可能表示底层分布式应用出现运行时问题。
4.但是,要对数百万个跟踪及其作为时间序列的跨度进行分析,需要使用有意义的属性来聚合跨度。因此,需要一种分类法将跨度分配给不同的类别,通常是分配给时间序列,以进行后验细粒度分析。
5.传统方法不足以满足需要,因为它们使用的距离度量与跨度的属性不兼容。此外,需要一种在线学习方案,因为先验地,没有代表所有类的训练集。跨度类的初始数量是未知的。
6.为了通过对跨度进行分组来创建时间序列,现有方案使用微服务间调用的通用资源定位器(uniform resource locator,url)(rfc 1738)。例如,当微服务m1调用微服务m2时,分布式跟踪系统记录跨度s
t
=[(start,ts
start
),(end,ts
end
),(url,m2)],其中ts
start
和ts
end
分别是指示何时开始请求和何时结束请求的时间戳(即,响应时间ts
end-ts
start
),url是被调用的微服务m2的url(例如,http://192.168.0.12:5002/v2/ab12345/instance/98cd765/delete)。根据所需的聚合级别,可以通过预处理来删除模式(即,“http”)、主机(即,“192.168.0.12”)和端口号(即,“:5002”)。然后,使用距离或基于字符串的匹配方法对具有相同预处理url的跨度进行分组。直接限制是,当路径/v2/ab12345/instance/98cd765/delete包含所谓的路径参数时,现有方法会生成过多的组。一个不利结果是,还会生成许多时间序列。这是因为ab12345是客户id,98cd765是资源id。两者都是变量。通常,这些路径参数对远程过程调用的响应时间没有影响,可以忽略它们。
[0007]
研究人员研究了一个类似的问题,即使用url对网页进行聚类。这些方法有可能用于解决当前的问题,即使用url对类似跨度进行分组。由于网页是供人使用的文档,因此使用的方法涉及文本挖掘和文本分析领域。现有方法从url中提取正交特征以描述要由机器学习算法(例如,支持向量机)处理的文本单元序列(例如,n-gram)。
[0008]
值得注意的尝试包括以下文献中描述的方法:“使用url特征的快速网页分类”,
cikm'05第14届acm国际信息与知识管理大会汇刊,第325-326页,h.3.1[信息存储与检索]:内容分析和索引语言处理。该方法将url分割成有意义的块,并添加分量、顺序和正交特征来对显著模式进行建模。得出的二进制特征用于监督式最大熵建模。
[0009]
以下文献中描述的方法使用两种方式来提取特征向量,将整个标记用作特征并使用标记的n-gram字母:“基于纯url的主题分类”,www 2009,第18届国际万维网大会汇刊。使用支持向量机(support vector machine,svm)、朴素贝叶斯(naive bayes,nb)和最大熵(maximum entropy,me)机器学习算法来提取特征。
[0010]
距离度量也可用于对数据进行分类。例如,在2016年第28届国际电信大会(itc 28)上发表的“clue:挖掘网页url的聚类”中描述的方法使用url距离的概念,并使用它通过众所周知的dbscan算法来组成url集群。然而,使用这样的距离度量可能会出现问题,因为它们通常假设路径的元素是单词或包含单词。因此,当这些度量用于对具有url/v2/ab12345/instance/98cd765/delete和/v2/xy98765/instance/12ab345/delete的跨度进行分组时,生成的标记集{v2,ab12345,instance,98cd765,delete}和{v2,xy98765,instance,12ab345,delete}以较大的语法距离分隔开。但是,在微服务间通信领域,它们的距离非常小,因为它们引用相同的函数调用,只是参数不同。因此,在分布式跟踪领域,不能忽略url路径的语义。
[0011]
以下文献中公开了一种仅使用网页url进行结构聚类以提取网页的可扩展算法:“大型网站结构聚类的高效算法”,www 2011,第20届国际万维网大会汇刊。该算法在网页数量方面具有线性时间复杂度。它使用封闭方法,并假设所有对象在url聚类之前是已知的,因此在处理过程中不能适应形成新类别的需求。
[0012]
需要开发一种解决这些问题的分类方法。


技术实现要素:

[0013]
根据第一方面,提供了一种用于对微服务应用中的跨度进行分类的系统,每个跨度是属性-值对的向量,所述系统包括跨度分类模块,所述跨度分类模块用于:接收多个跨度;从每个跨度中提取多个特征;根据所述提取的特征将所述多个跨度分类为多个类别。
[0014]
所述系统还可以包括跨度缓冲器,用于从所述多个跨度中选择k个跨度的集合,所述跨度缓冲器用于重复执行以下步骤:从所述多个跨度中接收第i个跨度;以k/i的概率随机选择所述第i个跨度;如果选择了所述第i个跨度,则将其存储为所述k个跨度中的一个。如果没有足够的计算资源可用于分析所有传入跨度,这可以允许分析具有代表性的跨度样本。这可以允许所述系统处理跨度突发。
[0015]
所述系统还可以包括学习模块,所述学习模块用于执行以下步骤:从所述多个跨度中提取多个特征;形成对应于跨度子集的一系列跨度抽象,每个跨度抽象包括相应跨度的特征;通过将每个跨度抽象映射到跨度前缀树中的一系列对应节点,从所述一系列跨度抽象形成所述前缀树;识别所述前缀树中入边缘频率大于预定阈值的节点;选择到每个此类节点的路径的特征作为模式并存储所述模式以供将来检测。这可以允许从所述跨度中提取所述特征,以便对要识别的跨度进行分类。这还可以允许渐进式学习,因为可以在所述系统观察到新的跨度时学习跨度类别。
[0016]
所述多个跨度可以是所述跨度缓冲器选择的所述k个跨度的集合。如果没有足够
的计算资源可用于从所有传入跨度中学习,这可以允许所述系统从要分析的具有代表性的跨度样本中学习。这可以允许所述系统处理跨度突发。
[0017]
所述跨度分类模块可以用于从所述多个跨度中提取与所述模式的所述特征对应的特征。所述模式可以对应于类别,并且所述跨度分类模块可以用于通过将所述提取的跨度特征与所述模式的所述特征进行匹配来将跨度分类为所述类别。因此,所述系统可以学习要提取的特征,以便对所述多个跨度进行有意义的分类。
[0018]
所述学习模块可以用于:在此类节点的数量变化率近似为零时,停止将跨度抽象映射到所述前缀树。因此,当所述变化率导数收敛时,所述方法可以自动停止。这可以提供有效的停止条件,防止所述系统分析不向知识模型添加额外信息的冗余跨度。
[0019]
所述预定阈值可以是所述跨度前缀树中所有所述节点的所述入边缘频率的平均值。这可以是确定模式节点的一个便利条件。
[0020]
每个跨度可以是描述给定时间时微服务状态的属性-值对的向量,并且每个类别中的跨度形成跨度的时间序列。所述系统还可以用于将时间序列id分配给每个类别中的所述跨度。这允许每个类别表示跨度的时间序列。因此,所述系统可以用于(例如)时间序列分析。
[0021]
所述提取的特征可以包括url的分量。所述提取的特征可以包括方法、url端点、路径或端口中的至少一个。这可以提高处理效率,并且所述系统可以实现低运行时间复杂度。这使得所述方法具有可扩展性,并且适合高效处理源自大规模微服务应用的跨度。
[0022]
所述跨度的端口号可以用作所述跨度前缀树的根节点。这可以是一种方便的实现方式。
[0023]
根据第二方面,提供了一种用于对微服务应用中的跨度进行分类的方法,每个跨度是属性-值对的向量,所述方法包括:接收多个跨度;从每个跨度中提取多个特征;根据所述提取的特征将所述多个跨度分类为多个类别。
[0024]
根据第三方面,提供了一种用于从多个跨度中选择k个跨度的集合的方法,每个跨度是属性-值对的向量,所述方法包括重复执行以下步骤:从所述多个跨度中接收第i个跨度;以k/i的概率随机选择所述第i个跨度;如果选择了所述第i个跨度,则将其存储为所述k个跨度中的一个。如果没有足够的计算资源可用于分析所有传入跨度,这可以允许分析具有代表性的跨度样本。这可以允许所述系统处理跨度突发。
[0025]
根据第四方面,提供了一种用于确定从微服务应用中的跨度提取的特征的模式的方法,每个跨度是属性-值对的向量,所述方法包括:从多个跨度中提取多个特征;形成对应于所述跨度的一系列跨度抽象,每个跨度抽象包括相应跨度的特征;通过将每个跨度抽象映射到跨度前缀树中的一系列对应节点,从所述一系列跨度抽象形成所述前缀树;识别所述前缀树中入边缘频率大于预定阈值的节点;选择到每个此类节点的路径的特征作为模式并存储所述模式以供将来检测。这可以允许从所述跨度中提取所述特征,以便对要识别的跨度进行分类。这还可以允许渐进式学习,因为可以在所述系统观察到新的跨度时学习跨度类别。
[0026]
根据第五方面,提供了一种计算机程序,当所述计算机程序由计算机执行时,使所述计算机执行上述方法。所述计算机程序可以在非瞬时性计算机可读存储介质上提供。
附图说明
[0027]
现在将结合附图通过示例的方式描述本发明。其中:
[0028]
图1示出了跨度分类系统的架构示例及其与上下文环境的关系;
[0029]
图2示出了跨度中的属性-值对示例;
[0030]
图3示出了跨度分类系统示例;
[0031]
图4示出了跨度缓冲器、跟踪服务器和跨度提取器之间的交互;
[0032]
图5示出了从跨度缓冲器的多个跨度中选择k个跨度的集合的方法;
[0033]
图6示出了为多个跨度提取模式的渐进式学习过程的步骤;
[0034]
图7示出了http端点的结构示例;
[0035]
图8示出了跨度抽象的示例;
[0036]
图9示出了端口索引;
[0037]
图10(a)至图10(c)示出了使用三个限定路径(q.路径)构造的跨度前缀树;
[0038]
图11示出了具有终端节点的跨度前缀树;
[0039]
图12示出了在跨度前缀树中识别模式和参数节点;
[0040]
图13示出了分析更多跨度时节点类型的相对变化;
[0041]
图14(a)和图14(b)示出了减小跨度前缀树;
[0042]
图15示出了用于确定从跨度提取的特征的模式的方法;
[0043]
图16示出了跨度分类方法。
具体实施方式
[0044]
本发明涉及一种用于跨度分类的渐进式学习技术,用于将不同但相关的跨度分配到随着跨度流中出现新类别而动态调整的类别中。例如,具有相似url的跨度分配到同一类别,因为它们具有相似的固有行为。
[0045]
分类与归类的概念密切相关。术语“分类”是指将开放的跨度划分为成员在某种程度上相似的组的过程。另一方面,归类是指在现有分类系统中将元素分配给类的过程。
[0046]
图1示出了所提出的分类系统100的上下文架构,特别是其与微服务应用101、跟踪服务器102以及数据和处理层103的关系。
[0047]
系统100特别适用于通过遵循微服务架构来实现的大规模复杂分布式系统,微服务架构是用于开发公开为通过网络互连的(微)服务的软件系统的架构样式。这种微服务应用程序如图1中的101所示。服务使用http、amqp等进程间通信协议或tcp等二进制协议与其它服务交互。本文所述的系统以使用http协议和rest为例,但并不局限于这些示例。
[0048]
分布式跟踪可用于监控微服务应用。对于每个请求,都会生成详细的统计信息、度量和日志记录数据,以便操作员能够了解分布式流量并在出现问题时进行调试。跟踪基础结构生成所谓的跟踪,即跨度集合。每个跨度描述了重要里程碑开始或完成执行时微服务应用的状态。例如,考虑捕获微服务之间通信的响应时间的跨度。可以使用统计和机器学习算法收集、分组和分析跨度,并考虑以下目的之一:事务监控、根本原因分析、服务依赖关系分析和性能优化。可以通过对跨度进行排序以形成时间序列来实现分析,其中x轴使用时间戳,y轴使用属性值,例如服务内调用响应时间。
[0049]
如图1所示,微服务应用101的微服务通过端点调用其它微服务进行通信。在使用
http的微服务到微服务通信期间,跟踪库客户端104生成跟踪,这些跟踪是显示如何进行请求处理的路径。可以使用分布式跟踪系统(例如,jaeger或zipkin)或传统日志记录(例如,unix系统日志)生成跟踪。跟踪服务器模块102通过跟踪库客户端接收微服务生成的跟踪数据。接收的数据采用跨度的形式。每个跨度包含多个属性-值对(pi,vi)。图2示出了以下属性示例:trace id、span id、timestamp、application name、method、protocol、endpoint、response time、req_msg_size、rsp_msg_size和result_code。
[0050]
在数据和处理层103中,与每个类别相关联的跨度(在此示例中被分配了时间序列id)存储在数据库中。在图1所示的实施例中,数据库是时间序列数据库(time-series database,tsdb)。然后,将人工智能和统计方法应用于时间序列,以进行事务监控、根本原因分析、服务依赖关系分析和性能优化等操作。该模块可以方便地实现各种行为变化检测和异常检测算法,利用spark等并行数据分析框架进行高效处理。
[0051]
大规模微服务应用可以生成数十万个跟踪,进而生成数百万个不同的跨度。跟踪基础结构生成的每个跨度都有一个调用端点。如果一个数据中心有5万台服务器,每台服务器有10个服务,每个服务有10个端点,可以用10个不同的参数进行调用,那么就有5000万个不同的调用端点需要监控和分析。如果未使用特定方法,则调用端点可用作时间序列的唯一标识符,以存储端点的跨度。然而,这有一个主要缺点,因为一方面它会生成太多时间序列,而且会导致许多时间序列只包含少量观察结果,因为它们被分成大量时间序列。
[0052]
本文所述的跨度分类系统是通过将跨度分配给类别来解决该问题的高效实现方式,随后可以(可选地)将跨度分配给时间序列。
[0053]
图3示出了分类系统300的总体架构。该系统的组件包括跨度缓冲器301、渐进式学习模块302、跨度分类模块303、跨度提取器304、模型构造器模块305、模型适配器模块306、模式提取器模块307和跨度收集器308。这些组件的操作将在以下部分中描述。
[0054]
跨度缓冲器301是跟踪服务器(图1中的102)和跨度提取器304共享的组件,以调解不同的处理速度,使这两个模块可以在不相互干扰的情况下运行。
[0055]
对于大规模微服务应用,每单位时间生成的跨度数可以远大于可以分析的跨度数。在没有任何特定机制的情况下,跟踪服务器102可能很容易导致跨度提取器304和渐进式学习模块302过载。虽然采用缓冲器能够实现强解耦以处理不同的运行速度,但它的容量通常很有限。因此,不可避免地会出现无法处理跨度以构建跨度模型的情况。
[0056]
在跨度不能一次全部放入存储器的情况下,跨度缓冲器可以存储k个跨度并丢弃所有后续传入跨度。这种方法虽然简单,但并不能保证存储在缓冲器中的跨度是总体中具有统计代表性的样本。这一点很重要,因为基于微服务应用的运行,可能会发生在时间上很接近地执行大量相关请求的情况。在这种情况下,缓冲器包含不代表真实跨度总体的跨度集合。因此,需要一种机制,该机制能够从未知的跨度域大小n中随机选择k个跨度的样本(已经看到n个跨度),并保证每个跨度具有相同的被选择概率k/n。
[0057]
为了解决这个问题,采用了一种在o(n)时间内运行并使用o(k)空间对跨度进行采样的蓄水池采样机制。如图4所示,该方法包括传递到包含n个跨度的流,同时维护和更新跨度缓冲器结构。缓冲器301存储跨度流的前k项。然后,它遍历s的其余部分。对于ss的第i项(其中i》k),它以概率k/i选择该跨度。如果缓冲器决定存储新跨度,它会从其结构中随机删除旧跨度并将新跨度放置到旧跨度所处的位置。通过归纳法可以看出,当遍历整个流时,缓
冲器301包含k个随机样本。
[0058]
蓄水池采样方法的复杂度为o(n),这使其成为跨度分类的高效缓冲方案。
[0059]
图5示出了从跨度缓冲器的多个跨度中选择k个跨度的集合的方法,其中每个跨度是属性-值对的向量。所述方法包括重复执行步骤501至503。在步骤501中,所述方法包括:从多个跨度中接收第i个跨度。在步骤502中,所述方法包括:以k/i的概率随机选择第i个跨度。在步骤503中,所述方法包括:如果选择了该第i个跨度,则将其存储为k个跨度中的一个。
[0060]
在没有足够的计算资源来处理所有传入跨度的情况下,可以方便地应用该方法。这确保了具有代表性的跨度样本被输入到渐进式学习模块中,现在将描述该模块的操作。
[0061]
跨度分类系统可以通过应用由渐进式学习模块302实现的过程对大量跨度进行分类。从概念的角度来看,渐进式学习可以表述为向每对《si,cj》∈s
×
c分配一个布尔值,其中s是跨度的域,c={c1,c2,

,c
|c|
}是动态学习类别的集合:
[0062]
f(《si,cj》)

{t,f},si∈s,cj∈c,|s|>>|c|(1)
[0063]
分配给《si,cj》的值t(true)值表示决定将si分配给cj,而值f(false)表示决定不将si分配给cj。从形式上讲,任务是通过称为分类器的函数f

:s
×c→
{t,f}来逼近未知目标函数f:s
×c→
{t,f}(描述应如何对跨度分类),以使f和f'尽可能一致。将相似的跨度分配给同一类别,因为它们表现出相似的行为,这些行为由其属性-值对(pi,vi)的子集表示。与机器学习领域的现有技术相比,跨度的类别不是预先定义的。相反,它们是在看到跨度时动态学习的。
[0064]
渐进式学习模块302负责执行六个主要步骤,如图6所示。这些步骤包括:
[0065]-步骤601:提取特征
[0066]-步骤602:为端口建立索引
[0067]-步骤603:为跨度建模
[0068]-步骤604:标记节点
[0069]-步骤605:如果要扩展模型:转到步骤601,否则转到步骤606
[0070]-步骤606:提取模式
[0071]
步骤601至604由模型构造器模块305执行,步骤605由模型适配器模块306执行,而步骤606由模式提取器模块307执行。这些步骤将在以下部分中描述。
[0072]
在学习过程中,对于从跨度缓冲器301读取的每个跨度,步骤601提取与在微服务之间进行的调用相关的信息。在一个实施例中,从跨度的结构中提取以下字段(如图2所示):method、endpoint。为了进行调用,将方法与远程微服务的端点一起使用。微服务之间的调用是使用一种方法进行的,该方法也称为http方法或http动词。方法示例包括get、post、put和delete。有利地,该方法是从跨度中提取的,因为在许多情况下它与微服务调用的行为相关。例如,调用get/v1/customer/123/和delete/v1/customer/123/可能具有完全不同的响应时间,因为第一个调用检索有关客户的信息,但第二个调用删除有关客户的记录。直观地说,检索信息和删除记录的任务是截然不同的过程,具有不同的响应时间。因此,应将这些端点分配到不同的类别。
[0073]
除包括方法之外,微服务调用还包括http端点。http端点的示例如图7所示。端点是用于标识进程间通信期间调用的端点(远程过程)的url结构。端点具有schema、user、
password、host、port、path、query和fragment(其中一些元素是可选的)。在该实施例中,进一步从端点中提取以下元素:端口;路径。考虑这两个元素是因为它们也与调用远程微服务的响应时间等高度相关。不同的微服务通常分配给一个内部的、已知的、唯一的port。因此,不同的端口指不同的微服务,不同的路径指不同的功能。使用分隔符{/,?}将path组件划分为路径段(关键字)以标识关键字边界。
[0074]
例如,具有方法get和端点http://user:pass@cloud.com:5005/v2/instances/list的跨度由模型构造器模块处理,以创建以下结构(称为跨度抽象):
[0075]
《port=5005,method=get,path=(v2,instances,list)》
[0076]
图8示出了跨度提取步骤的其它结果示例。
[0077]
虽然上述示例描述了属性method、port和path的使用,但也可以包括其它属性或替代属性。例如,可以包含host并将其与port号级联,以在主机的特性相关时实现更细粒度的分类。此外,还可以提取http结果代码(参见图2)以实现还考虑成功和不成功的远程微服务调用的分类。
[0078]
在步骤602中,跨度抽象的port号的特征用作在哈希表中创建条目的键,该条目的值引用前缀树结构的根节点,如图9所示。前缀树用于为特定端口的跨度建模。由于各port在哈希表中均匀分布,因此该表可以高效地将跨度分配给前缀树,直到构造完整的模型。
[0079]
虽然仅使用port作为属性进行跨度分类的计算成本不高,但其它更细粒度的分类实现方式需要高效的索引创建。例如,《host ip,port》形式的键的数量可能呈指数级增长,并为全球微服务应用生成数百万个条目。因此,对哈希表提供的结构的恒定时间o(1)访问是特别有利的。
[0080]
在步骤603中,使用前缀树数据结构(也称为前缀树)来创建跨度的模型。在其原始形式中,前缀树是树状数据结构。前缀树包括节点和边缘。它类似于二叉树,是基于文本的键的有序索引的非常高效的实现方式。检索和确定存储在前缀树中的路径的存在是线性的。因此,前缀树适用于对跨度建模。此结构在本文中称为跨度前缀树。
[0081]
设t=(n,e)是跨度前缀树,其中n是节点的集合,e是边缘的集合,r∈n是t的根节点。跨度前缀树的字母∑是路径段和方法的集合:{p|p∈pathi}∪{methodi}。设ss是字母∑的s个字符串的集合。将字符串存储在s中的跨度前缀树t是一个结构,其中t的每个节点(根节点除外)都用字符c∈∑标记。t有s个终端节点,每个终端节点与s中的一个字符串相关联。从根节点到终端节点的路径只有一个字符串。
[0082]
为了构造跨度前缀树,从跨度提取器304检索跨度抽象的方法和路径。将这两个特征结合在一起以创建称为限定路径的s的字符串s,其形式为序列(method,path)。例如,(get,v2,instance,list)。将限定路径(或q.路径)添加到跨度前缀树中。
[0083]
图10(a)至图10(c)分别示出了一段时间内添加的具有以下三个限定路径的前缀树:
[0084]
路径1:(a,b,c,d,e)
[0085]
路径2:(a,b,c,d,f)
[0086]
路径3:(a,g,h,d,f)
[0087]
节点(a、b、c、d、e、
……
)对应于限定路径的元素,例如,a=get、b=v2、c=instance、d=ab123456、e=list。
[0088]
在前缀树构造过程中,用通过它们的限定路径的数量来标注边缘。这个数字称为边缘频率。边缘的频率是映射表示为ef(u,v)。它表示通过边缘的“流”。例如,在图10(b)中的跨度前缀树中,边缘(a,b)的频率为ef(a,b)=2。
[0089]
终端节点用于将节点区分为字符串节点的结尾。这些节点没有出边缘,或者是入边缘数量大于出边缘数量的节点。这些节点能够标识q.路径的最后一个节点。在图中,这些节点用浅灰色表示。
[0090]
图11示出了使用以下三个限定路径构造的跨度前缀树:
[0091]
·
(get,v1,xyz11,list)
[0092]
·
(get,v1,xyz11,list,rst22)
[0093]
·
(get,v2,xyz99,list,rst88)
[0094]
终端节点标识为list rst22和rst88,分别如图11中的1101、1102和1103所示。
[0095]
插入和搜索限定路径是高效的,并且能以线性时间复杂度o(n)实现,其中n是路径的长度。
[0096]
在步骤604中,标记节点。跨度前缀树可用于对要分配给特定时间序列的跨度进行高效分类。一种简单的分类方法包括级联从根到终端节点的限定路径的元素,以创建唯一的类别或时间序列标识符。尽管如此,更仔细地观察跨度前缀树结构就会发现存在三种类型的不相交节点。这些类型的节点是方法节点、模式节点和参数节点。例如,在限定路径(get,v1,xyz11,list,rst22)中,get是方法节点,v1和list是模式节点,xyz11和rst22是参数节点。xyz11和rst22对应于路径参数。
[0097]
这些参数是可以在端点内传递的参数,用于参数化微服务调用的响应。基于rest的微服务应用支持四种类型的参数:1)路径参数,2)查询字符串参数,3)头参数,4)请求正文参数。本文描述的是处理路径参数的示例。在其它实现方式中,也可以通过将其它类型的参数添加到跨度前缀树来考虑这些参数。
[0098]
路径参数位于端点的路径中,在查询字符串(用符号“?”标识)之前。本文使用波形括号表示路径参数。例如,路径/v1/xyz11/list/rst22有两个路径参数:xyz11和rst22,路径表示为/v1/{p1}/list/{p2},其中p1和p2是参数。
[0099]
如果使用跨度前缀树对跨度进行分类,则需要标识哪些节点是参数节点,因为分类过程不会考虑这些节点。否则,类别的数量会很大,并且可能只会为每个类别分配几个跨度,这可能会使分析的应用变得毫无用处。
[0100]
因此,步骤604的目的是将每个节点标记为模式节点或参数节点。
[0101]
对于节点标记任务,需要考虑分析跨度前缀树方面的两个重要见解。第一,不同参数节点的数量明显大于不同模式节点的数量。第二,模式节点出现的频率高于参数节点。
[0102]
随着限定路径添加到跨度前缀树中,与参数节点的数量相比,观察到不同模式节点的数量增长缓慢,因为参数域通常比模式域大得多。例如,如果路径/v1/{p1}/list/{p2}的参数{p1}和{p2}分别是客户id和产品id,则其域的大小应该远大于属于模式节点(如v1和list)的元素数量。
[0103]
为了简化对节点标记过程的描述,在此示例中,假设从根节点开始的跨度前缀树的每个深度di,i∈{2,

,n}仅具有模式节点或参数节点,但不同时具有两者。根节点的级别为0,级别1对应于方法节点。所有其它节点的级别使用拓扑排序运算广度优先搜索
(breadth first search,bfs)进行计算。bfs在访问下一个深度之前以固定深度对每个节点进行排队。此外,两个连续的深度级别不能包含参数节点。对于微服务应用,这意味着url路径的参数始终使用分隔符“/”出现在相同的位置,并且两个参数不能按顺序出现。跨度前缀树的以下观察结果成立:|pi|>>|sj|,其中pi和sj分别是深度i和j处的参数节点和模式节点的集合。从该观察结果中得出的主要见解是,一旦观察到足够的跨度,则表示不同参数节点的数量远大于模式节点的数量。与参数节点相比,不同模式节点更少,并且具有更高的入边缘频率。与模式节点相比,参数节点具有更多的不同节点和更低的入边缘频率。因此,为了识别模式节点,识别具有高入边缘频率的节点。相应地,参数节点具有低入边缘频率。
[0104]
第一种方法是使用阈值变量k。当某个节点的入边缘数量大于k时,它被标记为模式节点,否则该节点为参数节点。然而,这种方法有时可能会失败,因为随着分析更多的跨度,一些参数节点的入边缘的数量可能会增加到超过阈值k,从而被错误地分类。另一方面,不常见的模式节点(因为它们通常不是跟踪的一部分)会被错误分类为参数节点。因此,标记方法不应使用全局阈值,而应使用每个节点的本地和上下文信息。
[0105]
一种替代方法是根据节点的入边缘频率的阈值,将前缀树中的所有节点划分为两个集合。例如,可以通过计算入边缘频率的平均值来找到这两个集合的阈值。因此,高边缘频率高于平均值,而低边缘频率低于平均值。另一种更可靠的离群方法是对边缘频率进行排序,按顺序识别最远的两个边缘频率,并将它们的平均值作为低频和高频之间的边界。
[0106]
图12示出了使用入边缘频率的平均值来划分两个集合的示例。在该示例中,平均边缘频率是2.42。因此,具有高入边缘频率(大于2.42)的节点是{get,v1,v2,list,info},分别显示在1201、1202、1203、1204和1205处。具有高传入频率的节点是模式节点,在图12中用黑色表示。该过程具有较低的运行时间复杂度,通过对所有节点进行一次分析并计算出边缘数量在o(n+m)内执行该过程,,其中n和m是节点和边缘的数量。
[0107]
在步骤605中,暂停标记节点。步骤601至604的执行提供了一种将跨度抽象添加到跨度前缀树并自动为终端、模式和参数节点标记颜色的方法。出于效率的原因,尽快停止学习阶段是有利的。因此,需要一种机制来在任何给定时间估计还需要分析多少跨度才能构建具有代表性的跨度前缀树。这提出了双重挑战,因为系统不知道存在多少不同的跨度抽象,并且系统不知道何时分析了足够的跨度来构建具有代表性的跨度前缀树。
[0108]
假设观察到的每个跨度是随机的,独立于其它跨度,概率相等,并且所有跨度呈现的参数节点总数远大于模式节点,例如|p|>>|s|。在这种情况下,需要确定需分析的平均跨度数,以了解所有可能的参数和模式节点,从而停止学习阶段。假设微服务应用在其生命周期内生成|s|个跨度,具有n个不同的节点(模式节点或参数节点)。微服务应用开始运行并开始生成跨度流。每次生成新的前缀树时,都会更新跨度前缀树。需要知道需分析的估计跨度数以了解所有n个不同的节点。
[0109]
e(s)表示需要分析以了解所有n个不同节点类型的预期跨度数。然后e(0)=0,并且
[0110][0111]
e(s)是前n个正整数的调和级数的部分和。例如,对于n=2,e(s)=3;对于n=7,e(s)=18.15。因此,分别需要3和19个观察结果来识别3种和7种不同的节点类型。对于较大的n值,可以使用以下已知的近似值:
[0112][0113]
其中,γ≈0.5772是欧拉常数。e(s)可以按如下算式近似为n

+∞:
[0114][0115]
结果是,平均需要收集n(ln n+γ)个跨度来分析每种类型的至少一个节点。如图13所示,当n=100时,平均需要419个观察结果来收集所有不同的跨度类型。由于参数节点通常具有较大的域大小,因此当n=10000时,需要87876个观察结果。
[0116]
这些结果提供了重要的见解,即由于模式节点的域大小较小,因此作为观察到的跨度数函数的不同模式节点数的导数比参数节点数的导数停止变化的速度要快得多。因此,可以分析模式节点标记的相对变化率,并且当其达到零值(或接近零或近似为零的值)时,将导数用作停止条件。如果使用参数节点的变化率来推导停止条件,则可能会出现训练阶段永远不会结束的情况,因为随着时间的推移可以看到新的参数节点。例如,如果定期将新客户或产品添加到应用中并且端点使用客户/产品id将参数传递给微服务调用,则可能会出现这种情况。
[0117]
因此,该方法使用以下过程来停止学习阶段:
[0118]
1.α=0.000001;β=10
[0119]
2.acc=0
[0120]
3.count
old
=max_int
[0121]
4.whileacc《β:
[0122]
5.span=read_span()
[0123]
6.t=update_span_trie(span)
[0124]
7.count
new
=|high_incoming_edge_frequency(g)|
[0125]
8.δ=(count
new-count
old
)/count
old
[0126]
9.ifδ《α:
[0127]
10.acc+=1
[0128]
11.else:
[0129]
12.acc=0
[0130]
当循环(4)控制学习阶段在终止之前需要处理的跨度数时,每个循环读取跨度(5),更新跨度前缀树t(6),并使用函数|high_incoming_edge_frequency(g)|对标记为模式节点的节点数进行计数(7)。增量变量δ存储跨度前缀树t的变化率(8)。变量acc是一个累加器,它存储具有零或非常小的变化率的连续迭代次数(9-12)。当β个连续跨度没有导致前缀树t的结构发生变化(即,while acc《β)时,该过程停止学习阶段。
[0131]
一旦学习阶段结束,当模式节点(具有大于预定阈值的入边缘频率的节点)数量的变化率近似为零时,所识别的模式节点稳定下来,并且图6中的步骤606提取与所识别路径的特征相对应的模式,该模式将被用于将跨度分配给跨度分类模块中的类别(以及可选地,分配给时间序列id)。
[0132]
在步骤606中执行的第一个过程是通过替换参数节点来压缩跨度前缀树。对于每个跨度前缀树,过程如下。首先,对于跨度前缀树中的每一级节点,将具有相同父节点的低边缘频率节点(即,具有低于预定阈值的入边缘频率的节点)合并为唯一参数节点。然后,使
用唯一标识符(例如,{p
x
})标记每个新创建的参数节点。接下来,更新新参数节点的边缘频率。例如,将图14(a)的跨度前缀树缩减为图14(b)所示的前缀树。
[0133]
前缀树的缩减是高效的,可以使用拓扑排序或广度优先搜索(breadth-firstsearch,bfs)算法,通过o(n+m)实现,其中n和m是节点和边缘的数量。通过将相同级别的参数节点与不同的父节点合并,并将结构转换为确定性非循环有限状态自动机(deterministicacyclicfinitestateautomaton,dafsa),可以进一步优化缩减的跨度前缀树。由于dafsa允许通过多条路径到达相同的顶点,因此这种替代数据结构使用的顶点数比前缀树少得多。
[0134]
步骤606的第二个过程是从缩减的跨度前缀树中提取模式。首先,确定从根节点到终端节点的所有路径。然后,为每条路径计算路径支持。
[0135]
路径支持的计算方式如下。对于具有出边缘的节点,支持计算方式为:
[0136]
support=incoming_edge_frequency-outgoing_edge_frequency(5)
[0137]
对于没有出边缘的其它节点,支持等于入边缘频率。
[0138]
例如,在图14(b)的跨度前缀树中,三种现有模式具有以下支持:
[0139]
·
port=1343,method=get,path=v1,support=1
[0140]
·
port=1343,method=get,path=v1,{p1},list,{p3},support=4
[0141]
·
port=1343,method=get,path=v2,{p2},info,support=3
[0142]
最常见的模式用于创建黄金模式。保留具有大于阈值t的支持的每个模式(即,可选地保留前k个模式)。忽略其它模式。在前面的示例中,如果l=3,则保留模式《port=1343,method=get,path=(v1,{p1},list,{p3})》和《port=1343,method=get,path=(v2,{p2},info)》。
[0143]
使用深度优先搜索(depth-firstsearch,dfs)算法,提取根节点和终端节点之间的所有路径是一个高效过程,因为可以通过o(n+m)实现,其中n和m分别是节点和边缘的数量。
[0144]
从跨度前缀树t中提取的每个模式都被转换为四元组(port,method,regex,ts_id),其中,regex是端点的正则表达式,ts_id是时间序列id。例如,将先前黄金模式的第二个模式转换为以下四元组:
[0145]
·
port=1343
[0146]
·
method=get
[0147]
·
regex=^/v2/\w/list/\w$
[0148]
·
ts_id=1343_get_v2_*_info_*
[0149]
port和method字段从黄金模式复制而来。正则表达式regex通过使用斜杠分隔符连接路径元素来创建。标记为{p
x
}的参数节点被转换为匹配集合[a-za-z0-9_]中的任何字符,在前面的示例中用\w表示。
[0150]
可以通过提供port、method和path正则表达式的级联的唯一字符串表示来创建时间序列id。例如,这可以通过将斜杠替换为下划线并将\w字符集替换为星号*来完成。如果域知识可用,则可以使用其它机制来创建正则表达式和时间序列id。
[0151]
regex字段包含在通用正则表达式中,该表达式将用于解析http/url端点。
[0152]
ep_regex=^((http[s]?|ftp):/)?/?([^:/\s]+)(:《port》)(《regex》)([\
w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$
[0153]
步骤606(提取跨度模式)的输出是三元组(method,ep_regex,ts_id)的列表。因此,模式由正则表达式表示。
[0154]
因此,提取的跨度模式可以各自对应于一个类别。在分析跨度时,跨度分类模块可以通过将提取的跨度特征与模式的特征进行匹配,来将跨度分类为该类别。
[0155]
图15总结了上述步骤,并示出了用于确定从微服务应用中的跨度提取的特征的模式的方法,其中每个跨度是属性-值对的向量。在步骤1501中,所述方法包括:从多个跨度中提取多个特征。在步骤1502中,所述方法包括:形成对应于跨度的一系列跨度抽象,每个跨度抽象包括相应跨度的特征。在步骤1503中,所述方法包括:通过将每个跨度抽象映射到跨度前缀树中的一系列对应节点,从一系列跨度抽象形成所述前缀树。在步骤1504中,所述方法包括:识别前缀树中入边缘频率大于预定阈值的节点。在步骤1505中,所述方法包括:选择到每个此类节点的路径的特征作为模式并存储该模式以供将来检测。
[0156]
在没有足够的计算资源来处理所有传入跨度的情况下,渐进式学习模块可以仅从跨度缓冲器选择的跨度子集中处理和提取模式。然而,如果有足够的资源可用,渐进式学习模块可以从所有传入跨度中学习(即,在跨度提取器中,从所有传入跨度中提取特征)。
[0157]
一旦在渐进式学习模块中识别出要提取的特征,就从跨度分类模块(图3中的303)中的传入跨度中提取这些特征,现在将描述该模块的操作。
[0158]
跨度分类模块303处理新跨度。它使用步骤601(提取特征)中描述的相同过程接收跨度并提取其方法和端点。这些字段与黄金模式的方法和正则表达式ep_regex匹配。
[0159]
当与模式存在匹配时,跨度分类模块303发出跨度被分配到的类别,并且(可选地)可以将时间序列id分配给跨度。否则,返回关键字none,并且跨度可以由跨度收集器模块308存储以供进一步处理。
[0160]
使用前面的示例,如果微服务a调用另一个微服务b,并且跟踪服务器生成具有方法get和端点http://192.168.5.2:1343/v2/cust03/list/prod09的新跨度,则跨度分类模块迭代黄金模式以识别要发出的类别和/或时间序列id。由于以下模式与方法get和跨度的端点匹配,因此系统发出时间序列id 1343_get_v2_*_info_*。
[0161]
^((http[s]?|ftp):/)?/?([^:/\s]+)(:1343)(^/v2/\w/list/\w$)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$
[0162]
此步骤是高效的,因为使用标准算法构建确定性有限自动机(deterministic finite automaton,dfa)来识别ep_regex只完成一次,并且运行时间为o(2n),其中n是正则表达式的大小。对于微服务应用端点,n通常小于10。因此,创建m个模式的复杂度可以近似为m
·
o(1)。一旦构建完成,处理端点是线性的o(n),其中n是路径元素的数量。
[0163]
当跨度收集器模块308存储多于k个跨度时,学习阶段重新开始。由于没有黄金模式能够匹配k个跨度抽象,因此跨度收集器模块中的跨度分析很可能会使跨度前缀树的结构发生变化,从而生成新的模式集合。
[0164]
图16示出了用于对微服务应用中的跨度进行分类的方法,其中每个跨度是属性-值对的向量。该方法由跨度分类模块执行。在步骤1601中,所述方法包括:接收多个跨度。在步骤1602中,所述方法包括:从每个跨度中提取多个特征。在步骤1603中,所述方法包括:根据所提取的特征将多个跨度分类为多个类别。
[0165]
上述每个模块可以包括处理器和非易失性存储器。每个模块可以包括多个处理器和多个存储器。所述存储器可以存储可由所述处理器执行的数据。所述处理器可以用于根据以非瞬时形式存储在机器可读存储介质上的计算机程序运行。所述计算机程序可以存储用于使所述处理器以本文描述的方式执行其方法的指令。这些组件可以在物理硬件或云中实现。
[0166]
现在将描述本发明的一些优点。
[0167]
有利地,分类系统能够处理跨度突发。由于大规模微服务应用可以在短时间内生成数百万个跨度,因此该机制能够将跨度产生者与跨度使用者分离。仅依赖于使用消息队列系统进行缓冲的传统方案不能保证构造具有代表性的跨度模型。本发明使用可靠的统计采样技术来应对跨度突发。这使得该过程具有可扩展性。
[0168]
所述系统还可以提高处理效率。所述系统通过探索使用方法调用和端点对跨度进行分类,实现了低运行时间复杂度o(nk),其中n是跨度数量,k是路径元素数量(通常是小于10的常数)。这使得所述方法具有可扩展性,并且适合高效处理源自大规模微服务应用的跨度。
[0169]
传统方法通常依赖于距离的概念来对url(即端点)进行聚类或分类。然而,研究人员已经证明,这些方法在许多情况下是不够的,因为相隔距离很小的端点可能提供有关不同概念的信息,而距离遥远的端点可能与具有相似概念的资源相关。因此,本方法依赖于概率模型,该模型考虑使用url的远程rest调用的语义。
[0170]
该方法特别适用于分析初始跨度类别数未知且需要从实时数据中在线学习的微服务应用。它通过使用开放的渐进式学习方法从机器学习领域汲取其基本操作。许多传统分类方法都做了一个封闭式假设,即,在训练过程中识别元素可以分配到的类,这些类将用于测试。测试期间不能出现新类。该原则不适用于处于永久变化和演进中的大规模动态微服务应用。随着开发团队引入、拆分、改进和弃用服务,微服务会启动、重启和关闭,这会导致跨度类型不断变化。因此,该系统使用开放视角,因为在测试期间可能会出现新的跨度类别,而在训练期间未发现这些类别。这种方法特别适用于大规模动态微服务应用,这些应用处于永久变化和演进中,并且与许多现有分类方法所采用的封闭式假设形成对比。
[0171]
该系统还允许渐进式学习。跨度类别是在系统观察到新跨度时学习的。当变化率导数收敛时,该方法会自动停止。该特性提供了有效的停止条件,防止系统分析不向知识模型添加额外信息的冗余跨度。
[0172]
跨度的处理和分类使用高效的数据结构(例如哈希表和前缀树),以提供具有线性运行时间的方案,从而提高性能。
[0173]
这种创新为微服务应用性能管理(application performance management,apm)的商业系统和工具的开发带来了诸多好处。此类应用使用时间序列分析来支持重要任务,例如异常检测、行为预测、变化点检测和趋势分析。
[0174]
尽管本文描述的分类系统和方法被描述为在用于时间序列分析时特别有利,但是该系统和方法也可以应用于任何数据分析领域,而不仅仅是时间序列分析。它们也可以应用于微服务应用之外的其它应用。
[0175]
申请人在此单独公开了本文中描述的每个单独特征以及两个或多个此类特征的任何组合,在某种程度上,这样的特征或组合能够根据本领域技术人员的公知常识基于本
说明书作为一个整体来执行,无论这些特征或特征的组合是否解决了本文公开的任何问题,并且不限制权利要求的范围。申请人指出,本发明的各方面可以包括任何这样的单独特征或特征的组合。鉴于上述描述,对于本领域技术人员来说显而易见的是在本发明的范围内可以进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1