分布式系统调用链的确定方法和装置与流程

文档序号:25868400发布日期:2021-07-13 16:29阅读:127来源:国知局
分布式系统调用链的确定方法和装置与流程

本发明涉及计算机技术领域,尤其涉及一种分布式系统调用链的确定方法和装置。



背景技术:

在分布式系统的面向服务架构soa(service-orientedarchitecture)或者微服务架构中,需要对目标服务调用过程中的调用链信息进行跟踪以定位问题点,现有技术中缺少子服务(即组成目标服务的服务或应用程序)粒度以及方法(即服务或应用程序内提供的方法或函数)粒度的调用链跟踪方案。



技术实现要素:

有鉴于此,本发明实施例提供一种分布式系统调用链的确定方法和装置,能够确定子服务粒度以及方法粒度的调用链信息。

为实现上述目的,根据本发明的一个方面,提供了一种分布式系统调用链的确定方法。

本发明实施例的分布式系统调用链的确定方法包括:在接收用于调用目标服务的请求之后,生成对应于该次目标服务调用的跟踪标识;其中,目标服务由多个子服务节点共同提供,每一子服务节点包括至少一个方法节点;在调用任一子服务节点时,生成对应于该次调用的日志数据;其中:在该子服务节点不是目标服务的入口节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识以及该子服务节点的父节点标识;在调用任一子服务节点中的任一方法节点时,生成对应于该次调用的日志数据;其中,在该方法节点不是该子服务节点的入口方法节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识、该方法节点的标识以及该方法节点的父节点标识;以及,依据所述跟踪标识确定该次目标服务调用过程中生成的日志数据,利用确定的日志数据中的子服务节点标识和方法节点标识确定该次目标服务调用的调用链信息。

可选地,在调用任一子服务节点时,如果该子服务节点是目标服务的入口节点,则生成的日志数据中含有所述跟踪标识和该子服务节点的标识;在调用任一子服务节点中的任一方法节点时,如果该方法节点是该子服务节点的入口方法节点,则生成的日志数据中含有所述跟踪标识、该子服务节点的标识以及该方法节点的标识。

可选地,所述子服务节点的父节点为子服务节点,所述方法节点的父节点为方法节点;该次目标服务调用的调用链信息为树形结构,包括:由所述多个子服务节点形成的调用链信息以及由每一子服务节点中的方法节点形成的调用链信息;任一次调用生成的日志数据中进一步含有该次调用的时长信息;所述方法进一步包括:将调用任一次子服务节点生成的日志数据中的调用时长信息增加到该次目标服务调用的调用链的该子服务节点中,将调用任一次方法节点生成的日志数据中的调用时长信息增加到该次目标服务调用的调用链的该方法节点中。

可选地,所述方法进一步包括:在所述依据所述跟踪标识确定该次目标服务调用过程中生成的日志数据之前:获取当前采集周期内生成的日志数据,将生成的日志数据通过消息队列存储在数据库。

可选地,所述方法进一步包括:从所述数据库中获取当前统计周期内多次目标服务调用的调用链信息,利用该调用链信息确定当前统计周期内每一子服务节点的平均调用时长以及每一方法节点的平均调用时长;在任一子服务节点的平均调用时长大于预设的第一时长阈值或者任一方法节点的平均调用时长大于预设的第二时长阈值时进行告警。

可选地,所述方法进一步包括:从所述数据库中获取当前统计周期内多个服务的每一次调用的调用链信息,根据该调用链信息统计所述每一次调用涉及的每一子服务节点的调用次数以及每一方法节点的调用次数。

可选地,所述消息队列包括kafka,所述数据库包括弹性搜索引擎es;所述子服务节点包括以下一种或多种:应用程序节点、文件系统节点、缓存系统节点、数据库节点。

为实现上述目的,根据本发明的另一方面,提供了一种分布式系统调用链的确定装置。

本发明实施例的分布式系统调用链的确定装置可包括:跟踪标识生成单元,用于:在接收用于调用目标服务的请求之后,生成对应于该次目标服务调用的跟踪标识;其中,目标服务由多个子服务节点共同提供,每一子服务节点包括至少一个方法节点;子服务日志生成单元,用于:在调用任一子服务节点时,生成对应于该次调用的日志数据;其中:在该子服务节点不是目标服务的入口节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识以及该子服务节点的父节点标识;方法日志生成单元,用于:在调用任一子服务节点中的任一方法节点时,生成对应于该次调用的日志数据;其中,在该方法节点不是该子服务节点的入口方法节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识、该方法节点的标识以及该方法节点的父节点标识;调用链跟踪单元,用于依据所述跟踪标识确定该次目标服务调用过程中生成的日志数据,利用确定的日志数据中的子服务节点标识和方法节点标识确定该次目标服务调用的调用链信息。

