CN109923847B - 调用链路的发现方法、装置、设备及存储介质 - Google Patents

调用链路的发现方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN109923847B
CN109923847B CN201880004162.9A CN201880004162A CN109923847B CN 109923847 B CN109923847 B CN 109923847B CN 201880004162 A CN201880004162 A CN 201880004162A CN 109923847 B CN109923847 B CN 109923847B
Authority
CN
China
Prior art keywords
message
class
communication
service
sequences
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.)
Active
Application number
CN201880004162.9A
Other languages
English (en)
Other versions
CN109923847A (zh
Inventor
夏伊·霍罗威茨
雅尔·埃瑞恩
马克西姆·维斯布洛特
王琛
蔡小刚
付金鑫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN109923847A publication Critical patent/CN109923847A/zh
Application granted granted Critical
Publication of CN109923847B publication Critical patent/CN109923847B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请提供了一种调用链路的发现方法、装置、设备及存储介质,属于网络技术领域。本申请提供了一种无需依赖探针程序侵入业务处理过程,也能实现调用链路的发现的方案,通过基于多个服务之间的通信消息,生成多个消息序列,根据多个消息序列生成多个类,来确定多个服务提供的业务的调用链路,能够还原应用中各个服务之间的拓扑结构,无需在业务代码中埋点,则避免了探针程序对业务处理的性能和稳定性带来的影响,也避免了探针程序带来的安全隐患,同时摆脱了探针埋点的技术受限于不同的技术以及同一技术的不同版本的限制,极大地降低了开发成本和维护成本。

Description

调用链路的发现方法、装置、设备及存储介质
技术领域
本申请涉及网络技术领域,特别涉及一种调用链路的发现方法、装置、设备及存储介质。
背景技术
随着云计算技术的发展,为了支撑日益庞大的业务量,每种业务可以通过一系列服务之间的调用来实现业务处理。对于提供任一种业务的多个服务来说,由于这多个服务既可以使用不同的编程语言来实现,又可以部署在多个虚拟机上,甚至还可以横跨多个数据中心。同时,每个服务可以具有多个接口,每个服务还可以具有多个服务实例。在这种环境下,各个服务之间的调用关系非常错综复杂,使得发现调用链路成为了一个极大的技术难点。
目前,用户会在各个节点设备的业务处理程序中,需要嵌入一段探针程序,由该探针程序侵入业务处理过程,对业务处理过程中的各个通信消息进行解析和封装,以使网络中传输的通信消息均携带调用链路的标识,最终通过收集携带了调用链路的标识的通信消息,来实现调用链路的发现。具体来说,每当一个服务接收到另一个服务的通信消息时,探针程序会解析通信消息,记录通信消息中携带的调用链路标识(英文名称:traceId)、节点标识(英文名称:spanId)以及父亲节点标识(英文名称:parentId),当服务要生成对某一个服务的通信消息时,探针程序会对父亲节点标识递增,并向通信消息中封装调用链路标识、节点标识以及递增的父亲节点标识,再向被调用的该个服务发送携带了调用链路标识、节点标识以及父亲节点标识的通信消息。在数据分析阶段,会根据通信消息携带的调用链路标识,对携带了同一调用链路标识的通信消息汇总,作为一条调用链路上的各个通信消息,再通过父亲节点标识组织起不同通信消息之间的调用关系,从而串联出一条调用链路。
采用上述方案,需要依赖探针程序侵入业务处理过程,才能实现调用链路的发现,而探针程序侵入业务处理过程后,会影响业务处理的性能和稳定性,具有安全隐患,并且开发和维护探针程序需要高成本。
发明内容
本申请实施例提供了一种调用链路的发现方法、装置、设备及存储介质,能够解决相关技术中探针程序侵入业务处理而具有安全隐患,并需要高成本的技术问题,所述技术方案如下:
第一方面,提供了一种调用链路的发现方法,所述方法包括:
获取多个服务之间的通信消息;
基于多个服务之间的通信消息生成多个消息序列,所述多个消息序列中的每个消息序列包括用于完成一个业务的所有通信消息;
根据所述多个消息序列生成多个类;对于所述多个类中的每个类,所述类具有一个公共子序列,所述公共子序列为用于生成所述类的所有消息序列的公共部分;
从所述多个类具有的公共子序列中,确定所述多个服务提供的一种或多种业务的调用链路。
可选地,所述基于多个服务之间的通信消息生成多个消息序列,包括:
对所述多个消息序列层次聚类,生成类树,所述类树中的每个节点为一个类。
可选地,所述从所述多个类具有的公共子序列中,确定所述多个服务提供的一种或多种业务的调用链路,包括:
从所述类树中选择一个或多个剪切点;
从所述类树中确定与所述一个或多个剪切点对应的一个或多个目标类;
根据所述一个或多个目标类中的每个目标类具有的公共子序列,确定一种业务的调用链路。
可选地,所述从所述类树中选择一个或多个剪切点,包括:
根据所述类树中每个类的支持度和序列长度中的至少一项,从所述类树中选择所述一个或多个剪切点,类的支持度用于指示所述类对应的消息序列的数量,类的序列长度用于指示所述类对应的公共子序列的长度。
可选地,所述根据所述类树中每个类的支持度和序列长度中的至少一项,从所述类树中选择所述一个或多个剪切点,包括:
从所述类树的多个类中,选择支持度最大,且序列长度大于序列长度阈值的第一类,作为剪切点;或者,
从所述类树的多个类中,选择序列长度大于父类的序列长度、且支持度与所述父类的支持度的差值小于差值阈值的第二类,作为剪切点;或者,
从所述类树的多个类中,丢弃选择支持度小于支持度阈值的第三类。
可选地,所述根据所述多个消息序列生成多个类,包括:
基于所述多个消息序列之间多种消息序列的组合分别具有的公共子序列,确定所述多种消息序列的组合中的每个组合内的相似度;
基于所述多种消息序列的组合的相似度,对所述多个消息序列聚类,得到所述多个类。
可选地,所述基于所述多个消息序列之间多种消息序列的组合分别具有的公共子序列,确定所述多种消息序列的组合中的每个组合内的相似度,包括:
从所述多个消息序列中确定多种消息序列的组合;
确定所述多种消息序列的组合中每种组合的公共子序列的长度;
基于所述多种消息序列的组合中每种组合的公共子序列的长度,确定所述组合的相似度,所述组合的相似度与所述组合具有的公共子序列的长度正相关。
可选地,所述基于多个服务之间的通信消息生成多个消息序列,包括:
根据每个通信消息的发生时间,从所述多个服务的通信消息中,确定每个业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息;
根据确定的所述业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息,生成所述业务的一个消息序列。
可选地,所述根据确定的所述业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息,生成所述业务的一个消息序列,包括:
将所述业务的事务请求消息,排在所述业务的一个消息序列的第一位;
将所述业务的事务返回消息,排在所述业务的一个消息序列的最后一位;
根据所述事务请求消息与所述事务返回消息之间的通信消息的时间戳,对所述事务请求消息与所述事务返回消息之间的通信消息进行排序;
将依次排列的所述事务请求消息与所述事务返回消息之间的通信消息,排在所述业务的一个消息序列的所述第一位和所述最后一位之间。
第二方面,提供一种调用链路的发现装置,用于执行上述调用链路的发现方法。具体地,该调用链路的发现装置包括用于执行上述第一方面或第一方面的任一种可选方式所述的调用链路的发现方法的功能模块。
第三方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器;所述处理器执行所述存储器存储的指令,使得所述计算机设备执行第一方面或第一方面的任一种可选方式所述的调用链路的发现方法。
第四方面,提供了一种计算机可读存储介质,所述存储介质中存储指令,计算机设备执行所述指令以实现第一方面或第一方面的任一种可选方式所述的调用链路的发现方法。
第五方面,提供了一种包含指令的计算机程序产品,计算机设备执行所述计算机程序产品中的指令以实现第一方面或第一方面的任一种可选方式所述的调用链路的发现方法。
第六方面,提供了一种芯片,所述芯片包括处理器和/或程序指令,当所述芯片运行时,实现上述第一方面或第一方面的任一种可选方式所述的调用链路的发现方法。
附图说明
图1是本申请实施例提供的一种实施环境的架构图;
图2是本申请实施例提供的一种计算机设备的结构示意图;
图3是本申请实施例提供的一种调用链路的发现方法的流程图;
图4是本申请实施例提供的业务的调用链路的示意图;
图5是本申请实施例提供的业务的调用链路的示意图;
图6是本申请实施例提供的业务的调用链路的示意图;
图7是本申请实施例提供的截获服务之间的通信消息的示意图;
图8是本申请实施例提供的对消息内容聚类的示意图;
图9是本申请实施例提供的消息序列的示意图;
图10是本申请实施例提供的消息序列的示意图;
图11是本申请实施例提供的消息序列的示意图;
图12是本申请实施例提供的类树的示意图;
图13是本申请实施例提供的相似度矩阵的示意图;
图14是本申请实施例提供的从类树中选择剪切点的示意图;
图15是本申请实施例提供的从类树中选择剪切点的示意图;
图16是本申请实施例提供的从类树中选择剪切点的示意图;
图17是本申请实施例提供的一种发现调用链路的技术框架的示意图;
图18是本申请实施例提供的一种调用链路的发现装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1是本申请实施例提供的一种实施环境的架构图,参见图1,该调用链路的发现方法可以应用于该实施环境架构中。该实施环境架构中可以包括服务器、终端以及通信消息数据库。其中,服务器可以提供为下述实施例中的计算机设备。服务器可以是提供应用性能管理服务的平台。服务器可以从通信消息数据库中获取多个服务之间的通信消息,通过执行下述方法实施例发现调用链路,将发现的调用链路提供给终端。终端可以是移动终端或个人电脑(personal computer,简称:PC)。终端可以安装有服务器对应的客户端,终端可以通过该客户端,接收服务器提供的调用链路。或者,终端可以登录服务器对应的网页,接收服务器提供的调用链路。
图2是本申请实施例提供的一种计算机设备的结构示意图,该计算机设备200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,简称:CPU)201和一个或一个以上的存储器202,其中,处理器201执行存储器202存储的指令,使得计算机设备执行下述方法实施例中的调用链路的发现方法。当然,该计算机设备还可以具有有线或无线网络接口以及输入输出接口等部件,以便进行输入输出,该计算机设备200还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,计算机设备可以执行该存储介质中的指令,以实现下述实施例中的调用链路的发现方法。例如,计算机可读存储介质可以是只读存储器(read-only memory,简称:ROM)、随机存取存储器(random access memory,简称:RAM)、只读光盘(compact disc read-only memory,简称:CD-ROM)、磁带、软盘和光数据存储设备等。
图3是本申请实施例提供的一种调用链路的发现方法的流程图,该方法的执行主体可以为计算机设备,包括:
301、计算机设备获取多个服务之间的通信消息。
计算机设备可以是服务器、个人电脑、笔记本电脑、终端等,计算机设备可以为实体设备;或者,计算机设备可以是独立的一台设备,可以是由多台设备组成的集群设备,可以是一台设备上的一个或多个程序模块的统称;或者,计算机设备可以是实体设备上运行的虚拟机或容器;或者,计算机设备可以是分布在多台设备上的多个程序模块的统称。
通信消息可以是提供服务的设备所生成的任一通信消息,具体可以是业务处理触发的通信消息;例如,通信消息是服务与服务之间的通信消息,或者是服务接收到的终端的通信消息,或者是服务向终端返回的通信消息等。可选地,通信消息可以不是业务处理触发的通信消息,而是在业务处理的时间段中产生的通信消息,例如是心跳通信消息、操作系统的进程通信消息等。
通信消息可以由应用中的服务生成,该服务可以是前端服务、中间层服务、后端服务等。可选地,服务可以为微服务(micro service,简称:MS)。可选地,服务可以用于描述一段计算机程序对外提供的功能以及相关接口,例如可以描述服务的统一资源定位符(uniform resource locator,简称:URL)、参数等。
每个服务可以具有一个或多个可调用的接口,每个服务可以通过调用其他服务的接口,向其他服务发送通信消息,或者接收其他服务通过接口返回的通信消息。从而服务通过不同接口之间传递的通信消息,来进行业务处理。例如,服务A可以通过调用服务B的接口,向服务B发送通信消息;服务B接收到通信消息后,可以进行业务处理,得到处理结果,生成携带处理结果的通信消息,通过被调用的接口,向服务A返回通信消息。
可选地,在每次业务处理的过程中,前端服务可以为第一个进行业务处理的服务,即调用链路上的第一个服务。当用户通过终端触发输入操作后,前端服务可以接收输入的事务请求消息,并触发一系列后台服务(例如中间层服务或者后端服务)之间的调用,来进行相应的业务处理;前端服务接收后台服务返回的事务返回消息,返回给终端,以便终端根据该事务返回消息,向用户呈现业务的处理结果。其中,业务可以划分为不同的业务类型(transaction type,简称:TxT),举例来说,业务可以包括登录业务、注册业务、备份业务等。每个服务可以具有一种或多种业务对应的接口,通过调用服务的某种业务对应的接口,来触发该服务进行相应业务的业务处理。
在一个示例性场景中,请参见图4,假设一个应用包括A、B、C、D、E五个服务,共计提供三种不同的业务。业务1为登录业务;业务1的调用链路为:前端服务A调用服务B,服务B调用服务C,服务C再调用服务D,从而实现登录业务的处理过程。业务2为注册业务;业务2的调用链路为:前端服务A调用服务E,服务E调用服务C,最后服务C调用服务D,从而实现注册业务的处理过程。业务3为删除账户;业务3的调用链路为:前端服务A调用服务E,服务E调用服务B,服务B再调用服务C,最后服务C调用服务D,从而实现删除账户的处理过程。
可选地,服务可以具有一个或多个服务实例,服务之间的调用可以通过服务实例之间的调用实现。其中,服务实例是指基于某种计算机编程语言,对服务的功能和接口的实现,服务实例通常为在内存中加载的一段可执行代码,同一服务的不同服务实例可以运行在相同或不同的计算机设备上,例如可以运行在计算机设备上的虚拟机中。
在一个示例性场景中,请参见图5,图5示出了两个应用的服务、服务实例以及虚拟机之间的拓扑关系,应用1包括三个微服务,即微服务MS1、微服务MS2和微服务MS3。应用2包括两个微服务,即微服务MS3和微服务MS4。每个微服务有多个服务实例。例如,微服务MS1有两个服务实例,即服务实例P1-1和服务实例P1-2。微服务MS2有三个服务实例,即服务实例P2-1、服务实例P2-2和服务实例P2-3。同一服务的不同服务实例可以运行在不同的虚拟机上。例如,服务实例P2-1运行在虚拟机H1上,服务实例P2-2和服务实例P2-3运行在虚拟机H2上。图5中的加粗线条为调用链路1的示例。调用链路1描述了微服务之间的调用关系。调用链路1为:应用APP1调用微服务MS1,微服务MS1调用微服务MS2,微服务MS2调用微服务MS3,微服务MS3调用应用APP1。图5中的虚线为调用链路2的示例。调用链路2描述了服务实例之间的调用关系。调用链路2为:应用APP1调用服务实例P1.2,服务实例P2.3调用服务实例P3.1,服务实例P3.1调用应用APP1。
由于每个服务可以具有多个服务实例,对于任一个服务来说,该服务可以通过调用不同的服务实例,实现同一种业务的业务处理。示例性地,请参见图6,图6的虚线和点画线提供了同一种业务的两种调用链路的示例,图6中的虚线为调用链路2的示例。调用链路2为:应用APP1调用服务实例P1.2,服务实例P1.2调用服务实例P2.3,服务实例P2.3调用服务实例P3.1,服务实例P3.1调用应用APP1。图6中的点画线为调用链路3的示例。该调用链路3为:应用APP1调用服务实例P1.1,服务实例P1.1调用服务实例P2.2,服务实例P2.2调用服务实例P3.2,服务实例P3.2调用应用APP1。从图6可以看出,即使对于同一种业务,由于微服务的接口可以由不同服务实例提供,这种业务可能会具有多种调用关系,这对调用链路的发现形成了巨大的挑战。
本申请实施例中,可以通过获取多个服务之间的通信消息,来实现调用链路的发现。具体来说,同一条调用链路上各个通信消息的传递过程具有规律性。一个业务的每次业务处理过程,可以看作多个服务沿着同一条调用链路,来执行同一种业务逻辑,例如假设对于某个业务来说,该业务的每次业务处理过程都是:服务A接收终端的事务请求消息,进行业务处理后,向服务B发送通信消息,服务B进行业务处理后,向服务C发送通信消息,服务C进行业务处理后,向终端发送事务返回消息,则通过服务A、服务B和服务C的通信消息,还原服务A、服务B和服务C之间的依次调用关系,即可得到调用链路“服务A调用服务B,服务B调用服务C”。
关于获取多个服务之间的通信消息的方式,在一种可能的实现中,可以对多个服务监听,得到多个服务的通信消息。具体来说,可以采用网络监听技术,针对多个服务所处的网络进行网络监听,当网络中传输每个通信消息时,可以截获网络中的每个通信消息,从而得到多个服务的通信消息。
对于监听的方式,可以使用抓包工具,对多个服务旁路监听。具体地,可以在运行抓包工具的过程中,由抓包工具截获多个服务发送的通信消息以及多个服务接收的通信消息。其中,旁路监听可以看作一种被动的接入方式,抓包工具被动地接入至多个服务所处的网络,而无需主动的向网络发送数据分组的回复通信消息,也就避免了对网络产生的影响,从而可以无侵入的、隐蔽地获取到多个服务的通信消息。
其中,抓包工具可以为任一种具有旁路监听能力的工具,包括而不限于网络上的数据流转储工具(英文名称:TCP Dump)、网络封包分析软件(英文名称为:Wireshark或Ethereal)、测试软件(英文名称:Probe)、超文本传输协议(hypertext transferprotocol,简称:http)协议调试代理工具(英文名称为:Fiddler)以及网络分析安全软件(airodump-ng)等。抓包工具可以运行在多个服务所处的网络中的任一个或多个设备上。举例来说,使用抓包工具进行旁路监听可以包括实现方式一至实现方式二的任一种或两种的组合。
实现方式一、可以在多个服务所处的虚拟机上运行抓包工具,由多个服务所处的虚拟机使用抓包工具,对多个服务旁路监听。其中,如果多个服务运行在分布式系统的多个虚拟机上,可以在多个虚拟机上均安装抓包工具,使用每个虚拟机上的抓包工具来进行旁路监听,如果多个服务运行在同一虚拟机上,例如多个服务为一个虚拟机上的多个程序模块,可以在该虚拟机上安装抓包工具,使用该虚拟机上的抓包工具来进行旁路监听。
实现方式二、可以在多个服务所处的网络中的网络设备运行抓包工具,由该网络设备使用抓包工具,对多个服务旁路监听。其中,网络设备可以用于转发不同服务之间的通信消息时,该网络设备包括而不限于交换机、路由器、网关、防火墙等。
在一个示例性场景中,请参见图7,服务A有两个服务实例,即服务实例P1.1和服务实例P1.2,服务实例P1.1部署在虚拟机1上,服务实例P1.2部署在虚拟机2上。服务B有两个服务实例,即服务实例P2.1和服务实例P2.2,服务实例P2.1部署在虚拟机1上,服务实例P2.2部署在虚拟机2上。在查询手机信息的业务中,服务A要调用服务B的接口,以便通过服务B查询手机信息。图7提供了端到端的通信过程的示例,当服务实例P1.1向服务实例P1.2发送了通信消息,要查询“XXphone”的信息时,抓包工具会截获该通信消息。当服务实例P1.2向服务实例P2.1发送了通信消息,要查询“YYphone”的信息时,抓包工具会截获该通信消息。
在该场景中,为了获取服务A和服务B的通信消息,可以在虚拟机1和虚拟机2上分别安装抓包工具。当服务A调用服务B的接口时,服务A和服务B上的抓包工具会截获通信消息,记录通信信息的时间戳,对通信消息进行IP层解析,得到服务A和服务B的网络互连协议(internet protocol,简称:IP)地址和端口,对通信消息进行应用层协议解析,得到获取通信消息的消息内容,例如URL、参数等。
可选地,当监听到多个服务之间的通信消息后,可以通过对每个通信消息进行解析,将每个通信消息转换为结构化数据,并记录多个通信消息的结构化数据。示例性的,每个通信消息的结构化数据可以如下表1所示,表1中每一行代表一个通信消息,每一列代表通信消息的一个属性。
表1
Figure GDA0002547800680000071
可选地,上述旁路监听的方式可以是监听步骤的一种示例,而非必选方式,也可以通过其他监听方式来对多个服务监听,例如可以采用广播式网络监听听技术、交换式网络旁听技术等,本实施例对采用何种方式进行监听不做限定。
可选地,上述监听步骤可以是获取多个服务之间的通信消息的一种示例,而非必选步骤。可选地,也可以采用其他方式来获取多个服务之间的通信消息。例如,可以从某一数据库中下载多个服务之间的通信消息。又如,可以接收输入的多个服务之间的通信消息。再如,可以接收某一设备发送的多个服务之间的通信消息。再如,可以预先在计算机设备上存储多个服务的通信消息,则计算机设备可以读取预先存储的多个通信消息。本实施例对获取多个服务之间的通信消息的方式不做限定。
可选地,计算机设备可以获取在任一时间段中多个服务之间的通信消息。示例性地,用户可以通过计算机设备触发输入操作,输入时间段,计算机设备可以根据检测到的输入操作,获取输入操作的时间段,获取在该时间段内的多个服务之间的通信消息,以便发现在用户输入的时间段内,多个服务之间的调用链路。其中,可以根据输入的时间段以及每个通信消息的时间戳,对多个服务之间的通信消息进行筛选,筛选出时间戳属于输入的时间段的多个服务之间的通信消息,从而得到在该时间段多个服务之间的通信消息。
本实施例中,考虑到多个服务在不同时间提供的业务可以不同,用户可以根据个人需求输入需要了解调用链路的时间段,计算机设备可以通过获取在输入操作的时间段的多个服务之间的通信消息,发现在该时间段的调用链路,从而保证调用链路的发现动态性强,灵活性高。
可选地,计算机设备可以为每个应用,获取对应的多个服务的通信消息,以便分别发现每个应用的调用链路。例如,计算机设备可以根据检测到的输入操作,获取输入的目标应用,查询应用与服务之间的映射关系,得到目标应用的多个服务,获取目标应用的多个服务的通信消息,从而发现目标应用的调用链路。
可选地,当得到多个通信消息后,可以对多个通信消息进行降噪处理,通过降噪处理的步骤,一方面,可以极大地提高聚类运算的准确性,另一方面,还能节约计算机设备的计算资源。
具体来说,步骤101中的获取到的大量通信消息中除了多个服务的通信消息以外,还可能夹杂噪音消息,例如可以包括一些心跳通信消息、操作系统中进程之间的通信消息。例如,如果使用抓包工具来获取通信消息,抓包工具每分钟可以截获到成千上万的通信消息,这里面大部分的通信消息可能是噪音消息。这些噪音消息会至少导致两个问题。第一,影响聚类算法的准确性;如果直接根据夹杂噪音消息的通信消息来分析调用链路,会导致计算结果的准确性较差,尤其是像心跳通信消息这样的规律型噪音,会在通信消息占很大的比例,如果不排除心跳通信消息的干扰,直接对大量通信消息进行聚类运算,可能会干扰到聚类运算的准确性。第二,造成计算资源的浪费;噪音消息本身是与业务处理无关的通信消息,对于调用链路的发现并没有实际作用,然而噪音消息的比例却可能占据90%以上,根据噪音消息进行聚类处理,会占用很大的计算资源。
而本实施例中,考虑到了噪音消息会对聚类运算的影响,可以从多个通信消息中过滤掉这些噪音消息,例如过滤掉心跳通信消息、操作系统中进程之间的通信消息,而保留多个服务之间的通信消息,即对于链路发现具有实际意义的通信消息。
针对降噪处理的方式,可选地,可以根据服务部署信息,对多个通信消息降噪处理。服务部署信息用于标识多个服务。服务部署信息可以包括多个服务的元数据(英文名称:metadata)。服务的元数据用于描述服务,例如,服务的元数据可以是服务的标识,举例来说,服务的标识可以包括服务的名称、编号、网络地址等。服务部署信息可以存储在中央数据仓库服务(英文名称:inventory service)中,可以通过查询中央数据仓库服务,得到中央数据仓库服务存储的服务部署信息。
可选地,服务部署信息可以包括每个服务的服务实例的元数据,服务实例的元数据用于描述服务实例,例如,服务实例的元数据可以是服务实例的标识,举例来说,服务实例的标识可以包括服务实例的名称、编号、网络地址、端口号等。
可选地,服务部署信息可以包括服务与服务实例之间的对应关系,例如,服务部署信息可以包括至少一个服务的元数据以及对应的至少一个服务实例的元数据。
关于根据服务部署信息进行降噪处理的过程,可选地,可以包括以下方式(1)至方式(2)中的任一种或多种的组合:
方式(1)根据服务部署信息,从多个通信消息中,过滤掉发送方不属于多个服务的通信消息。
可以根据服务部署信息,获取多个服务的标识,对于多个通信消息中的每个通信消息,可以判断该通信消息中发送方的标识是否属于多个服务的标识,当该通信消息中发送方的标识不属于多个服务的标识时,则过滤掉该通信消息,当该通信消息中发送方的标识属于多个服务的标识时,则保留该通信消息,从而可以过滤掉发送方不属于多个服务的通信消息。
方式(2)根据服务部署信息,从多个通信消息中,过滤掉接收方不属于多个服务的通信消息。
可以根据服务部署信息,获取多个服务的标识,对于多个通信消息中的每个通信消息,可以判断该通信消息中接收方的标识是否属于多个服务的标识,当该通信消息中接收方的标识不属于多个服务的标识时,则过滤掉该通信消息,当该通信消息中接收方的标识属于多个服务的标识时,则保留该通信消息,从而可以过滤掉接收方不属于多个服务的通信消息。
可选地,对多个通信消息进行过滤的方式可以包括分批过滤和流式过滤这两种方式,本实施例对采用的过滤方式不做限定。
具体来说,分批过滤是指当获取到一批通信消息后,基于这一批通信消息的发送方和接收方,对这一批通信消息进行过滤,分批过滤的详细过程可以参见上述描述。
可选地,也可以采用流式过滤的方式,对多个通信消息进行过滤。该流式过滤是指每当获取到一个通信消息时,即判断是否过滤掉该通信消息,如果需要过滤掉该通信消息,则直接过滤掉该通信消息,而无需存储该通信消息。具体来说,可以每当获取到一个通信消息时,确定该通信消息的发送方标识和接收方标识,当该通信消息的发送方标识和接收方标识属于多个服务的标识时,则保留该通信消息,以便后续根据该通信消息发现调用链路,当该通信消息的发送方标识和接收方标识不属于多个服务的标识时,则直接过滤掉该通信消息。
可选地,可以从方式(1)和方式(2)中,选择一种方式来执行,也可以共同执行方式(1)和方式(2)。针对结合方式(1)至方式(2)的方式,可以根据服务部署信息,从多个通信消息中,过滤掉发送方不属于多个服务且接收方也不属于多个服务的通信消息。例如,对于多个通信消息中的每个通信消息,可以判断该通信消息中发送方的标识和接收方的标识是否属于多个服务的标识,当该通信消息中发送方的标识和接收方的标识均不属于多个服务的标识时,则过滤掉该通信消息,当该通信消息中发送方的标识和接收方的标识中的任一项属于多个服务的标识时,则保留该通信消息。
可选地,根据服务部署信息来实现降噪处理,仅是降噪处理步骤的一种示例,而非降噪处理步骤的必选方式。在另一种可能的实现中,也可以使用其他方式来实现降噪处理,例如可以根据检测到的输入操作,获取输入的多个服务的标识,以便根据输入的多个服务的标识来进行降噪处理,又如可以预先存储多个服务的标识,以便根据预先存储的多个服务的标识来进行降噪处理。本实施例对通过何种方式来实现降噪处理不做限定。
可选地,降噪处理的步骤可以在聚类运算之前很早就已经完成,则当需要发现调用链路时,直接获取已经降噪后的通信消息即可,而无需要求降噪处理的步骤和聚类运算的步骤的执行时间必须临近。
可选地,降噪处理的步骤和聚类运算的步骤可以由同一个计算机设备执行,也可以由不同计算机设备执行。例如,可以先由计算机设备A执行降噪处理的步骤,再将降噪处理后的通信消息发送给计算机设备B,由计算机设备B执行调用链路的发现。在本实施例中,仅是以同一计算机设备执行降噪处理的步骤和聚类运算的步骤为例,进行举例描述。
可选地,降噪处理的步骤可以仅是发现调用链路的可选步骤,而非发现调用链路的必选步骤。在另一种可能的实现中,也可以无需执行降噪处理的步骤,而是直接根据获取到的多个通信消息,执行后续步骤。例如,可以在数据库中直接存储不包含噪音的多个服务之间的通信消息,则从数据库中获取到多个服务之间的通信消息后,可以无需执行降噪处理的过程,而是执行后续步骤。又如,如果采集的多个服务之间的通信消息夹杂的噪音较少,则获取到多个服务之间的通信消息后,可以无需执行降噪处理的过程,而是执行后续步骤。
可选地,计算机设备可以为多个服务之间的通信消息,分配对应的消息标识。
本申请的发明构思包括而不限于,对于同一种业务来说,每次业务处理的调用链路会大致相同。例如,对于注册业务来说,注册业务的业务处理流程可以包括:首先,前端服务接收输入的用户信息,然后,前端服务调用身份验证服务,由身份验证服务向认证设备发送验证码请求,并接收认证设备返回的验证码,当前端服务接收到正确的验证码时,前端服务会调用身份管理服务,添加一个新用户,并返回结果。如此,注册业务每次执行,都会重复执行上述业务处理流程。
在上述发明构思的基础上,对于同一种业务来说,无论执行了多少次业务处理,每次业务处理过程中,调用链路上的各个通信消息会保持不变,另外各个通信消息的发生时间的顺序也会保持不变。比如说,假设某种业务的调用链路上的通信消息是通信消息①、通信消息②和通信消息③,那么,在多个消息序列里,不论中间夹杂了多少不属于这种业务的通信消息,通信消息①、通信消息②和通信消息③还是会按第一个通信消息是通信消息①,第二个通信消息是通信消息②,第三个通信消息是通信消息③的顺序,作为多个消息序列中的公共子序列出现。例如消息序列①②④③和消息序列①⑤②④③,这两个消息序列均包括了公共子序列①②③,如果识别出公共子序列①②③为一种模式,即可确定一条调用链路上的通信消息。其中,“①”、“②”和“③”为通信消息的消息标识,用于指代对应的通信消息。
由此可见,各个服务之间的大量通信消息,实质上蕴含了各种业务的调用链路符合的自然规律,通过对大量的通信消息进行数据分析,能够挖掘出调用链路。为了方便进行数据分析,简化聚类运算的过程,可选地,计算机设备可以为每个通信消息分配消息标识,消息标识用于指代对应的通信消息,通过为每个通信消息分配消息标识,后续针对各个通信消息的消息标识来进行运算,可以达到对各个通信消息本身进行运算的功能,同时能够极大地简化聚类运算的步骤。其中,消息标识可以为数字、字母、符号、字符中的任一种或多种的组合。例如,消息标识可以为①、②、③;又如,消息标识可以为a、b、c等。
针对为每个通信消息分配消息标识的过程,可以根据通信消息中的参数,为通信消息分配消息标识。其中,请参见表2,表2示出了通信消息包含的各种参数,每个通信消息的参数可以包括:发送方标识,接收方标识,时间戳以及消息内容,其中发送方标识可以包括源IP地址和源端口号,接收方标识可以包括目的IP和目的端口号,消息内容可以包括请求方式(method)、统一资源标识符(uniform resource identifier,简称:URI)、参数(query param)、有效载荷(payload)等,其中请求方式可以包括请求(get)方式和提交(post)方式。
表2
Figure GDA0002547800680000101
Figure GDA0002547800680000111
可选地,可以基于多个服务的通信消息的消息类型,为每个通信消息分配对应的消息标识。其中,消息类型可以根据通信消息的发送方、接收方以及消息内容确定,可以确定通信消息的发送方、接收方以及消息内容符合的消息模板,当任意多个通信消息的发送方、接收方标识以及消息内容符合的消息模板相同时,确定该多个通信消息所属的消息类型相同,则为该多个通信消息分配相同的消息标识。
关于确定多个通信消息的发送方相同的方式,可选地,对于多个通信消息中的任两个通信消息,可以确定两个通信消息的发送方标识,当两个通信消息的发送方标识相同时,确定两个通信消息的发送方相同。示例性地,通信消息的发送方标识可以是源IP地址,也即是,可以当两个通信消息的源IP地址相同时,确定两个通信消息的接收方相同,当两个通信消息的源IP地址不同时,确定两个通信消息的接收方不同。
举例来说,如果通信消息a和通信消息b的源IP地址均为10.173.152.22,可以确定通信消息a和通信消息b的发送方相同。如果通信消息a的源IP地址为10.173.152.22,通信消息b的源IP地址为117.107.152.22,可以确定通信消息a和通信消息b的发送方不同。
当然,源IP地址仅是发送方标识的一种示例,发送方标识也可以是源IP地址以外的其他能够标识发送方的参数,本实施例对发送方标识不做限定。
可选地,可以当两个通信消息的发送方标识完全相同时,确定两个通信消息的发送方相同,也可以当两个通信消息的发送方标识中大部分的位均相同,仅有一位或几位不同时,也确定两个通信消息的发送方相同,本实施例对此不做限定。
上述描述了确定两个通信消息的发送方相同的过程。以此类推,可以采用同理的方式,确定三个或三个以上的通信消息的发送方相同,本实施例在此不做赘述。
关于确定多个通信消息的接收方相同的方式,可选地,对于多个通信消息中的任两个通信消息,可以确定两个通信消息的接收方标识,当两个通信消息的接收方标识相同时,确定两个通信消息的接收方相同。示例性地,通信消息的接收方标识可以包括目的IP地址和目的端口号,也即是,可以当两个通信消息的目的IP地址和目的端口号均相同时,确定两个通信消息的接收方相同,当两个通信消息的目的IP地址和目的端口号中的任一项不同时,确定两个通信消息的接收方不同。
举例来说,如果通信消息a和通信消息b的目的IP地址均为10.173.152.22,通信消息a和通信消息b的目的端口均为8080,可以确定通信消息a和通信消息b的接收方相同。
当然,目的IP地址和目的端口号仅是接收方标识的一种示例,接收方标识也可以是目的IP地址和目的端口号以外的其他能够标识接收方的参数,本实施例对接收方标识不做限定。
可选地,可以当两个通信消息的接收方标识完全相同时,确定两个通信消息的接收方相同,也可以当两个通信消息的接收方标识中大部分的位均相同,仅有一位或几位不同时,也确定两个通信消息的接收方相同,本实施例对此不做限定。
上述描述了确定两个通信消息的接收方相同的过程,以此类推,可以采用同理的方式,确定三个或三个以上的通信消息的接收方相同,本实施例在此不做赘述。
关于通信消息的消息内容符合的消息模板,例如,假设有通信消息a和通信消息b这两个通信消息,通信消息a的消息内容是/rest/catalog/product?id=001,通信消息b的消息内容是/rest/catalog/product?id=002,通过比较通信消息a和通信消息b的消息内容可见,通信消息a和通信消息b的消息内容中仅有参数不同,通信消息a和通信消息b的消息内容均符合消息模板:/rest/catalog/product?id=[*],则可以确定通信消息a和通信消息b符合的消息模板相同。
又如,假设有通信消息c和通信消息d这两个通信消息,通信消息c的消息内容是/rest/catalog/product?id=001,通信消息d的消息内容是/rest/profile/user?id=abc,通过比较通信消息c和通信消息d的消息内容可见,通信消息c和通信消息d的消息内容相差很远,通信消息c符合的消息模板是/rest/catalog/product?id=[*],通信消息d符合的消息模板是/rest/profile/user?id=[*],则可以确定通信消息c和通信消息d符合的消息模板不同。
关于确定通信消息的消息内容符合的消息模板的方式,可选地,可以对多个通信消息的消息内容进行聚类,将通信消息的消息内容所属的类,作为通信消息的消息内容符合的消息模板。
相应地,可以当两个通信消息的消息内容所属的类相同时,确定两个通信消息的消息内容符合的消息模板相同,可以当两个通信消息的消息内容所属的类不同时,确定两个通信消息的消息内容符合的消息模板不同。
举例来说,如果通信消息a和通信消息b所属的类均是类cluster1,可以确定通信消息a和通信消息b的消息内容符合的消息模板相同。又如,如果通信消息a所属的类是类cluster1,通信消息b所属的类是类cluster2,可以确定通信消息a和通信消息b的消息内容符合的消息模板不同。
关于确定每个通信消息的消息内容所属的类的方式,可选地,可以通过以下步骤一至步骤二,对多个通信消息的消息内容进行聚类,以确定每个通信消息的消息内容所属的类。
步骤一、获取多个通信消息的消息内容,得到多个消息内容。
本步骤一包括而不限于以下两种实现方式:
实现方式一、可以获取通信消息的负载(payload)部分承载的所有信息,将payload部分承载的所有信息作为消息内容。举例来说,请参见上表2,表2中的第一条通信消息,可以获取消息内容中payload部分承载的所有信息,即获取method、URI、参数、payload等各个字段承载的所有信息,则得到GET、/rest/catalog/product、Id=001、select*from tb_product where id=001这些信息,均作为消息内容。
实现方式二、可以获取通信消息中payload部分中的任一个或多个字段承载的信息,将payload部分中的任一个或多个字段承载的信息作为消息内容。其中,从payload部分中获取的字段可以根据业务需求确定,例如,可以获取URI、payload这两个字段承载的信息。
举例来说,请参见上表2,表2中的第一个通信消息,可以获取消息内容中payload部分中method、URI、参数、payload这四个字段中任一个字段或多个字段承载的信息,来作为这条通信消息的消息内容。以将URI、payload这两个字段承载的信息作为消息内容为例,可以得到/rest/catalog/product、select*from tb_product where id=001这两个信息。
步骤二、对多个消息内容聚类,得到每个消息内容所属的类。
对于多个消息内容中的任两个消息内容,可以获取这两个消息内容之间的相似度,得到多个相似度,基于该多个相似度,将相似度符合预设条件的多个消息内容,聚成一个类,从而得到每个消息内容所属的类。其中,任两个消息内容之间的相似度可以根据两个消息内容之间的公共子序列确定,例如,如果两个消息内容的公共字符串较长,可以将两个消息内容聚成一类,又如,如果两个消息内容中相同的字段较多,可以将两个消息内容聚成一类。
通过聚类的过程,可以将多个消息内容按照彼此是否相似,划分为一个或多个类;同一类中的不同消息内容的相似度较高,例如可以只有一个参数不一样,而其他参数都相同。举例来说,假设有三个消息内容:/rest/catalog/product?id=001、/rest/catalog/product?id=002、/rest/catalog/product?id=00n,这三个消息内容只有Query param不相同,则可以将这三个消息内容聚合成一类。相应的,任一个类中的消息内容和其他类的消息内容的相似度可以较低,例如可以从URI和Query param都不相同。举例来说,假设有两个消息内容:/rest/catalog/product?id=001和/rest/profile/user?id=abc,这两个消息内容中的URI和Query param都相差很远,则可以将这两个消息内容聚成两类。
可选地,在聚类过程中,可以为每个消息内容所属的类,分配一个类型标签。该类型标签用于标识消息内容所属的类。例如,类型标签可以为C1、C2等。聚类结束后,相似度高的消息内容会具有一个相同的类型标签。示例性地,将/rest/catalog/product?id=001和/rest/catalog/product?id=002可以均标记为C1。如此,通过聚类算法之后,每条消息内容由原先复杂冗长的字符串转换成了一个简短的类型标签。
示例性地,请参见图8,图8是本申请实施例提供的一种对消息内容聚类的示意图。获取每个通信消息的消息内容的过程可以看作对通信消息进行特征提取的过程,其中消息内容可以看作通信消息的特征值。在图8中,通过对多个通信消息的消息内容聚类,将多个通信消息聚成了三个类:类C1、类C2和类C3。
可选地,聚类的方式可以是获取每个消息内容所属的类的一种示例。在一种可能的实现中,也可以采用聚类以外的方式,来获取每个消息内容所属的类。例如,可以采用分类的方式,来获取每个消息内容所属的类;例如,可以通过预先训练一个分类器,采用该分类器,来获取每个消息内容所属的类;又如,可以设置一个或多个分类条件,将符合对应分类条件的消息内容归为一个类。本实施例对获取消息内容所属的类的方式不做限定。
可选地,对消息内容聚类的步骤可以在对消息序列聚类之前很早就已经完成,则当需要发现调用链路时,直接获取每个消息内容所属的类即可,而无需要求对消息内容聚类的步骤和对消息序列聚类的步骤的执行时间必须临近。
综上所述,可以当任两个通信消息的发送方相同、且这两个通信消息的接收方相同,且这两个通信消息的消息内容符合的消息模板相同时,为两个通信消息分配相同的消息标识。示例性地,可以当任两个通信消息的源IP地址、目的IP地址、目的端口,消息内容所属的类均相同时,为两个通信消息分配相同的消息标识。
示例性地,请参见下表3,表3中第一个通信消息和第三个通信消息的源IP地址、目的IP地址、目的端口,消息内容所属的类均相同,则为第一个通信消息和第三个通信消息分配相同的消息标识①。表3中第一个通信消息和第二个通信消息的源IP地址以及消息内容所属的类不同,则为第一个通信消息和第二个通信消息分配了不同消息标识,第一个通信消息的消息标识为①,第二个通信消息的消息标识为②。
表3
Figure GDA0002547800680000141
综上所述,通过上述分配消息标识的过程,本实施例中,第一,解决了根据哪些参数来分配消息标识的问题;第二,解决了如何根据通信消息的参数来分配消息标识的问题;第三,通过分配消息标识的过程,能够提高后续聚类运算的效率和准确性。
可选地,在确定通信消息的消息类型时,可以无需考虑通信消息中的源端口号以及时间戳,例如,通信消息中源端口号实质是一串随机数,每次进行调用时,会为发送方分配一个随机数,作为源端口号,则可以在确定通信消息的消息类型时,忽略源端口号这个参数。
而本申请实施例中,通过上述过程,根据不同通信消息的发送方、接收方以及消息内容,来为通信消息分配相同的消息标识。首先,根据通信消息的消息标识来进行聚类,即可达到根据通信消息本身来进行聚类的功能;同时,将通信消息由原先复杂冗长的字符串转换成了一个简短的消息标识,能够让计算机设备快速进行后续的聚类运算,提高聚类运算的速度和效率;其次,当多个通信消息的发送方、接收方以及消息内容符合的消息模板相同时,就会使用同一消息标识来指代这些通信消息,则后续根据消息标识聚类运算时,能够极大地减少运算量,提高运算速度和效率,比如说,如果采集了大量通信消息时,如果有100条通信消息只是参数(Query param)和时间戳不同,而其他参数会相同,则会为这100条通信消息标记同一个消息标识,则无需区分这100条通信消息;再次,排除了通信消息中源端口号、消息内容中的参数等影响,可以提高后续的聚类过程的准确性。
可选地,分配消息标识的步骤以及后续对消息序列聚类的步骤可以由同一个计算机设备执行,也可以由不同计算机设备执行。例如,可以先由计算机设备A执行分配消息标识的步骤,再将每个通信消息的消息标识发送给计算机设备B,由计算机设备B执行续对消息序列聚类的步骤。本实施例仅是以同一计算机设备执行分配消息标识的步骤和续对消息序列聚类的步骤为例,进行举例描述。
可选地,也可以无需执行分配消息标识的步骤,而是直接将通信消息中的任一种参数或多种参数的组合,作为通信消息的消息标识。在另一种可能的实现中,也可以确定通信消息的消息标识,而是直接根据通信消息本身,来进行后续的聚类运算过程。
302、计算机设备基于多个服务之间的通信消息生成多个消息序列,该多个消息序列中的每个消息序列包括用于完成一个业务的所有通信消息。
消息序列可以包括用于完成一个业务的事务请求消息、事务返回消息以及事务请求消息与事务返回消息之间的一个或多个通信消息。可选地,消息序列可以可以包括事务请求消息的消息标识、事务返回消息的消息标识以及事务请求消息与事务返回消息之间的一个或多个通信消息的消息标识。
事务请求消息为用于完成一个业务的第一个通信消息。事务请求消息为用于完成一个业务的所有通信消息中发生时间最早的通信消息。事务请求消息可以是终端向某个服务发送的通信消息。举例来说,请参见图9,事务请求消息可以是图9中的通信消息①。
事务返回消息为用于完成一个业务的最后一个通信消息。事务返回消息为用于完成一个业务的所有通信消息中发生时间最晚的通信消息。事务返回消息可以是某个服务向终端发送的通信消息,举例来说,请参见图9,事务请求消息可以是图9中的通信消息⑧。
事务请求消息与事务返回消息之间的通信消息可以是用于完成一个业务的第二个通信消息至倒数第二个通信消息。事务请求消息与事务返回消息之间的通信消息为服务与服务之间相互调用而生成的通信消息。事务请求消息与事务返回消息之间的通信消息可以是服务向服务发送的通信消息。举例来说,请参见图9,事务请求消息可以是图9中的通信消息②、通信消息③、通信消息④、通信消息⑤、通信消息⑥或通信消息⑦。
可选地,消息序列中每个消息标识所处的位置,可以与该消息标识对应的通信消息的时间戳对应。例如,如果某个通信消息的时间戳越早,则该消息标识在消息序列中所处的位置越靠前。
可选地,生成任一个消息序列的过程可以包括以下步骤一至步骤二:
步骤一、根据每个通信消息的发生时间,从多个服务的通信消息中,确定每个业务的事务请求消息、事务返回消息以及在事务请求消息与事务返回消息之间的通信消息。
步骤一可以包括以下步骤(1.1)至步骤(1.2)。
步骤(1.1)从多个服务之间的通信消息中,选取事务请求消息和事务返回消息。
该步骤(1.1)可以包括以下方式一至方式四中任一项或多项的组合。
方式一、从多个服务之间的通信消息中,选取发送方不属于多个服务、且接收方属于多个服务的通信消息,作为事务请求消息。
具体来说,可以获取多个服务的标识,根据每个通信消息的发送方的标识以及接收方的标识,判断每个通信消息中发送方的标识是否属于多个服务的标识、接收方的标识是否属于多个服务的标识,如果任一通信消息的发送方的标识不属于该多个服务的标识、且接收方的标识属于多个服务的标识,则将该通信消息作为事务请求消息。
示例性地,请参见图9,图9中的通信消息①是终端发给网页服务器(web server)A的通信消息,因此通信消息①的发送方的标识是终端的标识,而不属于多个服务的标识,同时通信消息①的接收方是网页服务器A,则可以确定通信消息①为事务请求消息,可以作为一个消息序列的第一个通信消息。
可选地,在选取事务请求消息后,可以通过概率估算的方式,确定与事务请求消息匹配的事务返回消息。具体来说,对于多个通信消息中的每个通信消息,可以根据事务请求消息和该通信消息的时间戳或者其他消息内容,计算事务请求消息与该通信消息的匹配概率,根据多个通信消息的匹配概率,选取匹配概率最高的通信消息,作为与事务请求消息匹配的事务返回消息,从而对事物请求通信消息进行模糊匹配。
可选地,在选取事务请求消息后,可以采用下述方式四,确定抓包工具截获的与事物请求通信消息配对的通信消息,得到事物返回通信消息。
方式二、从多个服务之间的通信消息中,选取接收方不属于多个服务、且发送方属于多个服务的通信消息,作为事务返回消息。
方式二与方式一同理,可以获取多个服务的标识,根据每个通信消息的发送方的标识以及接收方的标识,判断每个通信消息中发送方的标识是否属于多个服务的标识、接收方的标识是否属于多个服务的标识。如果通信消息的接收方的标识不属于该多个服务的标识、且发送方的标识属于多个服务的标识,则将该通信消息作为事务返回消息。
示例性地,请参见图9,图9中的通信消息⑧是网页服务器(web server)A发送给终端的通信消息,通信消息⑧的接收方的标识是终端的标识,而不属于多个服务的标识,同时通信消息⑧的发送方是服务A,则可以确定通信消息⑧为事务返回消息,可以作为一个消息序列的最后一个通信消息。
可选地,在选取事务返回消息后,可以通过概率估算的方式,确定与事务返回消息匹配的事务请求消息。具体来说,对于多个通信消息中的每个通信消息,可以根据事务返回消息和该通信消息的时间戳或者其他消息内容,计算事务返回消息与该通信消息的匹配概率,根据多个通信消息的匹配概率,选取匹配概率最高的通信消息,作为与事务返回消息匹配的事务请求消息,从而对事物返回通信消息进行模糊匹配。
可选地,在选取事务返回消息后,可以采用下述方式三,确定抓包工具截获的与事物返回通信消息配对的通信消息,得到事物请求通信消息。
方式三、从多个服务之间的通信消息中,确定抓包工具截获的与事务返回消息配对的通信消息,得到事务请求消息。
抓包工具会将大量的通信消息成对返回,即每次返回一组或多组配对的通信消息,每组配对的通信消息包括一个请求消息(request)和一个响应消息(response)。也就是说,在获取大量的通信消息时,就可以确定每对请求消息和响应消息之间的配对关系。示例性地,请参见图9,获取到的通信消息中通信消息①和通信消息⑧是一组配对的通信消息,通信消息②和通信消息⑦是一组配对的通信消息,以此类推。
由于获取到的通信消息已经配对好,所以当确定事务返回消息后,确定抓包工具截获的与该事务返回消息配对的通信消息,即得到了事务请求消息。示例性地,请参见图9,确定通信消息⑧是事务返回消息后,即可确定与通信消息⑧配对的通信消息①是事务请求消息。
方式四、从多个服务之间的通信消息中,确定抓包工具截获的与事务请求消息配对的通信消息,得到事务返回消息。
方式四与方式三同理,以当确定事务请求消息后,确定抓包工具截获的与该事务请求消息配对的通信消息,即得到了事务返回消息。示例性地,请参见图9,确定通信消息①是事务请求消息后,即可确定与通信消息①配对的通信消息⑧是事务返回消息。
步骤(1.3)根据事务请求消息和事务返回消息的发生时间,选取在事务请求消息和事务返回消息之间的通信消息。
可选地,事务请求消息的发生时间可以为事务请求消息中的时间戳,事务返回消息的发生时间可以是事务返回消息的时间戳。可以根据事务请求消息的时间戳和事务返回消息的时间戳,选取时间戳在事务请求消息的时间戳和事务返回消息的时间戳之间的一个或多个通信消息。以事务请求消息的时间戳称为第一时间戳,事务返回消息的时间戳称为第二时间戳为例,可以获取事务请求消息的时间戳,得到第一时间戳。获取事务返回消息的时间戳,得到第二时间戳。从多个服务之间的通信消息中,选取时间戳位于第一时间戳和第二时间戳之间的通信消息,作为一个或多个通信消息。
其中,可以判断每个通信消息的时间戳是否晚于第一时间戳且早于第二时间戳,如果任一通信消息的时间戳晚于第一时间戳且早于第二时间戳,则选取该通信消息。如果任一通信消息的时间戳早于第一时间戳,表明该通信消息是发生时间早于事务请求消息的通信消息,该通信消息与该事务请求消息以及事务返回消息不属于同一次业务处理过程,则无需选择该通信消息。相应地,如果任一通信消息的时间戳晚于第二时间戳,表明该通信消息是发生时间晚于事务返回消息之后的通信消息,该通信消息与该事务请求消息以及事务返回消息不属于同一次业务处理过程,则无需选择该通信消息。
可选地,对于任一业务来说,当根据事务请求消息的时间戳以及事务响应通信消息的时间戳,选取该业务的通信消息时,除了选取出该业务的通信消息以外,可以选取出该业务以外的其他业务的通信消息,其他业务的通信消息可以定义为噪音消息。
示例性地,请参见图9的左半部分,假设某一次业务处理的通信消息用阿拉伯数字表示,噪音消息用希腊字母表示,并假设这次业务处理的事务请求消息是通信消息①。通信消息①的时间戳为时间戳1。这次业务处理的事务返回消息是通信消息⑧,通信消息⑧的时间戳为时间戳2。则选取时间戳位于时间戳1和时间戳2之间的通信消息,会得到通信消息②、通信消息③、通信消息④、通信消息⑤、通信消息⑥、通信消息⑦、通信消息
Figure GDA0002547800680000171
通信消息
Figure GDA0002547800680000172
通信消息
Figure GDA0002547800680000173
通信消息
Figure GDA0002547800680000174
通信消息
Figure GDA0002547800680000175
通信消息
Figure GDA0002547800680000176
和通信消息
Figure GDA0002547800680000177
其中噪音消息是通信消息
Figure GDA0002547800680000178
通信消息
Figure GDA0002547800680000179
通信消息
Figure GDA00025478006800001710
通信消息
Figure GDA00025478006800001711
通信消息
Figure GDA00025478006800001712
通信消息
Figure GDA00025478006800001713
和通信消息
Figure GDA00025478006800001714
步骤二、根据确定的事务请求消息、事务返回消息以及在事务请求消息与事务返回消息之间的通信消息,生成业务的一个消息序列。
可选地,可以根据事务请求消息的消息标识、事务返回消息的消息标识以及在事务请求消息与事务返回消息之间的通信消息的消息标识,生成业务的一个消息序列,该消息序列包括事务请求消息的消息标识、事务返回消息的消息标识以及在事务请求消息与事务返回消息之间的通信消息的消息标识。可选地,事务请求消息的消息标识、事务返回消息的消息标识以及在事务请求消息与事务返回消息之间的通信消息的消息标识,可以按照时间戳从早到晚的顺序,在消息序列中依次排列。
可选地,生成消息序列的过程可以包括以下步骤(2.1)至步骤(2.4):
步骤(2.1)将事务请求消息的消息标识,排在一个消息序列的第一位。
事务请求消息可以是一次业务处理的所有通信消息中时间戳最早的通信消息。可以将事务请求消息的消息标识排在消息序列的第一位,以使事务请求消息的消息标识充当消息序列的队首。示例性地,请参见图9的左半部分,假设确定通信消息①为事务请求消息,可以将通信消息①排在消息序列的第一位。
步骤(2.2)将事务返回消息的消息标识,排在一个消息序列的最后一位。
事务返回消息可以是一次业务处理的所有通信消息中,时间戳最晚的通信消息。可以将事务返回消息的消息标识排在消息序列的最后一位,以使事务返回消息的消息标识充当消息序列的队尾。示例性地,请参见图9的左半部分,假设确定通信消息⑧为事务返回消息,可以将通信消息⑧排在消息序列的最后一位。
步骤(2.3)根据事务请求消息与事务返回消息之间的通信消息的时间戳,对事务请求消息与事务返回消息之间的通信消息的标识,按照时间戳从早到晚的顺序进行排序。
示例性地,请参见图9的左半部分,假设根据时间戳,选取了通信消息②、通信消息③、通信消息④、通信消息⑤、通信消息⑥、通信消息⑦、通信消息
Figure GDA00025478006800001819
通信消息
Figure GDA00025478006800001820
通信消息
Figure GDA00025478006800001821
通信消息
Figure GDA0002547800680000184
通信消息
Figure GDA0002547800680000183
通信消息
Figure GDA0002547800680000182
和通信消息
Figure GDA0002547800680000181
则根据通信消息②、通信消息③、通信消息④、通信消息⑤、通信消息⑥、通信消息⑦、通信消息
Figure GDA00025478006800001816
通信消息
Figure GDA00025478006800001817
通信消息
Figure GDA00025478006800001818
通信消息
Figure GDA0002547800680000185
通信消息
Figure GDA0002547800680000186
通信消息
Figure GDA0002547800680000187
和通信消息
Figure GDA0002547800680000188
的时间戳,对通信消息②、通信消息③、通信消息④、通信消息⑤、通信消息⑥、通信消息⑦、通信消息
Figure GDA00025478006800001815
通信消息
Figure GDA00025478006800001813
通信消息
Figure GDA00025478006800001814
通信消息
Figure GDA0002547800680000189
通信消息
Figure GDA00025478006800001810
通信消息
Figure GDA00025478006800001811
和通信消息
Figure GDA00025478006800001812
按照时间戳从早到晚的顺序进行排序,得到通信消息
Figure GDA00025478006800001822
通信消息②、通信消息
Figure GDA00025478006800001826
通信消息
Figure GDA00025478006800001824
通信消息③、通信消息
Figure GDA00025478006800001825
通信消息
Figure GDA00025478006800001827
通信消息⑤、通信消息⑥、通信消息
Figure GDA00025478006800001828
和通信消息⑦。
步骤(2.4)将依次排列的事务请求消息与事务返回消息之间的通信消息的消息标识,排在一个消息序列的第一位和最后一位之间。
可以将事务请求消息与事务返回消息之间的通信消息的消息标识排在消息序列的第二位至倒数第二位。其中事务请求消息与事务返回消息之间的通信消息的消息标识中,时间戳最早的消息标识可以排在第二位。事务请求消息与事务返回消息之间的通信消息的消息标识中,时间戳最晚的消息标识可以排在倒数第二位,以此类推。示例性地,请参见图9的左半部分,可以将通信消息
Figure GDA00025478006800001829
通信消息②、通信消息
Figure GDA00025478006800001832
通信消息
Figure GDA00025478006800001833
通信消息③、通信消息
Figure GDA00025478006800001834
通信消息
Figure GDA00025478006800001830
通信消息⑤、通信消息⑥、通信消息
Figure GDA00025478006800001831
和通信消息⑦排在通信消息①和通信消息⑧之间,从而生成出夹杂了噪音消息的消息序列(seq 1)。
通过上述步骤(2.1)至步骤(2.4),可以保证事务请求消息、事务返回消息以及事务请求消息、事务返回消息之间的通信消息在消息序列之间按照时间顺序依次排列,则消息序列可以反映完成一个业务的所有通信消息的时间顺序,准确性较高。
综上所述,上述阐述了生成一个消息序列的过程为例进行描述,对于任一时间段的所有通信消息来说,如果确定了多个事务请求消息或多个事务返回消息,可以采用同理的方式,生成业务的多个消息序列。可选地,如果找到了n个事务请求消息,可以生成n个消息序列,其中n为正整数。
示例性地,假设某种业务的事务请求消息是通信消息①,如果找到了n个通信消息①,可以生成n个消息序列:消息序列seq 1、消息序列seq 2、消息序列seq 3至消息序列seqn。请参见图9的左半部分,消息序列seq 1为通信消息①、通信消息
Figure GDA0002547800680000198
通信消息②、通信消息
Figure GDA0002547800680000196
通信消息
Figure GDA0002547800680000195
通信消息③、通信消息
Figure GDA0002547800680000194
通信消息
Figure GDA0002547800680000191
通信消息⑤、通信消息⑥、通信消息
Figure GDA0002547800680000197
通信消息⑦和通信消息⑧;消息序列seq n是通信消息①、通信消息②、通信消息
Figure GDA0002547800680000199
通信消息③、通信消息
Figure GDA0002547800680000193
通信消息
Figure GDA0002547800680000192
通信消息⑤、通信消息⑥、通信消息⑦、通信消息
Figure GDA00025478006800001910
和通信消息⑧。
从消息序列seq 1和消息序列seq n这两个消息序列的例子可以看出,消息序列seq 1和消息序列seq n夹杂的噪音消息不同。消息序列seq 1夹杂的噪音是通信消息
Figure GDA00025478006800001919
通信消息
Figure GDA00025478006800001920
通信消息
Figure GDA00025478006800001911
通信消息
Figure GDA00025478006800001912
通信消息
Figure GDA00025478006800001913
和通信消息
Figure GDA00025478006800001914
消息序列seq n夹杂的噪音消息是通信消息
Figure GDA00025478006800001915
通信消息③、通信消息
Figure GDA00025478006800001917
通信消息
Figure GDA00025478006800001918
通信消息⑤、通信消息⑥、通信消息⑦、通信消息
Figure GDA00025478006800001916
然而消息序列seq 1和消息序列seq n均具有通信消息①、通信消息②、通信消息③、通信消息④、通信消息⑤、通信消息⑥、通信消息⑦和通信消息⑧,且seq 1和seq n中。通信消息①、通信消息②、通信消息③、通信消息④、通信消息⑤、通信消息⑥、通信消息⑦和通信消息⑧的排列顺序也是相同的。
也即是,对于同一种业务来说,该业务对应的通信消息以及该业务对应的通信消息的排列顺序,会在该业务的多次业务处理过程中重复出现,那么通过对该业务的多次业务处理过程的消息序列进行聚类,提取出完成该业务的多个消息序列的公共子序列,即可实现调用链路的发现。
可选地,分布式系统可以预先进行时钟同步,以保证根据分布式系统中采集的多个通信消息,执行上述消息序列的生成过程时,生成的消息序列具有高精确性。具体来说,对于分布式系统中提供通信消息的多个节点设备来说,该多个节点设备可以进行时钟同步,保证任一时刻多个节点设备的时间戳保持相同,从而保证任一通信消息在整个分布式系统中时间的相对准确性。上述生成消息序列的过程中,根据时间戳对通信消息进行排序时,可以保证排序结果的精确性,根据时间戳来选取通信消息,可以保证选取结果的精确性。
303、计算机设备根据该多个消息序列生成多个类;对于多个类中的每个类,该类具有一个公共子序列,该公共子序列为用于生成该类的所有消息序列的公共部分。
本实施例提出了序列聚类算法,可以通过根据多个消息序列,生成多个类。类具有一个公共子序列。该公共子序列为生成类的所有消息序列的公共部分,公共子序列具有生成类的所有消息序列均包括的通信消息,因此公共子序列可以反映生成该类的所有消息序列的共性,也就可以反映生成该类的所有消息序列对应的业务处理过程的调用链路,从而发现业务的调用链路。
具体来说,在同一时刻,多个服务可能处理多个不同的业务,另外,多个终端可以在同一时刻调用相同的接口。因此,在任一时间段中,可以由不同业务的通信消息、同一业务的不同次业务处理的通信消息相互交织在一起。例如,请参见图10和图11,图10的左图和图11的上图中,分别展示了两个交织的消息序列。如图10的左图,不同业务的通信消息相互交织在一起,例如登录业务的通信消息、注册业务的通信消息、备份业务的通信消息都交织在一起。而更复杂的情况是,如图11的上图,多次业务处理的通信消息相互交织在一起,登录业务被执行了两次,注册业务被执行了一次,备份业务被执行了二次。当不同业务的通信消息以及多次业务处理的通信消息相互交织的时候,大量通信消息纷乱无章,很难看出明显的模式,因此无法直接分析出调用链路的规律。而期望的输出结果如图10的右图和图11的下图,图10的右图和图11的下图中,登录业务的通信消息以空白方框表示,注册业务的通信消息以左斜线方框表示,备份业务的通信消息以右斜线方框表示,通过采用三种样式的方框,分别标记了三种业务,从而可以区分属于不同业务的通信消息。然而,由于不知道业务的数量,应该用几种样式的方框去表示,正确还原真实情况会变得十分困难和具有挑战性。
而本实施例中,能够通过解决以下几个技术问题,来实现根据多个消息序列生成多个类的功能,从而准确地还原应用中每个业务的调用链路。第一,定义不同类之间的距离的方式。距离用于度量不同类之间的相似度,可以通过距离函数表示,如果两个类的距离越小,表明两个类越相似。另外,也可以定义不同类之间的相似度,该相似度可以通过相似度函数表示,如果两个类的相似度越高,表明两个类越相似。其中,距离和相似度这两种参数为负相关的关系,例如距离和相似度可以成反比;可选地,可以使用类具有的公共子序列,通过不同类的公共子序列,确定不同类的相似度。第二,表示新的类的方式;可以每当生成一个类时,可以使用类中多个消息序列的公共子序列,作为类的标识。第三,获取多个消息序列聚成的一个或多个类的方式。可以采用层次聚类算法(英文名称为:HierarchicalClustering算法),对多个消息序列聚类。
可选地,根据该多个消息序列生成多个类的过程可以包括以下步骤一至步骤二:
步骤一、可以基于多个消息序列之间多种消息序列的组合分别具有的公共子序列,确定多种消息序列的组合中的每个组合内的相似度。
消息序列的组合可以是多个消息序列中的任两个消息序列或者任两个以上的消息序列。例如,假设多个消息序列是消息序列1、消息序列2、消息序列3、消息序列4和消息序列5,消息序列的组合可以是消息序列2和消息序列3,消息序列的组合也可以是消息序列1、消息序列3和消息序列4。
可选地,确定多种消息序列的组合中的每个组合内的相似度的过程可以包括以下步骤(1.1)至步骤(1.3):
步骤(1.1)从多个消息序列中确定多种消息序列的组合。
可选地,可以从多个消息序列中选取任两个或者任两个以上的消息序列,将该任两个或者任两个以上的消息序列作为一种消息序列的组合。
可选地,可以基于多个消息序列,生成相似度矩阵,将相似度矩阵中一行对应的消息序列和一列对应的消息序列,作为一种消息序列的组合。
相似度矩阵包括任两个消息序列之间的相似度。可选地,相似度矩阵中每一行可以对应一个消息序列,行的总数量可以等于消息序列的总数量,每一列也可以对应一个消息序列,列的总数量可以等于消息序列的总数量,相似度矩阵中,位于任一行任一列的元素,可以为行对应的消息序列和列对应的消息序列之间的相似度。
示例性地,假设多个消息序列为消息序列seq1、消息序列seq2至消息序列seq8。消息序列seq1包括通信消息①、通信消息②、通信消息④、通信消息⑤、通信消息⑦和通信消息③;消息序列seq2包括通信消息①、通信消息②、通信消息⑧、通信消息④、通信消息⑥、通信消息⑤和通信消息③;消息序列seq8包括通信消息①、通信消息⑦和通信消息③。其中,为了简化说明,消息序列seq3至消息序列seq7此处省略。则对于这8个消息序列来说,相似度矩阵可以如下表4所示。
表4
消息序列 Seq1 Seq2 Seq8
Seq1 0
Seq2 5 0
Seq8 3 2 0
步骤(1.2)确定多种消息序列的组合中每种组合的公共子序列的长度。
可选地,消息序列的组合的公共子序列的长度,可以是消息序列的组合的最长公共子序列(longest common subsequence,简称:LCS)的长度。
示例性地,假设消息序列的组合是消息序列seq1和消息序列seq2。消息序列seq1包括通信消息①、通信消息②、通信消息④、通信消息⑤、通信消息⑦和通信消息③,消息序列seq2包括通信消息①、通信消息②、通信消息⑧、通信消息④、通信消息⑥、通信消息⑤和通信消息③。消息序列seq1和消息序列seq2的最长公共子序列是通信消息①、通信消息②、通信消息④、通信消息⑤和通信消息③。由于这两个消息序列的最长公共子序列包括5个消息标识,则该消息序列的组合的公共子序列的长度为5。
步骤(1.3)基于该多种消息序列的组合中每种组合的公共子序列的长度,确定该组合的相似度。
该组合的相似度与该组合具有的公共子序列的长度正相关。如果消息序列的组合的公共子序列越长,则消息序列的组合的相似度越高。可选地,可以将消息序列的组合的公共子序列的长度,作为消息序列的组合的相似度。其中,可以获取消息序列的组合的公共子序列中消息标识的数量,将该消息标识的数量作为公共子序列的长度。
示例性地,以相似度矩阵如表4为例,假设消息序列的组合是表4中的消息序列seq1和消息序列seq2,消息序列seq1和消息序列seq2的最长公共子序列的长度是5,则消息序列的组合的相似度是5。
可选地,将消息序列的组合的公共子序列的长度,作为消息序列的组合的相似度的过程可以是为可选步骤。在另一种可能的实现方式中,也可以获取与长度存在相关关系的任意数值作为消息序列的组合的相似度,本申请实施例对基于消息序列的组合的公共子序列的长度,来获取消息序列的组合的相似度的过程不做限定。
可选地,基于消息序列的组合的公共子序列,获取消息序列的组合的相似度仅是一种可选方式,而非必选方式。在一个可能的实施例中,对于消息序列的组合来说,也可以采用公共子序列以外的其他方式,确定消息序列的组合的相似度,例如可以定义某种距离函数或相似度函数,采用距离函数或相似度函数对消息序列的组合进行计算,得到消息序列的组合的相似度,当然还可以采用其他方式确定消息序列的组合的相似度,本实施例对确定消息序列的组合的相似度的方式不做限定。
步骤二、基于多种消息序列的组合的相似度,对多个消息序列聚类,得到多个类可选地,可以基于多种消息序列的组合的相似度,从多种消息序列的组合中选取相似度最高的消息序列的组合,根据相似度最高的消息序列的组合,生成一个类。
可选地,可以根据相似度矩阵中的每个相似度,从相似度矩阵中选取最高的相似度,确定该最高的相似度所处的行和列,将行对应的消息序列和列对应的消息序列作为选取的消息序列的组合,根据该消息序列的组合生成一个类。
示例性地,以相似度矩阵如表4为例,相似度矩阵中消息序列seq1和消息序列seq2的相似度最高。则可以为消息序列seq1和消息序列seq2生成一个新的类seq9,类seq9包括消息序列seq1和消息序列seq2。如此,可以使用消息序列seq1和消息序列seq2的LCS,即通信消息①、通信消息②、通信消息④、通信消息⑤和通信消息③,作为类seq9的标识,将该类seq9命名为①②④⑤③,类seq9具有的公共子序列是通信消息①、通信消息②、通信消息④、通信消息⑤和通信消息③。
可选地,可以对多个消息序列层次聚类,生成类树。类树中的每个节点为一个类。其中,类树的任一叶子类是类树中最底层的节点,叶子类可以是一个消息序列,类树中叶子类的数量可以等于消息序列的数量。类树的任一非叶子类是类树中最顶层至倒数第二层至的节点,非叶子类是多个消息序列聚成的类,每个非叶子类具有一个公共子序列。例如,任一非叶子类可以是该非叶子类连接的所有叶子类对应的消息序列的公共子序列。
可选地,类树可以是聚类树状图(英文名称为:dendrogram)。示例性地,聚类树状图可以如图12所示。当然,聚类树状图仅是类树的一种示例性数据结构,可选地,也可以通过其他数据结构来表示类树。
可选地,可以通过以下步骤a至步骤d,对多个消息序列进行层次聚类:
步骤a、将每个消息序列作为一个类。
在开始聚类时,将每个消息序列本身作为一个类。例如,假设有8个消息序列,分别为消息序列seq1、消息序列seq2至消息序列seq8,可以将这8个消息序列均作为一个类,从而得到初始的8个类。
可选地,可以在类树中生成多个叶子类,用多个叶子类来指代多个消息序列。例如,请参见图12,可以在类树中生成8个叶子类,这8个叶子类分别指代消息序列seq1、消息序列seq2至消息序列seq8。
步骤b、从多个消息序列中,选取相似度最高的两个消息序列。
步骤c、为相似度最高的两个消息序列,生成一个类,使用相似度最高的两个消息序列之间的公共子序列,作为类的标识。
示例性地,假设相似度最高的两个消息序列为消息序列seq1和seq2,可以为消息序列seq1和消息序列seq2生成一个类seq9,使用消息序列seq1和seq2的消息序列LCS[①②④⑤③],作为类seq9的标识,即类seq9=[①②④⑤③]。
可选地,可以生成类树中的一个非叶子类,使用该非叶子类来指代生成的类。其中,可以根据相似度最高的两个消息序列对应的两个叶子类,为这两个叶子类生成一个父类,使用该父类来指代生成的类。例如,假设相似度最高的两个消息序列为消息序列seq1和消息序列seq2,请参见图12,可以在类树中生成消息序列seq1和消息序列seq2的父类,该父类为消息序列seq9,消息序列seq9是[①②④⑤③]。
步骤d、从相似度最高的两个消息序列以外的消息序列以及类中,继续执行选取消息序列以及生成类的步骤,直至所有消息序列聚成一个根类。
当为相似度最高的两个消息序列生成一个类后,之后的聚类过程中,可以将这两个消息序列从选取范围中排除,而是用类来指代这两个消息序列,基于类和剩余的一个或多个消息序列,继续进行聚类。
可选地,结合相似度矩阵的设计,可以从相似度矩阵中,删除相似度最高的两个消息序列对应的行和列,并向相似度矩阵中,为生成的类添加一行和一列,从而更新相似度矩阵,进而根据更新后的相似度矩阵,继续进行聚类。
示例性地,请参见图13,图13的上图为多个消息序列对应的相似度矩阵,在第一次层次聚类处理后,确定相似度最高的两个消息序列为消息序列seq1和消息序列seq2,为消息序列seq1和消息序列seq2生成类seq9后,可以从图13的上图中的相似度矩阵中移除消息序列seq1和消息序列seq2,并向图13的上图中的相似度矩阵加入消息序列seq9,得到图13的下图,通过重复这个步骤,直到所有的消息序列都归为根类,可以完成层次聚类的过程。
304、计算机设备从多个类具有的公共子序列中,确定多个服务提供的一种或多种业务的调用链路,其中,每个类对应一种业务。
可选地,可以通过以下步骤一至步骤三,确定多个服务提供的一种或多种业务的调用链路。
步骤一、从类树中选择一个或多个剪切点。
可选地、可以根据类树中每个类的支持度和序列长度中的至少一项,从类树中选择一个或多个剪切点。
类的支持度用于指示用于指示类对应的消息序列的数量。例如,对于类树中的任一个类,若用于生成该类的消息序列有n个,则该类的支持度为n。其中,每个消息序列的支持度可以为1,而每个类的支持度可以大于1。例如,对于类树中第二级的类来说,用于生成第二级的类有2个,则第二级的类的支持度可以为2。
对于类树中任一个类,用于生成该类的消息序列越多,表明该类具有的公共子序列越能准确反映生成该类的多个消息序列的公共特性,则该类的支持度越高。
示例性地,请参见图12,图12中示出了8个消息序列进行层次聚类后,得到的类树。图12中的8个消息序列在类树中位于第一级,这8个消息序列的支持度均为1。而对于图12中的类seq9来说,类seq9在类树中位于第二级,类seq9对应的消息序列是消息序列seq1和消息序列seq2。类seq9由消息序列seq1和消息序列seq2生成,类seq9代表了消息序列seq1和消息序列seq2的公共特性,因此类seq9的支持度是2。同理地,对于图12中的类seq10来说,类seq10在类树中位于第三级,类seq10对应的消息序列是消息序列seq1、消息序列seq2和消息序列seq3。类seq10是由消息序列seq1、消息序列seq2和消息序列seq3生成,类seq10代表了消息序列seq1、消息序列seq2和消息序列seq3三个消息序列的公共特性,因此类seq10的支持度是3。而对于图12的类seqN来说,类seqN在类树中位于最高级,类seqN是根类。类seqN由消息序列seq1、消息序列seq2至消息序列seq8生成,因此类seqN的支持度为8。
类的序列长度用于指示类对应的公共子序列的长度。其中,如果公共子序列为LCS,则类的序列长度即为类对应的LCS的长度。
示例性地,请参见图12,图12中示出了8个消息序列进行层次聚类后,得到的类树。例如,类Seq9的序列长度为消息序列seq1和消息序列seq2的LCS的长度,则类Seq9的序列长度是5。类SeqN的序列长度可能为0,代表消息序列seq1、消息序列seq2至消息序列seq8这8个消息序列没有公共子序列。
可选地,可以按照以下三种规则中的任一项或多项的组合,从类树中选择类,将选择的类作为剪切点。为了区分描述,下面将按照规则一选择的类称为第一类,将按照规则二选择的类称为第二类,将按照规则三丢弃选择的类称为第三类。
规则一、从类树的多个类中,选择支持度最大,且序列长度大于序列长度阈值的第一类,作为剪切点。
可以获取类树中每个类的支持度和序列长度,根据每个类的支持度,选取支持度最大的类,判断该类的序列长度是否大于序列长度阈值,如果该类的序列长度大于序列长度阈值,则将该类(第一类)作为剪切点。其中,序列长度阈值可以根据经验或者需求设置,例如可以为3。
规则二、从类树的多个类中,选择序列长度大于父类的序列长度,且支持度与父类的支持度的差值小于差值阈值的第二类,作为剪切点。
对于类树的任一对父类和子类,可以根据父类的序列长度和子类的序列长度,父类的支持度和子类的支持度,判断是否要选择子类作为剪切点。具体来说,如果子类相比父类来说,序列长度发生了增加,并且子类的支持度相对于父类的支持度来说,子类的支持度减少量小于差值阈值,则选择该子类(第二类)作为剪切点。其中,差值阈值可以根据经验或者需求设置。例如,差值阈值可以为10%。
规则三、从类树的多个类中,丢弃选择支持度小于支持度阈值的第三类。
可以根据类树中每个类的支持度,判断每个类的支持度是否小于支持度阈值,如果该类的支持度小于支持度阈值,则丢弃该类(第三类),不将该类作为剪切点。其中,支持度阈值可以根据经验或者需求设置。例如,支持度阈值可以为10。
可选地,层次聚类的方式可以是根据多个消息序列生成类的一种示例,在一种可能的实现中,也可以采用层次聚类以外的方式,来根据多个消息序列生成类。例如,可以采用任一种聚类算法,来根据多个消息序列生成类,本实施例对根据多个消息序列生成类的方式不做限定。
步骤二、从类树中确定与一个或多个剪切点(英文名称:Pruning point)对应的一个或多个目标类。
剪切点为类树中剪切的位置。剪切点的位置可以根据某一剪切策略或者经验确定。剪切点可以位于类树中的任一个类,也可以位于类树中的任一条边。剪切点下的分支,包括该剪切点连接的所有消息序列。
每个剪切点可以确定一个目标类。具体来说,每个剪切点下的分支的根类可以是一个目标类,每个剪切点下的分支的所有消息序列可以是属于同一个业务的消息序列。可选地,可以从类树中确定一个或多个剪切点,沿着这一个或多个剪切点,对类树剪切,得到类树的一个或多个分支,将每个分支的根类作为一个目标类,将每个分支的所有叶子类作为生成该目标类的所有消息序列。
举例来说,请参见图14,在图14中,沿着剪切点1和剪切点2剪切,可以确定剪切点1对应的目标类以及剪切点2对应的目标类,共计确定出两个目标类。剪切点1对应图14中左侧的分支,剪切点1对应的根类(图14左侧的实心黑点)是一个目标类。剪切点1的目标类具有的公共子序列为通信消息①、通信消息②和通信消息③,剪切点1的目标类包括消息序列seq1和消息序列seq2;剪切点2对应图14中右侧的分支,剪切点2对应的根类(图14右侧的实心黑点)是一个目标类,剪切点2的目标类具有的公共子序列为通信消息①、通信消息②和通信消息⑨。剪切点2的目标类包括消息序列seq3和消息序列seq4。
举例来说,请参见图15,在图15中,沿着剪切点3、剪切点4和剪切点5剪切,可以确定剪切点3对应的目标类、剪切点4对应的目标类以及剪切点5对应的目标类,共计确定出三个目标类。剪切点3对应图15中左侧的分支,剪切点3对应的根类(图15左侧的实心黑点)是一个目标类。剪切点3的目标类具有的公共子序列为通信消息①、通信消息②和通信消息③,剪切点3的目标类包括消息序列seq1和消息序列seq2;剪切点4对应图15中间的分支。剪切点4对应的根类(图15第二个实心黑点)是一个目标类,剪切点4的目标类具有的公共子序列包括通信消息①、通信消息⑦、通信消息②和通信消息⑨,剪切点4的目标类包括消息序列seq3。剪切点5对应图15中右侧的分支,剪切点5对应的根类(图15右侧的实心黑点)是一个目标类,剪切点5的目标类具有的公共子序列为通信消息①、通信消息⑦、通信消息⑧和通信消息⑨,剪切点5的目标类包括消息序列seq4。
步骤三、根据一个或多个目标类中的每个目标类具有的公共子序列,确定一种业务的调用链路。
可选地,可以根据目标类的总数量确定业务的总数量;例如将目标类的总数量作为多个服务提供的业务的总数量,举例来说,假设得到两个目标类,则可以确定多个服务共计提供两种业务,存在两条调用链路。假设得到三个目标类,则可以确定多个服务共计提供三种业务,存在三条调用链路。
可选地,可以根据每个目标类具有的公共子序列,确定每种业务对应的多个服务以及多个服务之间的调用关系;具体来说,对于任一个目标类,目标类具有的公共子序列反映了多个消息序列的共性,也就反映了业务的多次业务处理过程中通信消息符合的规律。因此,可以确定该目标类具有的公共子序列中所有通信消息对应的服务,作为一种业务对应的所有服务。
例如,对于任一个目标类对应的公共子序列,可以确定该公共子序列中的每个通信消息。对于公共子序列中的每个通信消息,可以确定该通信消息的发送服务和接收服务,将该发送服务和接收服务作为调用链路上存在调用关系的两个服务;依次类推,通过确定每个通信消息的发送服务和接收服务,可以确定调用链路上的所有服务。
举例来说,参见图4,对于图4中的业务2来说,假设聚类得到的某个目标类具有的公共子序列为④⑥③,假设确定通信消息④的发送服务为服务A,接收服务为服务E,通信消息⑥的发送服务为服务E,接收服务为服务C,通信消息③的发送服务为服务C,接收服务为服务D,可以确定一条调用链路上的各个服务包括:服务A、服务E、服务D和服务C。
可选地,可以确定一个目标类具有的公共子序列中各个通信消息的排列顺序,作为一种业务的调用链路的调用关系,即一条调用链路上各个服务之间的调用关系。
具体来说,对于任一个目标类具有的公共子序列中的任一个通信消息,可以确定该通信消息的发送服务和接收服务,确定该发送服务调用了该接收服务;例如,假设公共子序列中通信消息1和通信消息2前后依次排列,则可以确定:生成通信消息1的服务调用了生成通信消息2的服务。依次类推,可以根据公共子序列中各个通信消息的排列顺序,对每个通信消息对应的发送服务和接收服务,按照公共子序列中通信消息的顺序依次排列,得到一条调用链路上各个服务之间的调用关系。
举例来说,参见图4,对于图4中的业务2来说,假设聚类得到的某个目标类对应的公共子序列为通信消息④、通信消息⑥和通信消息③。假设确定通信消息④的发送服务为服务A,接收服务为服务E;通信消息⑥的发送服务为服务E,接收服务为服务C;通信消息③的发送服务为服务C,接收服务为服务D;从而确定业务2的调用链路上的各个服务之间的调用关系为:服务A调用了服务E,服务E调用了服务D,服务D调用了服务C。
可选地,如果以层次聚类的方式进行聚类,由于层次聚类时,剪切点的数量等于目标类的数量,可以获取剪切点的数量,将剪切点的数量作为业务的总数量。例如,如果类树中共计有2个剪切点,则可以确定多个服务共计提供两种业务;如果类树中共计有3个剪切点,则可以确定多个服务共计提供三种业务。另外,可以,根据剪切点对应的目标类具有的公共子序列,确定每一种业务的调用关系。
例如,请参见图14和图15,如果按照图14的剪切方式,选择了两个剪切点,可以确定为多个服务共计提供两种业务;第一种业务的调用关系是①②③,第二种业务的关系是①②⑨。如果按照图15的剪切方式,选择了三个剪切点,可以确定多个服务共计提供三种业务;第一种业务的调用关系是①②③,第二种业务的调用关系是①⑦②⑨;第三种业务的调用关系是①②⑧⑨。
示例性地,请参见图16,以下结合图16,阐述一次剪切的详细流程。图16中的类树中根类的支持度(support)是220,可见类树一共包含220个消息序列,类树中每个类可以采用如下方式标记:cluster_id–(s=*)[l],类树中每个类都被分配一个唯一的标识(cluster_id),圆括号中间的数字为该类的支持度,方括号里的数字为该类的序列长度。
首先,根据规则1,因为类736的长度为零,选择类733和类534。根据规则2,相比类534,应该选择类533,因为类533的序列长度增加了1,同时类533相对于类534来说,支持度从120减少到111,仅减少了7.5%,因此不选择类534为剪切点,而选择类533为剪切点。为了保证完整性,选择了类533,就要选择类312,这样保证剪切后,得到的类能包含所有的消息序列。然而,根据规则3,由于类312的支持度很小(s=9),可以确定类312是凑巧的有序噪音,因此丢弃类312。至此,剪切过程结束,最终选择的剪切点对应的目标类是类533和类733。
综上所述,在一个示例性应用场景中,请参见图4,假设一个应用由A、B、C、D、E五个服务组成;通过基于这五个服务的通信消息,生成多个消息序列。假设对多个消息序列层次聚类,得到了3个目标类,目标类1具有的公共子序列为①②③,目标类2具有的公共子序列为④⑥③,目标类3具有的公共子序列为④⑤②③,则该应用共计提供三种不同的业务:业务1的调用链路为:前端服务A调用服务B,服务B调用服务C,服务C调用服务D实现相应功能;业务2的调用链路为:前端服务A调用服务E,服务E调用服务C,最后服务C调用服务D;业务3的调用链路为:前端服务A调用服务E,服务E调用服务B,服务B调用服务C,最后服务C调用服务D。
请参见图17,可选地,本申请实施例提供的技术框架可以包括三层。第一层,服务部署信息;第二层,通过旁路监听获取服务间的通信消息,建立服务间拓扑总图;第三层,使用聚类算法,计算出不同业务的服务之间的调用链路。
以上阐述了本申请实施例提供的调用链路发现方法。本申请实施例的有益效果包括而不限于以下几个方面。
一方面,避免对业务的性能和稳定性造成的影响,从而避免安全隐患。
可选地,可以无需对运行的业务代码进行侵入与修改,也就避免了嵌入至业务代码的探针代码异常对应用本身的性能和稳定性产生的影响。尤其是,避免了探针代码出现Bug的场景下,对业务的性能会带来的负面影响,提高业务性能的稳定性、鲁棒性和可靠性。
另一方面,降低了开发和维护的成本。
本申请提供的调用链路的发现方法实用性强,使用范围广泛,可以避免受到计算机编程语言的类型和版本的限制。对于采用各种类型的计算机编程语言的业务来说,均采用本申请提供的方法,发现该业务的调用链路,而无需为各种计算机编程语言以及计算机编程语言的各种版本分别开发探针代码。例如,假设提供某业务的多个服务分别采用Java(一种面向对象的计算机编程语言)、Ios(一种移动操作系统)、超文本预处理器(hypertextpreprocessor,简称:PHP)这三种不同类型的计算机编程语言实现,无需开发三种计算机编程语言的探针代码。从而避免随着计算机编程语言的频繁升级,要频繁的重新开发探针代码的工作,极大地节约了开发以及维护成本。
另一方面,避免用户对业务代码进行修改、在业务代码修改后触发激活操作,启动已经修改后的业务代码等各种操作,而可以由计算机设备自动发现调用链路,提高了发现调用链路的效率。
另一方面,可以节约节点设备占用的处理资源。
节点设备在运行业务代码时无需运行探针代码并且缓存已经采集的调用链路的通信消息,节约了需要占用的缓存空间,并且无需分析和上报调用链路的通信消息,节约了节点设备的运行资源,避免了对租户资源消耗,提高了服务的性能。
可选地,当确定一种或多种业务的调用链路后,可以通过调用链路,提供应用性能管理&监控(application performance management&monitoring,简称:APM)服务,从而极大地提高用户体验,帮助应用的运维,例如可以通过调用链路,达到实时监控并管理企业应用性能和故障的效果,帮助企业快速解决分布式架构下问题定位和性能瓶颈分析难题,改善用户体验。当然,使用调用链路来提供APM服务仅是调用链路的应用场景的一种示例,本实施例对调用链路的应用场景不做限定。
本实施例提供的方法,提供了一种无需依赖探针程序侵入业务处理过程,也能实现调用链路的发现的方案,通过基于多个服务之间的通信消息,生成多个消息序列,根据多个消息序列生成多个类,来确定多个服务提供的业务的调用链路,能够还原应用中各个服务之间的拓扑结构,无需在业务代码中埋点,则避免了探针程序对业务处理的性能和稳定性带来的影响,也避免了探针程序带来的安全隐患,同时摆脱了探针埋点的技术受限于不同的技术以及同一技术的不同版本的限制,极大地降低了开发成本和维护成本。
图18是本申请实施例提供的一种调用链路的发现装置的结构示意图。参见图18,该装置包括:
获取模块1801,用于执行上述步骤301;
序列生成模块1802,用于执行上述步骤302;
类生成模块1803,用于执行上述步骤303;
确定模块1804,用于执行上述步骤304。
可选地,该类生成模块1803,用于对该多个消息序列层次聚类,生成类树,该类树中的每个节点为一个类。
可选地,该确定模块1804,包括:
选择子模块,用于执行上述步骤304中的步骤一;
确定子模块,用于执行上述步骤304中的步骤二;
该确定子模块,还用于执行上述步骤304中的步骤三。
可选地,该选择子模块,用于根据该类树中每个类的支持度和序列长度中的至少一项,从该类树中选择该一个或多个剪切点。
可选地,该选择子模块,用于执行上述步骤304中的按照三种规则选择剪切点的过程。
可选地,该类生成模块1803,包括:
确定子模块,用于执行上述步骤303中的步骤一;
聚类子模块,用于执行上述步骤303中的步骤二。
可选地,该序列生成模块1802,包括:
确定子模块,用于执行上述步骤303中的步骤一;
生成子模块,用于执行上述步骤303中的步骤二。
可选地,该生成子模块,用于执行上述步骤303中的步骤一中的步骤(1.1)至步骤(1.3)。
需要说明的是:上述实施例提供的调用链路的发现方法装置在发现调用链路时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的调用链路的发现装置与调用链路的发现方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在一个示例性实施例中,本申请还提供了一种包含指令的计算机程序产品,计算机设备执行该计算机程序产品中的指令以实现上述实施例中的调用链路的发现方法。
在一个示例性实施例中,本申请还提供了一种芯片,该芯片包括处理器和/或程序指令,当该芯片运行时,实现上述实施例中的调用链路的发现方法。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital video disc,简称:DVD)、或者半导体介质(例如固态硬盘)等。
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中的字符“/”,一般表示前后关联对象是一种“或”的关系。
本申请中术语“多个”的含义是指两个或两个以上,例如,多个数据包是指两个或两个以上的数据包。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,本领域技术人员可以理解,“第一”“第二”等字样不对数量和执行顺序进行限定。
以上所述仅为本申请的可选实施例,并不用以限制本申请,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

