一种分布式事务链路追踪方法及系统与流程

文档序号:31759574发布日期:2022-10-12 02:33阅读:77来源:国知局
一种分布式事务链路追踪方法及系统与流程

1.本发明涉及计算机应用性能监控技术领域,具体涉及一种分布式事务链路追踪方法及系统。另外,还涉及一种电子设备及处理器可读存储介质。


背景技术:

2.在计算机应用性能监控(application performance monitoring,apm)领域,分布式链路追踪方法通常是基于对google的rpc(remote procedure call)框架代码进行修改,使得一个进程在接受到一个远程过程调用(remote procedure call,rpc)请求后通过提取上下文信息、并将其继续注入同一个分布式事务的后续rpc请求中,使得在分布式系统中一个事务的所有rpc能共享同一个上下文信息,从而实现分布式事务的追踪。该分布式链路追踪方法局限性较高,存在的缺陷主要是对应用代码的侵扰性,例如google dapper通过修改google rpc框架代码库,并重新编译所有应用程序才能实现分布式链路追踪的能力。这使得追踪方法需要针对每一种编程语言、每一种rpc框架、每一种应用层通信协议进行适配。该适配方式需要向rpc消息中注入额外的内容以传递事务的上下文信息,对应用代码造成侵扰,且分布式事务的追踪性能较差。因此,如何设计一种零侵扰、高性能的分布式事务链路追踪方案成为亟待解决的难题。


技术实现要素:

3.为此,本发明提供一种分布式事务链路追踪方法及系统,以解决现有技术中存在的分布式事务链路追踪方案局限性较高,从而导致对分布式事务的追踪性能较差的缺陷。
4.第一方面,本发明提供一种分布式事务链路追踪方法,包括:
5.将内核虚拟机应用程序加载到相应操作系统的内核;其中,所述内核虚拟机应用程序包含哈希表和自增计数器;
6.当所述内核中的系统调用程序触发所述内核虚拟机应用程序执行时,获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址;
7.基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识;其中,所述系统调用程序为读系统调用程序或写系统调用程序;
8.基于所述追踪标识对同一个进程内的分布式事务进行链路追踪。
9.进一步的,所述基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识,具体包括:
10.若所述内核虚拟机应用程序由所述读系统调用程序触发,则在所述哈希表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所述系统调用程序对应的过程调用会话的追踪标识;若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到
所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将所述线程号及对应的所述第一socket地址添加到所述哈希表。
11.进一步的,所述基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识,具体包括:
12.若所述内核虚拟机应用程序由所述写系统调用程序触发,则在所述哈希表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所述系统调用程序对应的过程调用会话的追踪标识;若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将所述线程号及对应的所述第一socket地址添加到所述哈希表。
13.进一步的,所述分布式事务是指同一个进程内部运行多线程实现并发时,所述多线程中任意一个线程在不同时间所执行的至少两个事务;其中,所述同一个进程内产生的对应相同追踪标识的所有过程调用会话属于同一个事务。
14.进一步的,所述的分布式事务链路追踪方法,还包括:
15.根据所述第一socket地址中记录的传输控制协议序列号,确定过程调用请求和过程调用响应分别对应的特征签名;其中,所述过程调用会话包含所述过程调用请求和所述过程调用响应;
16.基于所述特征签名对不同进程内的分布式事务进行链路追踪。
17.进一步的,所述基于所述特征签名对不同进程内的分布式事务进行链路追踪,具体包括:
18.在不同进程之间的过程调用会话中,将所述过程调用请求和所述过程调用响应对应的特征签名进行匹配对比,根据匹配对比结果确定不同进程对应过程调用会话,以实现跨进程的链路追踪。
19.进一步的,所述内核虚拟机应用程序为预先编译的ebpf字节码。
20.第二方面,本发明还提供一种分布式事务链路追踪系统,包括:
21.程序加载单元,用于将内核虚拟机应用程序加载到相应操作系统的内核;其中,所述内核虚拟机应用程序包含哈希表和自增计数器;
22.数据获取单元,用于当所述内核中的系统调用程序触发所述内核虚拟机应用程序执行时,获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址;
23.追踪标识确定单元,用于基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识;其中,所述系统调用程序为读系统调用程序或写系统调用程序;
24.链路追踪单元,用于基于所述追踪标识对同一个进程内的分布式事务进行链路追踪。
25.进一步的,所述追踪标识确定单元,具体用于:
26.若所述内核虚拟机应用程序由所述读系统调用程序触发,则在所述哈希表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所
述系统调用程序对应的过程调用会话的追踪标识;若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将所述线程号及对应的所述第一socket地址添加到所述哈希表。
27.进一步的,所述追踪标识确定单元,具体还用于:
28.若所述内核虚拟机应用程序由所述写系统调用程序触发,则在所述哈希表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所述系统调用程序对应的过程调用会话的追踪标识;若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将所述线程号及对应的所述第一socket地址添加到所述哈希表。
29.进一步的,所述分布式事务是指同一个进程内部运行多线程实现并发时,所述多线程中任意一个线程在不同时间所执行的至少两个事务;其中,所述同一个进程内产生的对应相同追踪标识的所有过程调用会话属于同一个事务。
30.进一步的,所述的分布式事务链路追踪系统,还包括:
31.特征签名确定单元,用于根据所述第一socket地址中记录的传输控制协议序列号,确定过程调用请求和过程调用响应分别对应的特征签名;其中,所述过程调用会话包含所述过程调用请求和所述过程调用响应;
32.所述链路追踪单元,还用于基于所述特征签名对不同进程内的分布式事务进行链路追踪。
33.进一步的,所述链路追踪单元,具体用于:
34.在不同进程之间的过程调用会话中,将所述过程调用请求和所述过程调用响应对应的特征签名进行匹配对比,根据匹配对比结果确定不同进程对应过程调用会话,以实现跨进程的链路追踪。
35.进一步的,所述内核虚拟机应用程序为预先编译的ebpf字节码。
36.第三方面,本发明还提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述计算机程序时实现如上述任意一项所述的分布式事务链路追踪方法的步骤。
37.第四方面,本发明还提供一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上述任意一项所述的分布式事务链路追踪方法的步骤。
38.本发明提供的分布式事务链路追踪方法,通过将内核虚拟机应用程序加载到相应操作系统的内核;内核虚拟机应用程序包含哈希表和自增计数器;当内核中的系统调用程序触发内核虚拟机应用程序执行时,获取内核虚拟机应用程序当前对应的线程号以及系统调用程序当前关联的第一socket地址;基于哈希表、自增计数器、第一socket地址及线程号,确定系统调用程序对应过程调用会话的追踪标识;系统调用程序为读系统调用程序或写系统调用程序;基于追踪标识对同一个进程内的分布式事务进行链路追踪。该方法适用
于应用进程内部使用多线程实现并发的场景,能够零侵扰的实现多线程并发机制的应用程序的分布式事务全链路追踪,有效提高了分布式事务的追踪稳定性。
附图说明
39.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他的附图。
40.图1是本发明实施例提供的分布式事务链路追踪方法的流程示意图;
41.图2是本发明实施例提供的同一个进程内分布式事务进行链路追踪的示意图;
42.图3是本发明实施例提供的不同进程之间分布式事务进行链路追踪的示意图;
43.图4是本发明实施例提供的分布式事务链路追踪系统的结构示意图;
44.图5是本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
45.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获取的所有其他实施例,都属于本发明保护的范围。
46.本发明基于linux kernel的ebpf(extended berkeley packet filter)机制,实现了一个零侵扰的分布式事务链路追踪方法。该方法适用于应用进程内部使用多线程实现并发的场景。
47.下面基于本发明所述的分布式事务链路追踪方法,对其实施例进行详细描述。如图1所示,其为本发明实施例提供的分布式事务链路追踪方法的流程示意图,具体实现过程包括以下步骤:
48.步骤101:将内核虚拟机应用程序加载到相应操作系统的内核;其中,所述内核虚拟机应用程序包含哈希表和自增计数器。
49.具体的,所述内核虚拟机应用程序为预先编译的ebpf(extended berkeley packet filter)字节码,其是一种可以在操作系统内核中运行用户编写的程序,而不需要修改内核代码或加载内核模块的技术。所述操作系统可以是指linux系统、windows系统等。所述哈希表和自增计数器可预先编译到所述内核虚拟机应用程序中,所述哈希表用于记录及查询响应的线程号,所述自增计数器用于确定过程调用会话的追踪标识。在本发明实施例中,通过监控agent向linux系统内核下发ebpf字节码,用于注入到linux系统内核的读系统调用程序(read系统调用函数)、写系统调用程序(write系统调用函数)中。agent为预设的一种在分布式系统或者协作系统中,能够持续自主地发挥作用的计算实体,简称为“智能体”。
50.步骤102:当所述内核中的系统调用程序触发所述内核虚拟机应用程序执行时,获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址。
51.在本发明实施例中,所述系统调用程序为linux系统内核的读系统调用程序或写系统调用程序。在执行本步骤之前,需要预先启动所述内核虚拟机应用程序,并初始化哈希表及自增计数器。初始化完成后,通过所述操作系统的内核中的系统调用程序触发所述内核虚拟机应用程序执行,实现获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址。
52.具体的,如图2所示,进程1中通过运行多个线程实现并发(同一时间响应多个rpc请求),但任意一个线程在同一时间只能响应一个rpc请求,直到这个rpc请求终结为止。图1中的事务1由rpc调用1-6组成,事务2由rpc调用7-12组成。其中,1为事务1中的第一rpc请求、2为第二rpc请求、3为第二rpc响应、4为第三rpc请求、5为第三rpc响应、6为事务1中的第一rpc响应;所述第一rpc响应与所述第一rpc请求为一个rpc会话,第二rpc请求和第二rpc响应为一个rpc会话,第三rpc请求和第三rpc响应为一个rpc会话。另外,7为事务2中的第一rpc请求、8为第二rpc请求、9为第二rpc响应、10为第三rpc请求、11为第三rpc响应、12为事务1中的第一rpc响应;所述第一rpc响应与所述第一rpc请求为一个rpc会话,第二rpc请求和第二rpc响应为一个rpc会话,第三rpc请求和第三rpc响应为一个rpc会话。所述事务1和事务2为线程1在不同时间对应执行的不同分布式事务。为了实现对事务的追踪,本方明在步骤101中利用监控agent向linux内核下发ebpf字节码(即b),用于注入到内核的read系统调用函数或write系统调用函数中之后,执行流程如下:启动b,并初始化哈希表(即h)、自增计数器(即c);当内核中的read系统调用函数或write系统调用函数触发b执行时,获取当前所处的内核线程号(即s)以及该系统调用关联的socket的地址(即a)。
53.步骤103:基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识。所述系统调用程序为读系统调用程序或写系统调用程序。
54.在本发明实施例中,若所述内核虚拟机应用程序(即b)由所述读系统调用程序触发,则在所述哈希表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所述系统调用程序对应的过程调用会话(即rpc会话)的追踪标识(即追踪id);若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将线程号及对应的所述第一socket地址添加到所述哈希表。
55.具体的,在该系统调用程序对应rpc会话的追踪id(即t)。若b由read系统调用程序触发,在哈希表h中查询线程号s;若s不在h中,则将自增计数器c+=1(即自增计数器的当前值加1),得到新的值,并将t赋值为新的c(新的值);将s及对应的socket地址a插入哈希表h,即h[s]=a,比如将图1中事务1的第一rpc请求对应的socket地址a插入哈希表h,并依次执行第二rpc请求、第二rpc响应、第二rpc请求、第二rpc响应;若s在h中,将t赋值为c,若当前socket的地址a等于h[s](即执行到事务1中的第一rpc响应,此时第一rpc响应对应的socket地址与第一rpc请求对应的socket地址a相等),则从h中删除s,表示完成了事务1的执行过程。
[0056]
相应的,若所述内核虚拟机应用程序由所述写系统调用程序触发,则在所述哈希
表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所述系统调用程序对应的过程调用会话(即rpc会话)的追踪标识(即追踪id);若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将线程号及对应的所述第一socket地址添加到所述哈希表。同样的,在该系统调用程序对应rpc会话的追踪id(即t)。若b由write系统调用程序触发,在哈希表h中查询线程号s;若s不在h中,则将自增计数器c+=1(即自增计数器的当前值加1),得到新的值,并将t赋值为新的c(新的值);将s及对应的socket地址a插入哈希表h,即h[s]=a,比如将图1中事务1的第一rpc请求对应的socket地址a插入哈希表h,并依次执行第二rpc请求、第二rpc响应、第二rpc请求、第二rpc响应;若s在h中,将t赋值为c,若当前socket的地址a等于h[s](即执行到事务1中的第一rpc响应,此时第一rpc响应对应的socket地址与第一rpc请求对应的socket地址a相等),则从h中删除s,表示完成了事务1的执行过程。
[0057]
步骤104:基于所述追踪标识对同一个进程内的分布式事务进行链路追踪。
[0058]
所述分布式事务是指同一个进程内部运行多线程实现并发时,所述多线程中任意一个线程在不同时间所执行的至少两个事务;其中,所述同一个进程内产生的对应相同追踪标识的所有过程调用会话属于同一个事务。利用应用程序的多线程并发模型(即图2所示)计算rpc的追踪id,使得属于同一个分布式事务的追踪id相同,且属于不同分布式事务的追踪id不同,实现一个进程内部的链路追踪。即同一个进程产生的所有rpc调用,共享同样追踪id t的属于同一个事务(比如事务1或事务2)。
[0059]
另外,在本发明实施例中,还可根据所述第一socket地址中记录的传输控制协议序列号(即tcp sequence号),确定过程调用请求和过程调用响应分别对应的特征签名;其中,所述过程调用会话包含所述过程调用请求和所述过程调用响应;基于所述特征签名对不同进程内的分布式事务进行链路追踪。其中,所述基于所述特征签名对不同进程内的分布式事务进行链路追踪,对应的具体实现过程包括:在不同进程之间的过程调用会话中,将所述过程调用请求和所述过程调用响应对应的特征签名进行匹配对比,根据匹配对比结果确定不同进程对应过程调用会话,以实现跨进程的链路追踪。
[0060]
在具体实施过程中,可为所有rpc会话的请求、响应分别记特征签名x,该特征签名x的值可基于socket中记录的tcp sequence号确定。经过对所有进程的所有rpc会话的追踪id(即t)进行标记,可以基于对t的分析实现分布式事务链路追踪:不同进程之间的rpc调用,通过比较rpc请求和rpc响应的特征签名x进行匹配。当进程a的某个rpc请求和响应的签名x分别等于进程b的某个rpc(即n)请求和响应的签名x时,认为m和n实际上是同一个rpc请求在客户端、服务端进程上的两次采集(具体如图3所示)。利用tcp sequence号匹配不同进程之上采集到的rpc会话,实现跨进程的链路追踪。最终实现整个分布式事务的全链路追踪。
[0061]
本发明所述方法,对使用对线程实现并发的应用程序可达到零侵扰的追踪效果。通过ebpf计算追踪id,与应用程序的开发框架、应用层通信协议无关,无需修改被追踪的应用程序的代码,无需重新编译应用程序,无需在应用层通信协议中插入额外的上下文信息,
不对应用通信内容做任何修改。能够零侵扰的实现任意使用多线程并发机制的应用程序的分布式事务全链路追踪。在本发明实现的一个实例中,支持追踪java、python语言使用任意多种rpc框架(使用了不同的应用层通信协议,包括有rfc标准的http等协议,以及应用程序私有定义的应用通信协议)编写的应用程序中的分布式事务。
[0062]
本发明实施例所述的分布式事务链路追踪方法,通过将内核虚拟机应用程序加载到相应操作系统的内核;内核虚拟机应用程序包含哈希表和自增计数器;当内核中的系统调用程序触发内核虚拟机应用程序执行时,获取内核虚拟机应用程序当前对应的线程号以及系统调用程序当前关联的第一socket地址;基于哈希表、自增计数器、第一socket地址及线程号,确定系统调用程序对应过程调用会话的追踪标识;系统调用程序为读系统调用程序或写系统调用程序;基于追踪标识对同一个进程内的分布式事务进行链路追踪。该方法适用于应用进程内部使用多线程实现并发的场景,能够零侵扰的实现多线程并发机制的应用程序的分布式事务全链路追踪,有效提高了分布式事务的追踪稳定性。
[0063]
与上述提供的一种分布式事务链路追踪方法相对应,本发明还提供一种分布式事务链路追踪系统。由于该系统的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的分布式事务链路追踪系统的实施例仅是示意性的。请参考图4所示,其为本发明实施例提供的一种分布式事务链路追踪系统的结构示意图。
[0064]
本发明所述的分布式事务链路追踪系统,具体包括如下部分:
[0065]
程序加载单元401,用于将内核虚拟机应用程序加载到相应操作系统的内核;其中,所述内核虚拟机应用程序包含哈希表和自增计数器;
[0066]
数据获取单元402,用于当所述内核中的系统调用程序触发所述内核虚拟机应用程序执行时,获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址;
[0067]
追踪标识确定单元403,用于基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识;其中,所述系统调用程序为读系统调用程序或写系统调用程序;
[0068]
链路追踪单元404,用于基于所述追踪标识对同一个进程内的分布式事务进行链路追踪。
[0069]
进一步的,所述追踪标识确定单元,具体用于:
[0070]
若所述内核虚拟机应用程序由所述读系统调用程序触发,则在所述哈希表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所述系统调用程序对应的过程调用会话的追踪标识;若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将所述线程号及对应的所述第一socket地址添加到所述哈希表。
[0071]
进一步的,所述追踪标识确定单元,具体还用于:
[0072]
若所述内核虚拟机应用程序由所述写系统调用程序触发,则在所述哈希表中查询是否存在与所述线程号对应的目标线程号;若是,则将所述自增计数器的当前值确定为所
述系统调用程序对应的过程调用会话的追踪标识;若所述系统调用程序当前关联的第二socket地址等于所述第一socket地址,则从所述哈希表中删除所述目标线程号;若在所述哈希表中不存在与所述线程号对应的目标线程号,则将所述自增计数器的当前值加1,得到所述自增计数器的新的值,并将所述新的值确定为所述系统调用程序对应的过程调用会话的追踪标识;将所述线程号及对应的所述第一socket地址添加到所述哈希表。
[0073]
进一步的,所述分布式事务是指同一个进程内部运行多线程实现并发时,所述多线程中任意一个线程在不同时间所执行的至少两个事务;其中,所述同一个进程内产生的对应相同追踪标识的所有过程调用会话属于同一个事务。
[0074]
进一步的,所述的分布式事务链路追踪系统,还包括:
[0075]
特征签名确定单元,用于根据所述第一socket地址中记录的传输控制协议序列号,确定过程调用请求和过程调用响应分别对应的特征签名;其中,所述过程调用会话包含所述过程调用请求和所述过程调用响应;
[0076]
所述链路追踪单元,还用于基于所述特征签名对不同进程内的分布式事务进行链路追踪。
[0077]
进一步的,所述链路追踪单元,具体用于:
[0078]
在不同进程之间的过程调用会话中,将所述过程调用请求和所述过程调用响应对应的特征签名进行匹配对比,根据匹配对比结果确定不同进程对应过程调用会话,以实现跨进程的链路追踪。
[0079]
进一步的,所述内核虚拟机应用程序为预先编译的ebpf字节码。
[0080]
本发明实施例所述的分布式事务链路追踪系统,通过将内核虚拟机应用程序加载到相应操作系统的内核;内核虚拟机应用程序包含哈希表和自增计数器;当内核中的系统调用程序触发内核虚拟机应用程序执行时,获取内核虚拟机应用程序当前对应的线程号以及系统调用程序当前关联的第一socket地址;基于哈希表、自增计数器、第一socket地址及线程号,确定系统调用程序对应过程调用会话的追踪标识;系统调用程序为读系统调用程序或写系统调用程序;基于追踪标识对同一个进程内的分布式事务进行链路追踪。该系统适用于应用进程内部使用多线程实现并发的场景,能够零侵扰的实现多线程并发机制的应用程序的分布式事务全链路追踪,有效提高了分布式事务的追踪稳定性。
[0081]
与上述提供的分布式事务链路追踪方法相对应,本发明还提供一种电子设备。由于该电子设备的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的电子设备仅是示意性的。如图5所示,其为本发明实施例公开的一种电子设备的实体结构示意图。该电子设备可以包括:处理器(processor)501、存储器(memory)502和通信总线503(即上述系统总线)以及查找引擎505,其中,处理器501,存储器502通过通信总线503完成相互间的通信,通过通信接口504与外部进行通信。处理器501可以调用存储器502中的逻辑指令,以执行分布式事务链路追踪方法,该方法包括:将内核虚拟机应用程序加载到相应操作系统的内核;其中,所述内核虚拟机应用程序包含哈希表和自增计数器;当所述内核中的系统调用程序触发所述内核虚拟机应用程序执行时,获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址;基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识;其中,所述系统调用程序为
读系统调用程序或写系统调用程序;基于所述追踪标识对同一个进程内的分布式事务进行链路追踪。
[0082]
此外,上述的存储器502中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:存储芯片、u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0083]
另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在处理器可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的分布式事务链路追踪方法。该方法包括:将内核虚拟机应用程序加载到相应操作系统的内核;其中,所述内核虚拟机应用程序包含哈希表和自增计数器;当所述内核中的系统调用程序触发所述内核虚拟机应用程序执行时,获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址;基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识;其中,所述系统调用程序为读系统调用程序或写系统调用程序;基于所述追踪标识对同一个进程内的分布式事务进行链路追踪。
[0084]
又一方面,本发明实施例还提供一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的分布式事务链路追踪方法。该方法包括:将内核虚拟机应用程序加载到相应操作系统的内核;其中,所述内核虚拟机应用程序包含哈希表和自增计数器;当所述内核中的系统调用程序触发所述内核虚拟机应用程序执行时,获取所述内核虚拟机应用程序当前对应的线程号以及所述系统调用程序当前关联的第一socket地址;基于所述哈希表、所述自增计数器、所述第一socket地址以及所述线程号,确定所述系统调用程序对应过程调用会话的追踪标识;其中,所述系统调用程序为读系统调用程序或写系统调用程序;基于所述追踪标识对同一个进程内的分布式事务进行链路追踪。
[0085]
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(mo)等)、光学存储器(例如cd、dvd、bd、hvd等)、以及半导体存储器(例如rom、eprom、eeprom、非易失性存储器(nand flash)、固态硬盘(ssd))等。
[0086]
以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0087]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可
借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0088]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1