为实现上述目的,根据本发明的又一方面,提供了一种电子设备。

本发明的一种电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的分布式系统调用链的确定方法。

为实现上述目的,根据本发明的再一方面,提供了一种计算机可读存储介质。

本发明的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明所提供的分布式系统调用链的确定方法。

根据本发明的技术方案,上述发明中的一个实施例具有如下优点或有益效果:

其一,在接收到客户端发送的调用目标服务的请求之后,生成全局唯一的跟踪节点来标识该次目标服务调用,并将跟踪节点存储在之后每一次调用生成的日志数据中;在对每一子服务节点进行调用时均会生成相应的日志数据,日志数据中可含有跟踪节点、子服务节点标识以及父节点标识。这样,在需要跟踪该次目标服务调用的调用链时,可依据跟踪节点查询相关的日志数据,并利用日志数据中的子服务节点标识以及父节点标识来组织整个调用链信息。另外,调用时生成的每一日志数据中还包含调用时长信息,组织调用链信息时可将日志数据中的调用时长信息写入相应节点。这样,可利用多次服务调用的调用链信息统计每一子服务节点的平均调用时长和调用次数,前者可用于判断该子服务节点的性能,后者可用于判断该子服务节点的重要性,二者可为后续的系统优化提供数据支持。

其二,在实现子服务粒度的调用链跟踪的基础上,本发明进一步实现了方法粒度的调用链跟踪。具体地,在调用子服务节点中的任一方法节点时,可生成相应的日志数据来存储跟踪标识、子服务节点标识、方法节点标识、父节点标识以及调用时长信息,这样,在组织调用链信息时可根据日志数据中的上述信息得到每一子服务节点中的方法粒度的调用链信息,该调用链信息可用于统计每一方法节点的平均调用时长和调用次数,从而实现对方法节点性能和重要性的准确判断。通过上述设置,本发明能够对复杂服务的调用情况进行跟踪并梳理各节点之间复杂的嵌套关系,能够快速定位问题节点以及性能瓶颈节点,还可将文件系统、缓存系统和数据库作为子服务节点纳入调用链跟踪范围。

上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是本发明实施例中分布式系统调用链的确定方法的主要步骤示意图;

图2是本发明实施例中子服务节点形成的调用链示意图;

图3是本发明实施例中方法节点形成的调用链示意图;

图4是执行本发明实施例中分布式系统调用链的确定方法的整体架构示意图;

图5是本发明实施例中分布式系统调用链的确定装置的主要步骤示意图;

图6是根据本发明实施例可以应用于其中的示例性系统架构图;

图7是用来实现本发明实施例中分布式系统调用链的确定方法的电子设备结构示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

在本发明实施例中,可以在子服务维度和方法维度对分布式系统各种服务调用框架(如soa、微服务等)中的调用链进行跟踪。一般地,调用链指的是系统在完成一次服务调用的过程中,将各子服务之间或者各方法间的调用信息打点到日志数据中,然后将所有的日志数据连接形成的树形结构的链条。调用链信息在后续进行不同维度的统计分析之后,能够标识出存在异常的子服务调用或者方法调用,还可分析系统的性能瓶颈。可以理解,上述服务为通过调用多个子服务实现的业务服务,每一子服务可以是应用程序,也可以是文件系统、缓存系统或者数据库(对文件系统、缓存系统或者数据库的调用相当于对文件系统、缓存系统或者数据库的访问或查询),每一子服务通过调用其中的至少一个方法或函数实现。在以下说明中出现的“子服务节点”和“方法节点”分别为上述“子服务”和“方法”在分布式系统以及树形结构调用链中的称谓。

此外,在本发明实施例中,可采用现有的字节码插桩方法在各服务以及子服务代码中埋点来生成日志数据,实际应用中,可使用javaagent拦截classload(字节码文件装载器),使用javassist(javaagent与javassist均为已知的java技术)操作修改字节码文件,从而实现字节码文件中的埋点。另外,需要指出的是,在不冲突的情况下,本发明的实施例以及实施例中的技术特征可以相互结合。