Claims (20)

1.一种调用链路的发现方法,其特征在于,所述方法包括:
获取多个服务之间的通信消息;
基于多个服务之间的通信消息生成多个消息序列,所述多个消息序列中的每个消息序列包括用于完成一个业务的所有通信消息;
根据所述多个消息序列生成多个类;对于所述多个类中的每个类,所述类具有一个公共子序列,所述公共子序列为用于生成所述类的所有消息序列的公共部分,所述公共子序列用于反映生成所述类的所有消息序列对应的业务处理过程的调用链路;
从所述多个类具有的公共子序列中,确定所述多个服务提供的一种或多种业务的调用链路。
2.根据权利要求1所述的方法,其特征在于,所述根据所述多个消息序列生成多个类,包括:
对所述多个消息序列层次聚类,生成类树,所述类树中的每个节点为一个类。
3.根据权利要求2所述的方法,其特征在于,所述从所述多个类具有的公共子序列中,确定所述多个服务提供的一种或多种业务的调用链路,包括:
从所述类树中选择一个或多个剪切点;
从所述类树中确定与所述一个或多个剪切点对应的一个或多个目标类;
根据所述一个或多个目标类中的每个目标类具有的公共子序列,确定一种业务的调用链路。
4.根据权利要求3所述的方法,其特征在于,所述从所述类树中选择一个或多个剪切点,包括:
根据所述类树中每个类的支持度和序列长度中的至少一项,从所述类树中选择所述一个或多个剪切点,类的支持度用于指示所述类对应的消息序列的数量,类的序列长度用于指示所述类对应的公共子序列的长度。
5.根据权利要求4所述的方法,其特征在于,所述根据所述类树中每个类的支持度和序列长度中的至少一项,从所述类树中选择所述一个或多个剪切点,包括:
从所述类树的多个类中,选择支持度最大,且序列长度大于序列长度阈值的第一类,作为剪切点;或者,
从所述类树的多个类中,选择序列长度大于父类的序列长度、且支持度与所述父类的支持度的差值小于差值阈值的第二类,作为剪切点;或者,
从所述类树的多个类中,丢弃选择支持度小于支持度阈值的第三类。
6.根据权利要求1所述的方法,其特征在于,所述根据所述多个消息序列生成多个类,包括:
基于所述多个消息序列之间多种消息序列的组合分别具有的公共子序列,确定所述多种消息序列的组合中的每个组合内的相似度;
基于所述多种消息序列的组合的相似度,对所述多个消息序列聚类,得到所述多个类。
7.根据权利要求6所述的方法,其特征在于,所述基于所述多个消息序列之间多种消息序列的组合分别具有的公共子序列,确定所述多种消息序列的组合中的每个组合内的相似度,包括:
从所述多个消息序列中确定多种消息序列的组合;
确定所述多种消息序列的组合中每种组合的公共子序列的长度;
基于所述多种消息序列的组合中每种组合的公共子序列的长度,确定所述组合的相似度,所述组合的相似度与所述组合具有的公共子序列的长度正相关。
8.根据权利要求1所述的方法,其特征在于,所述基于多个服务之间的通信消息生成多个消息序列,包括:
根据每个通信消息的发生时间,从所述多个服务的通信消息中,确定每个业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息;
根据确定的所述业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息,生成所述业务的一个消息序列。
9.根据权利要求8所述的方法,其特征在于,所述根据确定的所述业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息,生成所述业务的一个消息序列,包括:
将所述业务的事务请求消息,排在所述业务的一个消息序列的第一位;
将所述业务的事务返回消息,排在所述业务的一个消息序列的最后一位;
根据所述事务请求消息与所述事务返回消息之间的通信消息的时间戳,对所述事务请求消息与所述事务返回消息之间的通信消息进行排序;
将依次排列的所述事务请求消息与所述事务返回消息之间的通信消息,排在所述业务的一个消息序列的所述第一位和所述最后一位之间。
10.一种调用链路的发现装置,其特征在于,所述装置包括:
获取模块,用于获取多个服务之间的通信消息;
序列生成模块,用于基于多个服务之间的通信消息生成多个消息序列,所述多个消息序列中的每个消息序列包括用于完成一个业务的所有通信消息;
类生成模块,用于根据所述多个消息序列生成多个类;对于所述多个类中的每个类,所述类具有一个公共子序列,所述公共子序列为用于生成所述类的所有消息序列的公共部分,所述公共子序列用于反映生成所述类的所有消息序列对应的业务处理过程的调用链路;
确定模块,用于从所述多个类具有的公共子序列中,确定所述多个服务提供的一种或多种业务的调用链路。
11.根据权利要求10所述的装置,其特征在于,所述类生成模块,用于对所述多个消息序列层次聚类,生成类树,所述类树中的每个节点为一个类。
12.根据权利要求11所述的装置,其特征在于,所述确定模块,包括:
选择子模块,用于从所述类树中选择一个或多个剪切点;
确定子模块,用于从所述类树中确定与所述一个或多个剪切点对应的一个或多个目标类;
所述确定子模块,还用于根据所述一个或多个目标类中的每个目标类具有的公共子序列,确定一种业务的调用链路。
13.根据权利要求12所述的装置,其特征在于,所述选择子模块,用于根据所述类树中每个类的支持度和序列长度中的至少一项,从所述类树中选择所述一个或多个剪切点,类的支持度用于指示所述类对应的消息序列的数量,类的序列长度用于指示所述类对应的公共子序列的长度。
14.根据权利要求13所述的装置,其特征在于,所述选择子模块,用于从所述类树的多个类中,选择支持度最大,且序列长度大于序列长度阈值的第一类,作为剪切点;或者,从所述类树的多个类中,选择序列长度大于父类的序列长度、且支持度与所述父类的支持度的差值小于差值阈值的第二类,作为剪切点;或者,从所述类树的多个类中,丢弃选择支持度小于支持度阈值的第三类。
15.根据权利要求10所述的装置,其特征在于,所述类生成模块,包括:
确定子模块,用于基于所述多个消息序列之间多种消息序列的组合分别具有的公共子序列,确定所述多种消息序列的组合中的每个组合内的相似度;
聚类子模块,用于基于所述多种消息序列的组合的相似度,对所述多个消息序列聚类,得到所述多个类。
16.根据权利要求15所述的装置,其特征在于,所述确定子模块,用于:从所述多个消息序列中确定多种消息序列的组合;确定所述多种消息序列的组合中每种组合的公共子序列的长度;基于所述多种消息序列的组合中每种组合的公共子序列的长度,确定所述组合的相似度,所述组合的相似度与所述组合具有的公共子序列的长度正相关。
17.根据权利要求10所述的装置,其特征在于,所述序列生成模块,包括:
确定子模块,用于根据每个通信消息的发生时间,从所述多个服务的通信消息中,确定每个业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息;
生成子模块,用于根据确定的所述业务的事务请求消息、事务返回消息以及在所述事务请求消息与所述事务返回消息之间的通信消息,生成所述业务的一个消息序列。
18.根据权利要求17所述的装置,其特征在于,所述生成子模块,用于将所述业务的事务请求消息,排在所述业务的一个消息序列的第一位;将所述业务的事务返回消息,排在所述业务的一个消息序列的最后一位;根据所述事务请求消息与所述事务返回消息之间的通信消息的时间戳,对所述事务请求消息与所述事务返回消息之间的通信消息进行排序;将依次排列的所述事务请求消息与所述事务返回消息之间的通信消息,排在所述业务的一个消息序列的所述第一位和所述最后一位之间。
19.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器;所述处理器执行所述存储器存储的指令,使得所述计算机设备执行权利要求1至9中任一项所述的调用链路的发现方法。
20.一种计算机可读存储介质,其特征在于,所述存储介质中存储指令,计算机设备执行所述指令以实现如权利要求1至权利要求9中任一项所述的调用链路的发现方法。
CN201880004162.9A 2018-08-29 2018-08-29 调用链路的发现方法、装置、设备及存储介质 Active CN109923847B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2018/103074 WO2020042029A1 (zh) 2018-08-29 2018-08-29 调用链路的发现方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN109923847A CN109923847A (zh) 2019-06-21
CN109923847B true CN109923847B (zh) 2021-01-15