图1是根据本发明实施例中分布式系统调用链的确定方法的主要步骤示意图。

如图1所示,本发明实施例的分布式系统调用链的确定方法可具体按照如下步骤执行:

步骤s101:在接收用于调用目标服务的请求之后,生成对应于该次目标服务调用的跟踪标识;其中,目标服务由多个子服务节点共同提供,每一子服务节点包括至少一个方法节点。

在本步骤中,服务端首先接收客户端发送的用于调用目标服务的请求,由于目标服务的实现需要调用关联的多个子服务节点,因此此后需要根据调用顺序依次调用每一子服务节点。例如,如果目标服务与5个子服务节点a、b、c、d、e关联,其中a为入口节点,a的返回结果取决于b和c的返回结果,c的返回结果又取决于d、e的返回结果,则接收到客户端请求后,该请求首先到达a,接着a向b、c请求调用,b可直接返回数据,c需要与d、e进行交互之后再返回给a,最后由a来响应客户端发送的请求。在接收客户端发送的上述请求之后,可生成全局唯一的(即每一次服务调用生成的跟踪标识均不同)、用于唯一标识该次目标服务调用的跟踪标识来组织关联的每次调用。具体应用中,跟踪标识以及以下即将说明的子服务节点标识和方法节点标识均可采用60位整数表示,可以理解,这不对本发明实施例中各标识的数据格式形成限制。

此外,每一子服务节点可包括入口节点以及至少一个方法节点,直接与入口节点交互的方法节点可称为入口方法节点。每一子服务节点内的方法节点通过各种方式的交互实现该子服务节点的功能。实际应用中,子服务节点之间以及方法节点之间可通过各种方式进行交互,例如超文本传输协议http(hypertexttransferprotocol)、远程过程调用rpc(remoteprocedurecall)、套接字socket、java消息服务jms(javamessageservice)等。

步骤s102:在调用任一子服务节点时,生成对应于该次调用的日志数据。

在本步骤中,可利用埋点代码生成对应于每一次子服务节点调用的日志数据。一般地,在该次目标服务调用过程中首次调用某个子服务节点时可生成该子服务节点的标识,子服务节点的标识在该次目标服务调用过程中保持唯一,也就是说,该次目标服务调用链的任意两个子服务节点具有不同的标识。实际应用中,可根据调用时刻的先后顺序依次生成子服务节点标识。例如,如果上例中的调用顺序为a——b——c——d——e,可将五个子服务节点的标识依次设置为1、2、3、4、5。

作为一个优选方案,调用某一子服务节点时生成的日志数据中可包含上述跟踪标识、该子服务节点的标识以及各种调用参数(例如该子服务节点的ip地址和端口信息等,ip表示互联网协议)。在该子服务节点为目标服务的入口节点时,该子服务节点没有父节点;在该子服务节点不是目标服务的入口节点时,生成的日志数据中还包含该子服务节点的父节点标识。可以理解,该子服务节点的父节点是向该子服务节点发起调用的子服务节点。例如,在上例中,a为b和c的父节点(b和c为a的子节点),c为d和e的父节点(d和e为c的子节点)。特别地,生成的日志数据中还可包含该次调用的时长信息,该时长信息可用于后续的问题点判断和系统性能瓶颈分析。

步骤s103:在调用任一子服务节点中的任一方法节点时,生成对应于该次调用的日志数据。

在本步骤中,可针对每一子服务节点中的每一方法节点调用生成日志数据。具体地,在该次目标服务调用过程中如果首次调用某子服务节点中的某方法节点,则生成该方法节点的标识。方法节点标识在该子服务节点的内部调用过程中具有唯一性,也就是说,在调用该子服务节点内部各方法节点的过程中,每一方法节点具有唯一的标识。实际应用中,可根据调用时刻的先后顺序依次生成方法节点标识。例如,如果上例中子服务节点b中包括入口节点a以及方法节点b、c、d、e、f、g、h(其中b、c为入口方法节点),a依赖于b、c的返回结果,b依赖于d、e的返回结果,c依赖于f、g的返回结果,d依赖于h的返回结果,且各方法节点的调用顺序为b——c——d——e——f——g——h,则可将b、c、d、e、f、g、h的标识依次设置为1、2、3、4、5、6、7。

在一些实施例中,如果某方法节点是子服务节点的入口方法节点,则生成的日志数据中含有上述跟踪标识、该子服务节点的标识以及该方法节点的标识。如果该方法节点不是子服务节点的入口方法节点,则生成的日志数据中含有上述跟踪标识、该子服务节点的标识、该方法节点的标识以及该方法节点的父节点标识。可以理解,该方法节点的父节点为向该方法节点发起调用的方法节点。可以理解,调用方法节点生成的日志数据中还可包括调用参数(如ip地址和端口信息)以及调用时长信息。此外,日志数据中的跟踪标识、子服务节点标识或者方法节点标识可根据子服务节点之间或者方法节点之间进行交互时传递的相关标识信息确定。实际应用中,跟踪标识、子服务节点标识以及方法节点标识可存储在当前操作线程的本地存储类(即threadlocal)中。

在一可选实现方式中,方法节点标识还可设置为具有层级格式的数据,此时方法节点标识中包含其父节点标识。例如,在上例中,可将b的标识设置为1,将c的标识设置为2,将d的标识设置为1-1,将e的标识设置为1-2,将f的标识设置为2-1,将g的标识设置为2-2,将h的标识设置为1-1-1。通过上述设置,能够在某方法节点标识中确定其父节点标识甚至祖节点标识。例如,g的标识为2-2,则去除最后一个数值可得到其父节点标识为2;h的标识为1-1-1,则去除最后一个数值可得到其父节点标识为1-1,去除后两个数值得到其祖节点为1。

通过上述设置,即可通过生成的日志数据实现对目标服务调用过程中每一次子服务节点调用以及方法节点调用的跟踪,这些日志数据可用于后续的调用次数统计、问题点检测以及性能瓶颈分析。此外,本发明并不限制步骤s103与步骤s102之间的执行顺序。

步骤s104:依据跟踪标识确定该次目标服务调用过程中生成的日志数据,利用确定的日志数据中的子服务节点标识和方法节点标识确定该次目标服务调用的调用链信息。

在利用步骤s102和步骤s103生成日志数据之后,可使用logstash(一种日志收集工具)采集生成的日志数据并发送到消息队列(如kafka),消息队列中的日志数据可以被存储到数据库(如弹性搜索引擎es)用于后续查询和统计。可以理解,日志数据可根据预设的采集周期(例如1小时)进行采集,上述消息队列能够实现日志数据采集与存储的解耦。

在步骤s104中,可利用某次服务调用的跟踪标识查询关联的日志数据,进而按照日志数据中的子服务节点标识(包括调用子服务节点时生成的日志数据中的子服务节点标识和父节点标识、以及调用方法节点时生成的日志数据中的子服务节点标识)和方法节点标识(包括调用方法节点时生成的日志数据中的方法节点标识和父节点标识)即可对每一子服务节点以及每一方法节点进行连接,从而得到该次服务调用的调用链信息。该调用链信息为树形结构数据,其可包括由子服务节点形成的调用链信息(即子服务维度的调用链信息)以及由每一子服务节点中的方法节点形成的调用链信息(即方法维度的调用链信息)。

图2是本发明实施例中子服务节点形成的调用链示意图,图3是本发明实施例中方法节点形成的调用链示意图,二者分别示出了上例中子服务维度的调用链结构和方法维度的调用链结构。在图2和图3中,箭头从父节点指向子节点,表示父节点对子节点发起的调用,chainid表示子服务节点标识,eventid表示方法节点标识。

较佳地,在本发明实施例中,还可将日志数据中的调用时长信息增加到调用链的相应节点以便后续统计分析。以下将说明基于调用链信息的几种统计分析方法。

1.将某次服务调用的调用链信息中各子服务节点的调用时长相加,得到该次服务调用的总时长。如果总时长大于预设门限值,说明该服务发生异常,则进行告警。

2.从某次服务调用的调用链信息中确定调用时长大于预设的第一时长阈值的子服务节点以及调用时长大于预设的第二时长阈值的方法节点,将确定的子服务节点和方法节点作为问题节点进行告警。