Family

ID=66960743

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880004162.9A Active CN109923847B (zh) 2018-08-29 2018-08-29 调用链路的发现方法、装置、设备及存储介质

Country Status (2)

Country Link
CN (1) CN109923847B (zh)
WO (1) WO2020042029A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111176723B (zh) * 2019-12-31 2020-11-06 上海道客网络科技有限公司 基于服务网格和链路版本的服务多版本发布系统与方法
CN112363855B (zh) * 2020-11-13 2021-06-18 北京基调网络股份有限公司 调用链数据生成方法、拓扑生成方法及系统和计算机设备
CN113014435B (zh) * 2021-03-15 2022-10-11 杭州米络星科技(集团)有限公司 链路探测方法、装置、电子设备及存储介质
CN113297076B (zh) * 2021-05-21 2023-06-23 建信金融科技有限责任公司 基于调用链图的服务变更识别方法及装置
CN113392893A (zh) * 2021-06-08 2021-09-14 北京达佳互联信息技术有限公司 业务故障的定位方法、装置、存储介质及计算机程序产品
CN115473839B (zh) * 2021-06-11 2024-03-05 北京字跳网络技术有限公司 基于埋点的数据处理方法、装置、设备及存储介质
CN115757319A (zh) * 2021-06-21 2023-03-07 蚂蚁胜信(上海)信息技术有限公司 链路生成方法及装置
CN113792330B (zh) * 2021-08-13 2024-05-03 唯品会(广州)软件有限公司 一种敏感数据追踪方法和系统
CN113986955B (zh) * 2021-11-01 2024-03-19 华青融天(北京)软件股份有限公司 业务链的确定方法、装置、电子设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106506519A (zh) * 2016-11-21 2017-03-15 辽宁科技大学 WCF框架net.tcp协议跨平台通信的系统及方法
CN106603270A (zh) * 2016-11-10 2017-04-26 广州酷狗计算机科技有限公司 分布式系统中调用链路的追踪方法及装置
CN108462750A (zh) * 2018-03-22 2018-08-28 平安好房(上海)电子商务有限公司 分布式调用追踪方法、业务系统、监控系统及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6681254B1 (en) * 1998-09-10 2004-01-20 International Business Machines Corporation Method of controlling the flow of information between senders and receivers across links being used as channels
KR101406961B1 (ko) * 2008-04-22 2014-06-13 톰슨 라이센싱 멀티-홉 중계 통신 시스템에서의 멀티캐스트 트리 관리 방법 및 장치
CN101478801B (zh) * 2008-12-23 2011-03-16 华南理工大学 基于动态源树的无线自组织网络组播路由方法
CN102255867A (zh) * 2010-05-18 2011-11-23 华为技术有限公司 服务请求处理方法、装置及系统
US9350594B2 (en) * 2013-06-26 2016-05-24 Avaya Inc. Shared back-to-back user agent
US10115039B2 (en) * 2016-03-10 2018-10-30 Siemens Healthcare Gmbh Method and system for machine learning based classification of vascular branches
US10051455B2 (en) * 2016-03-18 2018-08-14 Plume Design, Inc. Systems and methods for changing topology and firmware in distributed wi-fi networks
CN106790718A (zh) * 2017-03-16 2017-05-31 北京搜狐新媒体信息技术有限公司 服务调用链路分析方法及系统
CN108183927A (zh) * 2017-11-22 2018-06-19 链家网(北京)科技有限公司 一种分布式系统中链路调用的监控方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106603270A (zh) * 2016-11-10 2017-04-26 广州酷狗计算机科技有限公司 分布式系统中调用链路的追踪方法及装置
CN106506519A (zh) * 2016-11-21 2017-03-15 辽宁科技大学 WCF框架net.tcp协议跨平台通信的系统及方法
CN108462750A (zh) * 2018-03-22 2018-08-28 平安好房(上海)电子商务有限公司 分布式调用追踪方法、业务系统、监控系统及存储介质