3.从数据库中获取当前统计周期(例如一周)内多次目标服务调用的调用链信息,利用该调用链信息确定当前统计周期内每一子服务节点的平均调用时长以及每一方法节点的平均调用时长。具体地,针对任一子服务节点或方法节点,首先确定其在每一调用链信息中的调用时长,之后计算多个调用时长的平均值(如算数平均值或几何平均值)即可得到平均调用时长。如果任一子服务节点的平均调用时长大于第一时长阈值或者任一方法节点的平均调用时长大于第二时长阈值,说明该子服务节点或者方法节点为目标服务的性能瓶颈节点,则进行告警。

4.从数据库中获取当前统计周期内多个服务的每一次调用的调用链信息,根据该调用链信息统计上述每一次调用涉及的每一子服务节点的调用次数以及每一方法节点的调用次数。具体地,针对每一子服务节点或者方法节点,统计其在每一调用链中的调用次数,之后将这些调用次数相加即可得到其在当前统计周期内的调用次数(即调用总数)。上述调用次数能够表征子服务节点和方法节点的重要性,后续可以根据实际情况对调用次数较大的子服务节点和方法节点进行资源扩展。

图4是执行本发明实施例中分布式系统调用链的确定方法的整体架构示意图。在图4中,日志生成模块可以是agent(用于生成日志的代理端),日志采集模块可以是logstash,消息队列可以是kafka,数据库可以是es,以上并不对上述模块的可能配置方式形成限制。需要说明的是,本发明实施例提供的分布式系统调用链的确定方法可应用在soa、微服务架构等分布式架构,也可用于其它形式的分布式服务调用架构。

在本发明实施例的技术方案中,在接收到客户端发送的调用目标服务的请求之后,生成全局唯一的跟踪节点来标识该次目标服务调用,并将跟踪节点存储在之后每一次调用生成的日志数据中;在对每一子服务节点进行调用时均会生成相应的日志数据,日志数据中可含有跟踪节点、子服务节点标识以及父节点标识。这样,在需要跟踪该次目标服务调用的调用链时,可依据跟踪节点查询相关的日志数据,并利用日志数据中的子服务节点标识以及父节点标识来组织整个调用链信息。另外,调用时生成的每一日志数据中还包含调用时长信息,组织调用链信息时可将日志数据中的调用时长信息写入相应节点。这样,可利用多次服务调用的调用链信息统计每一子服务节点的平均调用时长和调用次数,前者可用于判断该子服务节点的性能,后者可用于判断该子服务节点的重要性,二者可为后续的系统优化提供数据支持。在实现子服务粒度的调用链跟踪的基础上,本发明进一步实现了方法粒度的调用链跟踪。具体地,在调用子服务节点中的任一方法节点时,可生成相应的日志数据来存储跟踪标识、子服务节点标识、方法节点标识、父节点标识以及调用时长信息,这样,在组织调用链信息时可根据日志数据中的上述信息得到每一子服务节点中的方法粒度的调用链信息,该调用链信息可用于统计每一方法节点的平均调用时长和调用次数,从而实现对方法节点性能和重要性的准确判断。通过上述设置,本发明能够对复杂服务的调用情况进行跟踪并梳理各节点之间复杂的嵌套关系,能够快速定位问题节点以及性能瓶颈节点,还可将文件系统、缓存系统和数据库作为子服务节点纳入调用链跟踪范围。

需要说明的是,对于前述的各方法实施例,为了便于描述,将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,某些步骤事实上可以采用其它顺序进行或者同时进行。此外,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是实现本发明所必须的。

为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。

请参阅图5所示,本发明实施例提供的分布式系统调用链的确定装置500可以包括:跟踪标识生成单元501、子服务日志生成单元502、方法日志生成单元503以及调用链跟踪单元504。

其中,跟踪标识生成单元501可用于:在接收用于调用目标服务的请求之后,生成对应于该次目标服务调用的跟踪标识;其中,目标服务由多个子服务节点共同提供,每一子服务节点包括至少一个方法节点;子服务日志生成单元502可用于:在调用任一子服务节点时,生成对应于该次调用的日志数据;其中:在该子服务节点不是目标服务的入口节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识以及该子服务节点的父节点标识;方法日志生成单元503可用于:在调用任一子服务节点中的任一方法节点时,生成对应于该次调用的日志数据;其中,在该方法节点不是该子服务节点的入口方法节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识、该方法节点的标识以及该方法节点的父节点标识;调用链跟踪单元504可用于依据所述跟踪标识确定该次目标服务调用过程中生成的日志数据,利用确定的日志数据中的子服务节点标识和方法节点标识确定该次目标服务调用的调用链信息。

在本发明实施例中,在调用任一子服务节点时,如果该子服务节点是目标服务的入口节点,则生成的日志数据中含有所述跟踪标识和该子服务节点的标识;在调用任一子服务节点中的任一方法节点时,如果该方法节点是该子服务节点的入口方法节点,则生成的日志数据中含有所述跟踪标识、该子服务节点的标识以及该方法节点的标识。

具体应用中,所述子服务节点的父节点为子服务节点,所述方法节点的父节点为方法节点;该次目标服务调用的调用链信息为树形结构,包括:由所述多个子服务节点形成的调用链信息以及由每一子服务节点中的方法节点形成的调用链信息;任一次调用生成的日志数据中进一步含有该次调用的时长信息;以及,所述装置500可进一步包括信息增加单元,其用于将调用任一次子服务节点生成的日志数据中的调用时长信息增加到该次目标服务调用的调用链的该子服务节点中,将调用任一次方法节点生成的日志数据中的调用时长信息增加到该次目标服务调用的调用链的该方法节点中。

实际应用中,所述装置500可进一步包括日志存储单元,其用于:在所述依据所述跟踪标识确定该次目标服务调用过程中生成的日志数据之前,获取当前采集周期内生成的日志数据,将生成的日志数据通过消息队列存储在数据库。

在一些实施例中,所述装置500可进一步包括统计分析单元,其用于:从所述数据库中获取当前统计周期内多次目标服务调用的调用链信息,利用该调用链信息确定当前统计周期内每一子服务节点的平均调用时长以及每一方法节点的平均调用时长;在任一子服务节点的平均调用时长大于预设的第一时长阈值或者任一方法节点的平均调用时长大于预设的第二时长阈值时进行告警。

在一可选实现方式中,统计分析单元可进一步用于:从所述数据库中获取当前统计周期内多个服务的每一次调用的调用链信息,根据该调用链信息统计所述每一次调用涉及的每一子服务节点的调用次数以及每一方法节点的调用次数。

此外,在本发明实施例中,所述消息队列包括kafka,所述数据库包括弹性搜索引擎es;所述子服务节点包括以下一种或多种:应用程序节点、文件系统节点、缓存系统节点、数据库节点。

在本发明实施例的技术方案中,在接收到客户端发送的调用目标服务的请求之后,生成全局唯一的跟踪节点来标识该次目标服务调用,并将跟踪节点存储在之后每一次调用生成的日志数据中;在对每一子服务节点进行调用时均会生成相应的日志数据,日志数据中可含有跟踪节点、子服务节点标识以及父节点标识。这样,在需要跟踪该次目标服务调用的调用链时,可依据跟踪节点查询相关的日志数据,并利用日志数据中的子服务节点标识以及父节点标识来组织整个调用链信息。另外,调用时生成的每一日志数据中还包含调用时长信息,组织调用链信息时可将日志数据中的调用时长信息写入相应节点。这样,可利用多次服务调用的调用链信息统计每一子服务节点的平均调用时长和调用次数,前者可用于判断该子服务节点的性能,后者可用于判断该子服务节点的重要性,二者可为后续的系统优化提供数据支持。在实现子服务粒度的调用链跟踪的基础上,本发明进一步实现了方法粒度的调用链跟踪。具体地,在调用子服务节点中的任一方法节点时,可生成相应的日志数据来存储跟踪标识、子服务节点标识、方法节点标识、父节点标识以及调用时长信息,这样,在组织调用链信息时可根据日志数据中的上述信息得到每一子服务节点中的方法粒度的调用链信息,该调用链信息可用于统计每一方法节点的平均调用时长和调用次数,从而实现对方法节点性能和重要性的准确判断。通过上述设置,本发明能够对复杂服务的调用情况进行跟踪并梳理各节点之间复杂的嵌套关系,能够快速定位问题节点以及性能瓶颈节点,还可将文件系统、缓存系统和数据库作为子服务节点纳入调用链跟踪范围。

图6示出了可以应用本发明实施例的分布式系统调用链的确定方法或分布式系统调用链的确定装置的示例性系统架构600。