Also Published As

Publication number Publication date
CN109923847A (zh) 2019-06-21
WO2020042029A1 (zh) 2020-03-05

Similar Documents

Publication Publication Date Title
CN109923847B (zh) 调用链路的发现方法、装置、设备及存储介质
CN107239381B (zh) 崩溃信息的处理方法、装置及系统
CN112910945B (zh) 请求链路跟踪方法和业务请求处理方法
US7483972B2 (en) Network security monitoring system
CN103546343B (zh) 网络流量分析系统的网络流量展示方法和系统
CN108062243B (zh) 执行计划的生成方法、任务执行方法及装置
CN109359250B (zh) 统一资源定位符处理方法、装置、服务器及可读存储介质
CN111176941B (zh) 一种数据处理的方法、装置和存储介质
CN113676563B (zh) 内容分发网络服务的调度方法、装置、设备及存储介质
CN110708247A (zh) 消息路由方法、装置、计算机设备和存储介质
CN113825129B (zh) 一种5g网络环境下工业互联网资产测绘方法
CN114595201A (zh) 一种接口访问日志采集记录查询方法、设备及存储介质
CN109698814B (zh) 僵尸网络发现方法及僵尸网络发现装置
CN111177481B (zh) 用户标识映射方法及装置
CN115333966A (zh) 一种基于拓扑的Nginx日志分析方法、系统及设备
US20170064023A1 (en) Page Push Method, Device, Server and System
CN108876314B (zh) 一种职业生涯专业能力可追溯方法及平台
CN116974948B (zh) 业务系统测试方法、系统、设备和介质
CN114401319A (zh) 一种请求处理方法、装置、服务器及存储介质
CN111538616A (zh) 异常定位方法、装置、系统与计算机可读存储介质
CN114143171B (zh) 一种基于tr069协议的告警根源定位方法及系统
CN113596105B (zh) 内容的获取方法、边缘节点及计算机可读存储介质
CN114422576A (zh) 一种会话清理方法、装置、计算机设备和可读存储介质
CN112235367A (zh) 一种实体行为关系消息订阅方法、系统、终端及存储介质
CN112822075A (zh) 一种业务链路追踪方法及相关装置

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
TR01 Transfer of patent right

Effective date of registration: 20220214

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.