如图6所示,系统架构600可以包括终端设备601、602、603,网络604和服务器605(此架构仅仅是示例,具体架构中包含的组件可以根据申请具体情况调整)。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种客户端应用,例如调用链跟踪应用(仅为示例)。

终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603所操作的调用链跟踪应用提供支持的后台服务器(仅为示例)。后台服务器可以对接收到的请求进行处理,并将处理结果(确定的调用链信息例如--仅为示例)反馈给终端设备601、602、603。

需要说明的是,本发明实施例所提供的分布式系统调用链的确定方法一般由服务器605执行,相应地,分布式系统调用链的确定装置一般设置于服务器605中。

应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

本发明还提供了一种电子设备。本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的分布式系统调用链的确定方法。

下面参考图7,其示出了适于用来实现本发明实施例的电子设备的计算机系统700的结构示意图。图7示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图7所示,计算机系统700包括中央处理单元(cpu)701,其可以根据存储在只读存储器(rom)702中的程序或者从存储部分708加载到随机访问存储器(ram)703中的程序而执行各种适当的动作和处理。在ram703中,还存储有计算机系统700操作所需的各种程序和数据。cpu701、rom702以及ram703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。

以下部件连接至i/o接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至i/o接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便从其上读出的计算机程序根据需要被安装入存储部分708。

特别地,根据本发明公开的实施例,上文的主要步骤图描述的过程可以被实现为计算机软件程序。例如,本发明实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在上述实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元701执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。在本发明中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这根据所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括跟踪标识生成单元、子服务日志生成单元、方法日志生成单元和调用链跟踪单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,跟踪标识生成单元还可以被描述为“向子服务日志生成单元和方法日志生成单元发送跟踪标识的单元”。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中的。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该设备执行时,使得该设备执行的步骤包括:在接收用于调用目标服务的请求之后,生成对应于该次目标服务调用的跟踪标识;其中,目标服务由多个子服务节点共同提供,每一子服务节点包括至少一个方法节点;在调用任一子服务节点时,生成对应于该次调用的日志数据;其中:在该子服务节点不是目标服务的入口节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识以及该子服务节点的父节点标识;在调用任一子服务节点中的任一方法节点时,生成对应于该次调用的日志数据;其中,在该方法节点不是该子服务节点的入口方法节点时,生成的日志数据中含有所述跟踪标识、该子服务节点的标识、该方法节点的标识以及该方法节点的父节点标识;以及,依据所述跟踪标识确定该次目标服务调用过程中生成的日志数据,利用确定的日志数据中的子服务节点标识和方法节点标识确定该次目标服务调用的调用链信息。

在本发明实施例的技术方案中,在接收到客户端发送的调用目标服务的请求之后,生成全局唯一的跟踪节点来标识该次目标服务调用,并将跟踪节点存储在之后每一次调用生成的日志数据中;在对每一子服务节点进行调用时均会生成相应的日志数据,日志数据中可含有跟踪节点、子服务节点标识以及父节点标识。这样,在需要跟踪该次目标服务调用的调用链时,可依据跟踪节点查询相关的日志数据,并利用日志数据中的子服务节点标识以及父节点标识来组织整个调用链信息。另外,调用时生成的每一日志数据中还包含调用时长信息,组织调用链信息时可将日志数据中的调用时长信息写入相应节点。这样,可利用多次服务调用的调用链信息统计每一子服务节点的平均调用时长和调用次数,前者可用于判断该子服务节点的性能,后者可用于判断该子服务节点的重要性,二者可为后续的系统优化提供数据支持。在实现子服务粒度的调用链跟踪的基础上,本发明进一步实现了方法粒度的调用链跟踪。具体地,在调用子服务节点中的任一方法节点时,可生成相应的日志数据来存储跟踪标识、子服务节点标识、方法节点标识、父节点标识以及调用时长信息,这样,在组织调用链信息时可根据日志数据中的上述信息得到每一子服务节点中的方法粒度的调用链信息,该调用链信息可用于统计每一方法节点的平均调用时长和调用次数,从而实现对方法节点性能和重要性的准确判断。通过上述设置,本发明能够对复杂服务的调用情况进行跟踪并梳理各节点之间复杂的嵌套关系,能够快速定位问题节点以及性能瓶颈节点,还可将文件系统、缓存系统和数据库作为子服务节点纳入调用链跟踪范围。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1