CN109992465B - 服务追踪方法、装置和计算机可读存储介质 - Google Patents
服务追踪方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN109992465B CN109992465B CN201711466851.5A CN201711466851A CN109992465B CN 109992465 B CN109992465 B CN 109992465B CN 201711466851 A CN201711466851 A CN 201711466851A CN 109992465 B CN109992465 B CN 109992465B
- Authority
- CN
- China
- Prior art keywords
- call
- chain
- service
- sub
- thread
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 84
- 230000004044 response Effects 0.000 claims abstract description 57
- 230000006870 function Effects 0.000 claims description 55
- 230000008569 process Effects 0.000 claims description 18
- 238000004891 communication Methods 0.000 claims description 15
- 238000000605 extraction Methods 0.000 claims description 15
- 238000002347 injection Methods 0.000 claims description 13
- 239000007924 injection Substances 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 10
- 238000005516 engineering process Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 33
- 239000000243 solution Substances 0.000 description 4
- 230000010354 integration Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/544—Remote
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Telephonic Communication Services (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本公开提出一种服务追踪方法、装置和计算机可读存储介质,涉及互联网技术领域。本公开的一种服务追踪方法,包括:在主服务请求输入端:获取来自客户端的远程过程调用RPC请求数据包,提取主链信息;生成与RPC请求数据包对应的调用链上下文缓存,生成主链追踪信息回写至RPC请求数据包,并写入调用链上下文缓存中;绑定调用链上下文缓存与线程标识;在主服务应答输出端:拦截向客户端的应答数据包,写入主链追踪信息且将应答数据包回写至输出流,并将主链追踪信息写入调用链上下文缓存中;存储调用链上下文缓存中的内容作为调用日志。通过这样的方法,无需侵入应用或为各个RPC框架定制集成服务链跟踪模块,实现对服务调用的普适性跟踪。
Description
技术领域
本公开涉及互联网技术领域,特别是一种服务追踪方法、装置和计算机可读存储介质。
背景技术
微服务应用涉及大量细粒度微服务远程调用,服务调用链追踪技术可以采集端到端服务调用涉及的每个远程调用环节的性能数据,是微服务应用快速定位性能瓶颈与故障点的关键技术。
目前分布式服务链追踪方法主要有两种:
在应用层集成的方式,提供专用的服务调用追踪API(Application ProgrammingInterface,应用程序编程接口);
在RPC(Remote Procedure Call,远程过程调用)框架层集成的方式,通过扩展分布式RPC框架,在RPC框架中集成服务调用追踪能力。
发明内容
发明人发现,相关技术中,在应用层集成的方式需要在追踪点中嵌入追踪API的调用代码,对应用代码有侵入性;在RPC框架层集成的方式需要针对每个RPC框架单独定制,通用性较差,也增加了RPC框架的升级难度,例如在Dubbo、Thrift、GRPC等框架中集成分布式跟踪***Zipkin服务链追踪模块,需要对这些RPC框架逐一进行定制修改。
本公开的一个目的在于提出一种对应用代码透明、适用于各类RPC框架的服务调用跟踪机制。
根据本公开的一个方面,提出一种服务追踪方法,包括:在主服务请求输入端:获取来自客户端的远程过程调用RPC请求数据包,提取主链信息;生成与RPC请求数据包对应的调用链上下文缓存,生成主链追踪信息回写至RPC请求数据包,并写入调用链上下文缓存中;绑定调用链上下文缓存与线程标识,以便与在子服务调用中,确定将子链追踪信息写入的调用链上下文缓存,其中,通过线程间的层次关系确定子服务与主服务的调用关系;在主服务应答输出端:拦截向客户端输出的应答数据包,写入主链追踪信息且将应答数据包回写至输出流,并将主链追踪信息写入调用链上下文缓存中;存储调用链上下文缓存中的内容作为调用日志。
可选地,在子服务调用中,确定将子链追踪信息写入的调用链上下文缓存包括:当主链或子链通过子链调用请求调用子服务时,在子服务调用请求输入端:根据线程标识获取调用链上下文缓存;生成子调用追踪信息并写入调用链上下文缓存中;向子链调用请求中写入子调用追踪信息;在子服务调用的应答输出端:从子服务应答中提取子调用追踪信息,并将子调用追踪信息写入调用链上下文缓存中。
可选地,还包括:当收到RPC请求数据包后,判断是否已分配当前处理线程;若已分配当前处理线程,则获取线程标识;若未分配当前处理线程,则分配线程,并记录线程标识。
可选地,主服务执行过程中,单个主服务调用一个或多个子服务。
可选地,子服务执行过程中,单个子服务调用一个或多个子服务。
可选地,主链追踪信息包括通信五元组、服务调用链标识、父调用标识、当前调用标识。
可选地,子调用追踪信息包括服务调用链标识、当前调用标识、子调用标识。
可选地,在主服务请求输入端,还将主服务调用开始时间写入调用链上下文缓存。
可选地,在主服务应答输出端,还将主服务调用结束时间写入调用链上下文缓存。
可选地,在子链调用请求输入端,还将子服务调用开始时间写入调用链上下文缓存。
可选地,在子链调用应答输出端,还将子服务结束调用时间写入调用链上下文缓存。
可选地,在输入端和在输出端通过钩子技术对接口函数和/或线程函数进行扩展,通过钩子函数代替原有的库函数,在主服务和/或子服务的库函数的处理前和/或处理后***钩子函数,执行以下功能中的一种或多种:连接服务端RPC连接请求;拦截客户端RPC应答数据或服务端RPC请求数据;拦截客户端RPC请求数据或服务端RPC应答数据;拦截子线程创建过程,建立线程标识的树型结构,用全路径的线程ID描述当前线程在整个线程树的位置;拦截线程结束事件;从线程标识的树型结构中删除对应的线程节点。
通过这样的方法,能够在主服务请求输入端提取主链信息,并记录为服务提供的线程标识,通过对该线程的跟踪记录服务调用情况,并在主服务应答输出端拦截流量提取信息,从而无需侵入应用代码或为各个RPC框架定制集成服务链跟踪模块,实现对服务调用的普适性跟踪。
根据本公开的另一个方面,提出一种服务追踪装置,包括:主链提取单元,用于在主服务请求输入端获取来自客户端的远程过程调用RPC请求数据包,提取主链信息;调用链管理单元,用于生成与RPC请求数据包对应的调用链上下文缓存,生成主链追踪信息并将主链追踪信息写入调用链上下文缓存中;绑定调用链上下文缓存与线程标识,以便与在子服务调用中,确定将子链追踪信息写入的调用链上下文缓存,其中,通过线程间的层次关系确定子服务与主服务的调用关系;在主服务应答输出端将主链追踪信息写入调用链上下文缓存中;主链注入单元,用于在主服务应答输出端,拦截向客户端的应答数据包,写入主链追踪信息并将应答数据包回写至输出流;日志生成单元,用于存储调用链上下文缓存中的内容作为调用日志。
可选地,还包括:子链注入单元,用于当主链或子链通过子链调用请求调用子服务时,在子服务调用请求输入端,根据线程标识获取调用链上下文缓存,并向子链调用请求中写入子调用追踪信息;调用链管理单元用于生成子调用追踪信息并写入调用链上下文缓存中,且将从子服务应答中提取子调用追踪信息写入调用链上下文缓存中;装置还包括子链提取单元,用于在子服务调用的应答输出端,从子服务应答中提取子调用追踪信息。
可选地,主服务执行过程中,单个主服务调用一个或多个子服务。
可选地,子服务执行过程中,单个子服务调用一个或多个子服务。
可选地,主链追踪信息包括通信五元组、服务调用链标识、父调用标识、当前调用标识。
可选地,子调用追踪信息包括服务调用链标识、当前调用标识、子调用标识。
可选地,调用链管理单元还用于执行以下至少一种操作:在主服务请求输入端,将主服务调用开始时间写入调用链上下文缓存;在主服务应答输出端,将主服务调用结束时间写入调用链上下文缓存;在子链调用请求输入端,将子服务调用开始时间写入调用链上下文缓存;在子链调用应答输出端,将子服务结束调用时间写入调用链上下文缓存。
可选地,在输入端和在输出端通过钩子技术对接口函数和/或线程函数进行扩展,通过钩子函数代替原有的库函数,在主服务和/或子服务的库函数的处理前和/或处理后***钩子函数,执行以下功能中的一种或多种:连接服务端RPC连接请求;拦截客户端RPC应答数据或服务端RPC请求数据;拦截客户端RPC请求数据或服务端RPC应答数据;拦截子线程创建过程,建立线程标识的树型结构,用全路径的线程ID描述当前线程在整个线程树的位置;拦截线程结束事件;从线程标识的树型结构中删除对应的线程节点。
根据本公开的又一方面,提出一种服务追踪装置,包括:存储器;以及耦接至存储器的处理器,处理器被配置为基于存储在存储器的指令执行上文中任意一种服务追踪方法。
这样的服务追踪装置能够在主服务请求输入端提取主链信息,并记录为服务提供的线程标识,通过对该线程的跟踪记录服务调用情况,并在主服务应答输出端拦截流量提取信息,从而无需侵入应用代码或为各个RPC框架定制集成服务链跟踪模块,实现对服务调用的普适性跟踪。
根据本公开的再一方面,提出一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现上文中任意一种服务追踪方法的步骤。
通过执行这样的计算机可读存储介质上的指令,能够在主服务请求输入端提取主链信息,并记录为服务提供的线程标识,通过对该线程的跟踪记录服务调用情况,并在主服务应答输出端拦截流量提取信息,从而无需侵入应用代码或为各个RPC框架定制集成服务链跟踪模块,实现对服务调用的普适性跟踪。
附图说明
此处所说明的附图用来提供对本公开的进一步理解,构成本公开的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:
图1为本公开的服务追踪方法的一个实施例的流程图。
图2为本公开的服务追踪方法中服务链的一个实施例的示意图。
图3为本公开的服务追踪方法的另一个实施例的流程图。
图4为本公开的服务追踪方法的应用场景的一个实施例的示意图。
图5为本公开的服务追踪方法中钩子框架的一个实施例的示意图。
图6A为本公开的服务链追踪方法中接口Socket的连接Connect钩子的一个实施例的执行逻辑流程图。
图6B为本公开的服务链追踪方法中Socket的接受Accept钩子的一个实施例的执行逻辑流程图。
图6C为本公开的服务链追踪方法中Socket的读取Read钩子的一个实施例的执行逻辑流程图。
图6D为本公开的服务链追踪方法中Socket的写入Write钩子的一个实施例的执行逻辑流程图。
图7A为本公开的服务链追踪方法中处理服务端调用请求的一个实施例的流程图。
图7B为本公开的服务链追踪方法中处理客户端调用应答的一个实施例的流程图。
图7C为本公开的服务链追踪方法中处理服务端调用应答的一个实施例的流程图。
图7D为本公开的服务链追踪方法中处理客户端调用请求的一个实施例的流程图。
图8A为本公开的服务链追踪方法中线程的新建Create钩子的一个实施例的执行逻辑流程图。
图8B为本公开的服务链追踪方法中线程的加入Join钩子的一个实施例的执行逻辑流程图。
图8C为本公开的服务链追踪方法中线程的关闭Exit钩子的一个实施例的执行逻辑流程图。
图9为本公开的服务追踪装置的一个实施例的示意图。
图10为本公开的服务追踪装置的另一个实施例的示意图。
图11为本公开的服务追踪装置的又一个实施例的示意图。
图12为本公开的服务追踪装置的再一个实施例的示意图。
图13为本公开的服务追踪装置的另外一个实施例的示意图。
具体实施方式
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
本公开的服务追踪方法的一个实施例的流程图如图1所示。
在步骤101中,获取来自客户端的RPC请求数据包,提取主链信息。在一个实施例中,可以拦截输入流,提取其中的RPC请求数据包,从包头中获取主链信息。在一个实施例中,可以通过拦截本地服务的Socket输入流获取来自客户端的远程过程调用RPC请求数据包。
在步骤102中,生成与RPC请求数据包对应的调用链上下文缓存,生成主链追踪信息回写至RPC请求数据包,并写入调用链上下文缓存中。在一个实施例中,主链追踪信息包括通信五元组、服务调用链标识、父调用标识、当前调用标识。在一个实施例中,可以提取主RPC调用追踪信息,并创建主RPC调用会话。
在步骤103中,绑定调用链上下文缓存与线程标识,以便与在子服务调用中,确定将子链追踪信息写入的调用链上下文缓存。在一个实施例中,可以绑定服务端连接ID、主RPC会话线程ID和主RPC调用追踪信息。在一个实施例中,可以判断是否已分配线程,若未分配线程,则分配线程并记录线程标识。
在一个实施例中,考虑处理RPC请求的线程可能与处理RPC应答的线程不同。同一个RPC会话的请求与应答可以通过同一个Socket服务的连接ID关联。不同的RPC会话可以通过会话线程的层次关系关联,子会话的处理线程必然是主会话线程本身或者是主会话线程的子孙线程。因此,根据线程间的层次关系能够确定调用的子服务,从而实现将父、子调用相关联。
上述步骤101~103为在主服务请求输入端执行的操作。通过线程钩子拦截会话线程创建过程,建立本地服务所创建的RPC会话线程之间的层次关系。下文中步骤104、105为在主服务应答输出端执行的操作。
在步骤104中,拦截向客户端的应答数据包,写入主链追踪信息且将应答数据包回写至输出流,并将主链追踪信息写入调用链上下文缓存中。在一个实施例中,可以拦截客户端的输出流,从中提取应答数据包,并将主链追踪信息写入包头中,再将应答数据包写回输出流。在一个实施例中,可以通过拦截本地服务的Socket输出流获取主RPC调用会话的应答数据包,基于关联的主RPC会话生成主RPC调用链记录,向主RPC应答数据包注入主RPC调用追踪信息,关闭主RPC调用会话。
在步骤105中,存储调用链上下文缓存中的内容作为调用日志。调用链上下文缓存中包括主链追踪信息,以及调用子链时写入的子调用追踪信息。
通过这样的方法,能够在主服务请求输入端提取主链信息,并记录为服务提供的线程标识,通过对该线程的跟踪记录服务调用情况,并在主服务应答输出端拦截流量提取信息,从而无需侵入应用代码或为各个RPC框架定制集成服务链跟踪模块,实现对服务调用的普适性跟踪。
在一个实施例中,服务链可以如图3所示,由一组具有层次关系的调用对象构成,调用对象由调用追踪信息(调用链ID、调用ID)、调用时间(开始时间、结束时间)和其他扩展信息构成,如服务名等。
在主链执行过程中,可能会调用一个或多个子服务,在子服务执行中,可能会输出结果给主链,也可能会继续调用其他子服务。本公开的服务追踪方法的另一个实施例的流程图如图2所示。
在步骤201中,获取来自客户端的RPC请求数据包,提取主链信息。在一个实施例中,可以利用Glibc钩子获取请求数据包中的主链信息。
在步骤202中,生成与RPC请求数据包对应的调用链上下文缓存和主链追踪信息,将主链追踪信息写入调用链上下文缓存中。在一个实施例中,还可以将主服务调用开始时间写入调用链上下文缓存中。
在步骤203中,绑定调用链上下文缓存与线程标识。
在步骤204中,当主链或子链通过子链调用请求调用子服务时,在子服务调用请求输入端,根据线程标识以及线程间的层次关系获取调用链上下文缓存。
在步骤205中,生成子调用追踪信息并写入调用链上下文缓存中。在一个实施例中,还可以将子服务调用开始时间写入调用链上下文缓存中。在一个实施例中,子调用追踪信息可以包括服务调用链标识、当前调用标识、子调用标识。
在步骤206中,向子链调用请求中写入子调用追踪信息。在一个实施例中,可以通过拦截本地服务的Socket输出流获取由本地服务发起的子RPC会话请求,创建子RPC调用会话,通过会话线程的层次关系将子RPC会话与主RPC会话关联,向子RPC会话请求数据包***子RPC调用追踪信息。
在步骤207中,在子服务调用的应答输出端,从子服务应答中提取子调用追踪信息,并将子调用追踪信息写入调用链上下文缓存中。在一个实施例中,还可以将子服务结束调用时间写入调用链上下文缓存中。在一个实施例中,可以通过拦截本地服务的Socket输入流获取由远程服务返回的子RPC调用会话应答,提取子RPC调用追踪信息,基于关联的子RPC会话生成子RPC调用记录,关闭子RPC调用会话。
在步骤208中,判断子服务是否调用其他子服务。若子服务还需要调用其他子服务,则执行步骤204;若回到主链,则执行步骤209。
在步骤209中,拦截向客户端的应答数据包,写入主链追踪信息且将应答数据包回写至输出流,并将主链追踪信息写入调用链上下文缓存中。在一个实施例中,还可以将主服务调用结束时间写入调用链上下文缓存中。
在步骤210中,存储调用链上下文缓存中的内容作为调用日志。调用链上下文缓存中包括主链追踪信息,以及调用子链时写入的子调用追踪信息。
通过这样的方法,能够跟随主链、子链的调用过程,以线程标识为索引将服务调用过程、时间等信息记录在调用链上下文缓存中,进而生成日志,从而在不影响服务正常执行过程的前提下实现对服务链的跟踪,适用于各种RPC框架,且不侵入应用代码,有利于推广应用。
在一个实施例中,本发明的应用场景可以如图4所示,一个有4个服务的分布式调用场景中:Service1采用NodeJS引擎,通过JSON RPC框架提供基于HTTP的JSON RPC服务;Service2采用JVM引擎,通过SpringBoot框架提供REST API服务;Service3采用Go语言引擎,通过GRPC框架提供GRPC服务;Service4通过JVM引擎,通过Dubbox框架提供REST API服务。
采用现有Zipkin等框架注入型方案,需要分别对JSON RPC、SrpingBoot、GRPC和Dubbox进行定制扩展,在多技术栈情况下难以维护。
通过采用本公开实施例中的方法,能够利用Glibc钩子扩展Glibc的Socket和线程处理,充分利用Linux平台都采用Glibc封装***内核调用的特点,实现与具体应用和技术框架无关的服务链追踪。在一个实施例中,可以通过钩子技术对Glibc的Socket和线程的相关处理函数进行扩展,用具有相同函数声明的钩子函数代替原有的库函数,在原有库函数的处理前或处理后***自定义的处理逻辑。采用的Glibc钩子方法可以包括:
1)LD_PRELOAD方法:通过环境变量LD_PRELOAD定义钩子库文件,在加载glibc类时用钩子库文件动态代替原有的库文件。
2)容器镜像方法:通过Docker容器镜像打包添加了钩子的Glibc库,在容器启动时自动加载相应的Glibc钩子。
在一个实施例中,Glibc钩子包括Socket的Connect钩子、Accept钩子、Read钩子、Write钩子以及线程Thread的Create钩子、Join钩子和Exit钩子。Connect钩子用于拦截客户端RPC连接请求,Accept钩子用于连接服务端RPC连接请求,Read钩子用于拦截客户端RPC应答数据或服务端RPC请求数据,Write钩子用于拦截客户端RPC请求数据或服务端RPC应答数据,线程的Create钩子拦截子线程创建过程,建立线程ID的树型结构,用全路径的线程ID描述当前线程在整个线程树的位置,Join钩子和Exit钩子拦截线程结束事件,从建立的线程ID的树型结构中删除对应的线程节点。如图5所示,各种Glibc钩子位于上层服务与内核Linux Kernel之间,实现与具体应用和技术框架无关的服务链追踪。
在一个实施例中,Socket的Connect钩子的一个实施例的执行逻辑流程图可以如图6A所示。
在步骤601中,客户端向服务器发起连接请求。
在步骤602中,调用Socket Connect钩子。
在步骤603中,判断目标端口是否为服务端口。若是服务端口,则执行步骤604;若不是服务端口,则执行步骤607。
在步骤604中,获取当前的线程的ID。
在步骤605中,调用服务原有的函数库中的Socket Connect函数,得到客户端连接ID。
在步骤606中,将当前线程的ID与客户端连接ID相绑定,继而执行步骤608。
在步骤607中,调用服务原有的函数库中的Socket Connect函数,得到客户端连接ID,继而执行步骤608。
在步骤608中,返回客户端连接ID。
在一个实施例中,Socket的Accept钩子的一个实施例的执行逻辑流程图可以如图6B所示。
在步骤621中,服务器接收来自客户端的连接请求。
在步骤622中,调用Socket Accept钩子。
在步骤623中,判断目标端口是否为服务端口。若是服务端口,则执行步骤624;若不是服务端口,则执行步骤627。
在步骤624中,获取当前的线程的ID。
在步骤625中,调用服务原有的函数库中的Socket Accept函数,得到服务端连接ID。
在步骤626中,将当前线程的ID与服务端连接ID相绑定,继而执行步骤608。
在步骤627中,调用服务原有的函数库中的Socket Accept函数,得到服务端连接ID,继而执行步骤608。
在步骤628中,返回服务端连接ID。
在一个实施例中,Socket的Read钩子的一个实施例的执行逻辑流程图可以如图6C所示。
在步骤641中,调用Socket Read钩子。
在步骤642中,获取当前线程的ID。
在步骤643中,调用服务原有的函数库中的Socket Read函数,读取输入字节流。
在步骤644中,判断服务端连接ID是否属于合法服务的类型。若是合法服务的服务端连接ID,则执行步骤645;若不属于合法服务的类型,则执行步骤646。在一个实施例中,若有其他情况,则结束,不执行其他步骤。
在步骤645中,处理服务端调用请求。
在步骤646中,处理客户端调用应答。
在一个实施例中,Socket的Write钩子的一个实施例的执行逻辑流程图可以如图6D所示。
在步骤661中,调用Socket Write钩子。
在步骤662中,获取当前线程的ID。
在步骤663中,判断服务端连接ID是否属于合法服务的类型。若是合法服务的服务端连接ID,则执行步骤664;若不属于合法服务的类型,则执行步骤665。在一个实施例中,若有其他情况,则执行步骤666。
在步骤664中,处理服务端调用应答,生成输出字节流。
在步骤665中,处理客户端调用请求,生成输出字节流。
在步骤666中,调用服务原有的函数库中的Socket Write函数,写入输出字节流。
在一个实施例中,处理服务端调用请求的一个实施例的流程图如图7A所示。
在步骤701中,根据服务端端口号和对字节流的初步扫描识别RPC协议类型。
在步骤702中,调用对应的RPC协议解析器解析RPC请求包头。
在步骤703中,从RPC请求包头读取调用链信息。
在步骤704中,判断是否存在调用链信息。若存在调用链信息,则指向步骤705;若不存在调用链信息,则执行步骤706。
在步骤705中,创建并保存服务端调用会话,会话信息包括服务端连接ID、服务协议、线程ID、调用链ID、调用ID、会话开始时间等。
在步骤706中,创建调用链对象,进而执行步骤705。
在一个实施例中,处理客户端调用应答的一个实施例的流程图如图7B所示。
在步骤721中,用客户端连接ID检索客户端调用会话。
在步骤722中,判断是否存在客户端调用会话。在存在客户端调用会话的情况下,执行步骤723。
在步骤723中,调用对应的RPC协议解析器解析RPC应答包头。
在步骤724中,从RPC应答包头读取调用链信息。
在步骤725中,判断是否存在调用链信息。若存在调用链信息,则执行步骤726;若不存在调用链信息,则执行步骤728。
在步骤726中,保存客户端调用对象。
在步骤727中,关闭客户端调用会话,流程结束。
在步骤728中,记录客户端应答异常,进而执行步骤727。
在一个实施例中,处理服务端调用应答的一个实施例的流程图如图7C所示。
在步骤741中,用服务端连接ID检索服务端调用会话。
在步骤742中,判断是否存在服务端调用会话。若存在服务端调用会话,则执行步骤743,若不存在748。
在步骤743中,调用对应的RPC协议解析器解析RPC应答包头。
在步骤744中,向RPC应答包头写入调用链信息。
在步骤745中,保存服务端调用对象。
在步骤746中,关闭服务端调用会话。
在步骤747中,返回注入调用链信息的字节流,流程结束。
在步骤748中,返回原始字节流,流程结束。
在一个实施例中,处理客户端调用请求的一个实施例的流程图如图7D所示。
在步骤761中,判断目标端口是否为服务端口。若是服务端口,则执行步骤762;若不是服务端口,则执行步骤764。
在步骤762中,初步扫描字节流,确定所属的RPC协议。
在步骤763中,判断是否存在匹配的RPC解析器。若存在,则执行步骤765;否则,执行步骤764。
在步骤764中,返回原始字节流,流程结束。
在步骤765中,调用对应的RPC协议解析器解析RPC请求包头。
在步骤766中,获取当前线程ID,查询与当前线程最匹配的服务端调用会话。
在步骤767中,判断是否存在服务端调用会话。若存在服务端调用会话,则执行步骤768;否则,执行步骤769。
在步骤768中,创建客户端调用会话,绑定服务端调用会话,进而执行步骤771。
在步骤769中,创建新的调用链对象。
在步骤770中,创建客户端调用会话,绑定调用链,进而执行步骤771。
在步骤771中,将客户端调用链信息写入RPC头。
在步骤772中,返回写入了调用链信息的字节流。
在一个实施例中,线程的Create钩子的一个实施例的执行逻辑流程图如8A所示。
在步骤801中,调用线程Create钩子。
在步骤802中,获取当前线程的全路径ID。
在步骤803中,调用原生线程Create方法,得到子线程ID。
在步骤804中,生成子线程的全路径ID。
在步骤805中,将子线程的全路径ID写入全局哈希表。
在一个实施例中,线程的Join钩子的一个实施例的执行逻辑流程图如8B所示。
在步骤811中,调用线程Join钩子。
在步骤812中,调用原生线程Join函数。
在步骤813中,从全局哈希表中删除该线程的全路径ID。
在一个实施例中,线程的Exit钩子的一个实施例的执行逻辑流程图如8C所示。
在步骤821中,调用线程Exit钩子。
在步骤822中,调用原生线程Exit函数。
在步骤823中,从全局哈希表中删除该线程的全路径ID。通过上述实施例中的流程和处理逻辑,能够实现通过位于上层服务与内核Linux Kernel之间的Glibc钩子达到与具体应用和技术框架无关的服务链追踪的目的。
本公开的服务追踪装置的一个实施例的示意图如图9所示。主链提取单元901能够在主服务请求输入端获取来自客户端的远程过程调用RPC请求数据包,提取主链信息。在一个实施例中,主链提取单元901可以拦截输入流,提取其中的RPC请求数据包,从包头中获取主链信息。
调用链管理单元903能够生成与RPC请求数据包对应的调用链上下文缓存和主链追踪信息,将主链追踪信息写入调用链上下文缓存中;绑定调用链上下文缓存与线程标识;在主服务应答输出端将主链信息写入调用链上下文缓存中。在一个实施例中,主链信息包括通信五元组、服务调用链标识、父调用标识、当前调用标识。
主链注入单元902能够在主服务应答输出端,拦截向客户端的应答数据包,写入主链追踪信息并将应答数据包回写至输出流。
日志生成单元904能够存储调用链上下文缓存中的内容作为调用日志。
这样的服务追踪装置能够在主服务请求输入端提取主链信息,并记录为服务提供的线程标识,通过该线程的跟踪记录服务调用情况,并在主服务应答输出端拦截流量并提取信息,从而无需侵入应用或为各个RPC框架定制集成服务链跟踪模块,实现对服务调用的普适性跟踪。
本公开的服务追踪装置的另一个实施例的示意图如图10所示。主链提取单元1001、主链注入单元1002和日志生成单元1004的结构和功能与图3所示实施例中相似。服务追踪装置还包括子链注入单元1005和子链提取单元1006。子链注入单元1005能够当主链或子链通过子链调用请求调用子服务时,在子服务调用请求输入端,根据线程标识以及线程间的层次关系获取调用链上下文缓存,并向子链调用请求中写入调用链管理单元1003生成的子调用追踪信息。子链提取单元1006能够在子服务调用的应答输出端,从子服务应答中提取子调用追踪信息,并将子调用追踪信息写入调用链上下文缓存中。调用链管理单元1003还能够生成子调用追踪信息并写入调用链上下文缓存中,且将从子服务应答中提取子调用追踪信息写入调用链上下文缓存中。
这样的服务追踪装置能够跟随主链、子链的调用过程,以线程标识为索引将服务调用过程、时间等信息记录在调用链上下文缓存中,进而生成日志,从而在不影响服务正常执行过程的前提下实现对服务链的跟踪,适用于各种RPC框架,且不侵入应用代码,有利于推广应用。
本公开的服务追踪装置的又一个实施例的示意图如图11所示。当收到客户端的RPC请求数据包后,可以按照左侧箭头所示方向调用主服务、子服务执行,并最终反馈给客户端。服务追踪装置可以包括Glibc钩子管理器1101、调用链管理单元1103和日志生成单元1104。Glibc钩子管理器1101可以包括主链提取单元、主链注入单元、子链注入单元和子链提取单元。
主流提取单元能够拦截指定端口的服务端接口Socket输入流,从输入流数据中解析RPC请求数据包,从RPC请求数据包中提取服务客户端传入的主链信息,包括通信五元组(客户端IP、客户端端口、服务端IP、服务端端口、协议)、服务调用链ID(TraceID)、父调用ID(ParentSpanID)、当前调用ID(SpanID)等,并将RPC通信五元组、调用链ID、服务调用ID、当前调用ID、当前处理线程ID和服务调用开始时间RPC_START_TIME写入调用链上下文缓存中。
主链注入单元能够拦截服务端Socket输出流,从数据包头部提取RPC通信五元组,获取当前处理线程ID,如果调用链上下文缓存中存在RPC通信五元组+线程ID的调用链上下文记录,则进一步从输出流中解析RPC应答数据包,并向RPC应答数据包的包头中写入主链追踪信息,包括服务调用链ID、父调用ID和当前调用ID等,向RPC应答数据包回写到服务的Socket输出流中。并生成主链追踪记录,包括服务ID、通信五元组、服务调用链ID、父调用ID、当前调用ID、服务调用开始时间、服务调用结束时间等,主链追踪记录也可用单独的调用链记录模块处理。
子链注入单元能够拦截当前服务的客户端Socket输出流,获取当前线程ID,获取与当前线程ID绑定的调用链上下文信息,如果存在对应的调用链上下文,则从数据包头提取RPC通信五元组和RPC请求数据,如果RPC请求数据包格式合法,则向RPC请求数据包写入子调用追踪信息,包括服务链ID、当前调用ID(作为子调用的服务调用ID)、子调用ID(格式为当前调用ID+.n,n为该服务的第n个子调用,n为正整数,例如主调用ID为“1.1”,第一个子调用的ID为“1.1.1”,第二个子调用的ID为“1.1.2”),将RPC请求数据包回写到客户端Socket输出流中,将子RPC通信五元组、服务链ID、当前调用ID、子调用ID、子调用开始时间写入调用链上下文缓存中。
子链提取单元能够拦截客户端Socket输入流,从数据包头部提取子RPC通信五元组,获取当前处理线程ID,如果调用链上下文缓存中存在子RPC通信五元组+线程ID的调用链上下文记录,则进一步解析子调用的RPC应答数据包,从中提取追踪子调用的服务调用链ID、父调用ID、子调用ID,并生成和记录子调用记录,包括子RPC通信五元组、服务调用链ID、服调用ID、子调用ID、子服务调用开始时间、子服务调用结束时间等。
在一个实施例中,Glibc钩子管理器1101可以通过Socket的Connect钩子、Accept钩子、Read钩子、Write钩子以及线程Thread的Create钩子、Join钩子和Exit钩子实现其功能,利用Linux平台都采用Glibc封装***内核调用的特点,实现对包括JSON RPC、SrpingBoot、GRPC和Dubbox在内的多种技术栈的服务链追踪。
调用链管理单元1103注入到Java线程处理函数中(如Thread.run),能够建立当前服务处理线程或当前服务处理线程的子线程与调用链上下文信息的绑定关系。
日志生成单元1104能够随着调用链上下文信息的增加保存日志信息,或在服务结束后存储调用链上下文信息作为日志。
这样的服务追踪装置没有代码侵入性,无需修改服务代码就可以实现服务链追踪;无需定制RPC框架,通过底层Socket追踪服务链,可以支持各类基于Java的RPC框架;能够灵活控制服务链追踪过程,可以通过Glibc钩子动态加载、卸载、启动和停止指定微服务的服务追踪功能。
本公开服务追踪装置的一个实施例的结构示意图如图12所示。服务追踪装置包括存储器1201和处理器1202。其中:存储器1201可以是磁盘、闪存或其它任何非易失性存储介质。存储器用于存储上文中服务追踪方法的对应实施例中的指令。处理器1202耦接至存储器1201,可以作为一个或多个集成电路来实施,例如微处理器或微控制器。该处理器1202用于执行存储器中存储的指令,能够实现对服务调用的普适性跟踪。
在一个实施例中,还可以如图13所示,服务追踪装置1300包括存储器1301和处理器1302。处理器1302通过BUS总线1303耦合至存储器1301。该服务追踪装置1300还可以通过存储接口1304连接至外部存储装置1305以便调用外部数据,还可以通过网络接口1306连接至网络或者另外一台计算机***(未标出)。此处不再进行详细介绍。
在该实施例中,通过存储器存储数据指令,再通过处理器处理上述指令,能够实现对服务调用的普适性跟踪。
在另一个实施例中,一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现服务追踪方法对应实施例中的方法的步骤。本领域内的技术人员应明白,本公开的实施例可提供为方法、装置、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开实施例的方法、设备(***)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
至此,已经详细描述了本公开。为了避免遮蔽本公开的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。
可能以许多方式来实现本公开的方法以及装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法以及装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
最后应当说明的是:以上实施例仅用以说明本公开的技术方案而非对其限制;尽管参照较佳实施例对本公开进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本公开的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本公开技术方案的精神,其均应涵盖在本公开请求保护的技术方案范围当中。
Claims (13)
1.一种服务追踪方法,包括:
在主服务请求输入端:
获取来自客户端的远程过程调用RPC请求数据包,提取主链信息;
生成与所述RPC请求数据包对应的调用链上下文缓存,
生成主链追踪信息回写至所述RPC请求数据包,并写入所述调用链上下文缓存中;
绑定所述调用链上下文缓存与线程标识,以便与在子服务调用中,确定将子链追踪信息写入的调用链上下文缓存,
其中,通过线程间的层次关系确定子服务与主服务的调用关系;
在主服务应答输出端:
拦截向客户端输出的应答数据包,写入主链追踪信息且将所述应答数据包回写至输出流,并将所述主链追踪信息写入调用链上下文缓存中;
存储所述调用链上下文缓存中的内容作为调用日志;
其中,所述在子服务调用中,确定将子链追踪信息写入的调用链上下文缓存包括:
当主链或子链通过子链调用请求调用子服务时,在子服务调用请求输入端:
根据线程标识获取所述调用链上下文缓存;
生成子调用追踪信息并写入所述调用链上下文缓存中;
向子链调用请求中写入子调用追踪信息;
在子服务调用的应答输出端:
从子服务应答中提取子调用追踪信息,并将所述子调用追踪信息写入所述调用链上下文缓存中。
2.根据权利要求1所述的方法,还包括:
当收到所述RPC请求数据包后,判断是否已分配当前处理线程;
若已分配当前处理线程,则获取线程标识;
若未分配当前处理线程,则分配线程,并记录线程标识。
3.根据权利要求1所述的方法,其中,主服务执行过程中,单个主服务调用一个或多个子服务;和/或,
子服务执行过程中,单个子服务调用一个或多个子服务。
4.根据权利要求1~3任意一项所述的方法,其中,
所述主链追踪信息包括通信五元组、服务调用链标识、父调用标识、当前调用标识;
所述子调用追踪信息包括服务调用链标识、当前调用标识、子调用标识。
5.根据权利要求1~3任意一项所述的方法,其中,
在主服务请求输入端,还将主服务调用开始时间写入所述调用链上下文缓存中;
在主服务应答输出端,还将主服务调用结束时间写入所述调用链上下文缓存中;
在子链调用请求输入端,还将子服务调用开始时间写入所述调用链上下文缓存中;和/或,
在子链调用应答输出端,还将子服务结束调用时间写入所述调用链上下文缓存中。
6.根据权利要求1或2所述的方法,其中,在输入端和在输出端通过钩子技术对接口函数和/或线程函数进行扩展,通过钩子函数代替原有的库函数,在主服务和/或子服务的库函数的处理前和/或处理后***钩子函数,执行以下功能中的一种或多种:
连接服务端RPC连接请求;
拦截客户端RPC应答数据或服务端RPC请求数据;
拦截客户端RPC请求数据或服务端RPC应答数据;
拦截子线程创建过程,建立线程标识的树型结构,用全路径的线程ID描述当前线程在整个线程树的位置;
拦截线程结束事件;
从线程标识的树型结构中删除对应的线程节点。
7.一种服务追踪装置,包括:
主链提取单元,用于在主服务请求输入端获取来自客户端的远程过程调用RPC请求数据包,提取主链信息,向RPC请求数据包写入主链追踪信息;
调用链管理单元,用于生成与所述RPC请求数据包对应的调用链上下文缓存,生成主链追踪信息并将主链追踪信息写入所述调用链上下文缓存中;绑定所述调用链上下文缓存与线程标识,以便与在子服务调用中,确定将子链追踪信息写入的调用链上下文缓存,其中,通过线程间的层次关系确定子服务与主服务的调用关系;在主服务应答输出端将主链追踪信息写入调用链上下文缓存中;
主链注入单元,用于在主服务应答输出端,拦截向客户端的应答数据包,写入主链追踪信息并将所述应答数据包回写至输出流;
日志生成单元,用于存储所述调用链上下文缓存中的内容作为调用日志;
还包括:
子链注入单元,用于当主链或子链通过子链调用请求调用子服务时,在子服务调用请求输入端,根据线程标识获取所述调用链上下文缓存,并向子链调用请求中写入子调用追踪信息;
所述调用链管理单元用于生成子调用追踪信息并写入所述调用链上下文缓存中,且将从子服务应答中提取子调用追踪信息写入调用链上下文缓存中;
所述装置还包括子链提取单元,用于在子服务调用的应答输出端,从子服务应答中提取子调用追踪信息。
8.根据权利要求7所述的装置,其中,主服务执行过程中,单个主服务调用一个或多个子服务;和/或,
子服务执行过程中,单个子服务调用一个或多个子服务。
9.根据权利要求7或8所述的装置,其中,
所述主链信息包括通信五元组、服务调用链标识、父调用标识、当前调用标识;
所述子调用追踪信息包括服务调用链标识、当前调用标识、子调用标识。
10.根据权利要求7或8所述的装置,其中,
所述调用链管理单元还用于执行以下至少一种操作:
在主服务请求输入端,将主服务调用开始时间写入所述调用链上下文缓存中;
在主服务应答输出端,将主服务调用结束时间写入所述调用链上下文缓存中;
在子链调用请求输入端,将子服务调用开始时间写入所述调用链上下文缓存中;
在子链调用应答输出端,将子服务结束调用时间写入所述调用链上下文缓存中。
11.根据权利要求7所述的装置,其中,在输入端和在输出端通过钩子技术对接口函数和/或线程函数进行扩展,通过钩子函数代替原有的库函数,在主服务和/或子服务的库函数的处理前和/或处理后***钩子函数,执行以下功能中的一种或多种:
连接服务端RPC连接请求;
拦截客户端RPC应答数据或服务端RPC请求数据;
拦截客户端RPC请求数据或服务端RPC应答数据;
拦截子线程创建过程,建立线程标识的树型结构,用全路径的线程ID描述当前线程在整个线程树的位置;
拦截线程结束事件;
从线程标识的树型结构中删除对应的线程节点。
12.一种服务追踪装置,包括:
存储器;以及
耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器的指令执行如权利要求1至6任一项所述的方法。
13.一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现权利要求1至6任意一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711466851.5A CN109992465B (zh) | 2017-12-29 | 2017-12-29 | 服务追踪方法、装置和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711466851.5A CN109992465B (zh) | 2017-12-29 | 2017-12-29 | 服务追踪方法、装置和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109992465A CN109992465A (zh) | 2019-07-09 |
CN109992465B true CN109992465B (zh) | 2023-05-16 |
Family
ID=67109385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711466851.5A Active CN109992465B (zh) | 2017-12-29 | 2017-12-29 | 服务追踪方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109992465B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110430083B (zh) * | 2019-08-15 | 2022-11-15 | 平安普惠企业管理有限公司 | 一种代理转发请求的定位处理方法及服务器 |
CN111459766B (zh) * | 2019-11-14 | 2024-01-12 | 国网浙江省电力有限公司信息通信分公司 | 一种面向微服务***的调用链跟踪与分析方法 |
CN111078432B (zh) * | 2019-12-10 | 2024-04-16 | 深圳前海环融联易信息科技服务有限公司 | 一种服务之间调度的追踪方法及装置 |
CN111078504A (zh) * | 2019-12-25 | 2020-04-28 | 深圳前海环融联易信息科技服务有限公司 | 一种分布式调用链跟踪方法、装置、计算机设备及存储介质 |
CN113114612B (zh) * | 2020-01-13 | 2023-06-27 | 北京京东振世信息技术有限公司 | 分布式***调用链的确定方法和装置 |
CN111290965B (zh) * | 2020-03-06 | 2021-11-02 | 腾讯科技(深圳)有限公司 | 一种测试方法、装置、计算机设备和存储介质 |
CN111913789A (zh) * | 2020-06-29 | 2020-11-10 | 浪潮通用软件有限公司 | 一种支持微服务架构的程序跟踪方法及设备、介质 |
CN111984346B (zh) * | 2020-08-12 | 2023-10-27 | 八维通科技有限公司 | 微服务环境中调用链追踪的方法、***、装置及存储介质 |
CN112328406B (zh) * | 2020-10-10 | 2023-05-09 | 南方电网数字平台科技(广东)有限公司 | 一种基于tcc的微服务分布式事务***以及业务处理方法 |
CN112306695A (zh) * | 2020-11-19 | 2021-02-02 | 中国民航信息网络股份有限公司 | 数据的处理方法、装置、电子设备及计算机存储介质 |
CN112463408A (zh) * | 2020-11-26 | 2021-03-09 | 北京达佳互联信息技术有限公司 | 远程过程调用服务的启动方法和装置、服务器、存储介质 |
CN112612675B (zh) * | 2020-12-25 | 2023-02-28 | 山东经伟晟睿数据技术有限公司 | 微服务架构下的分布式大数据日志链路跟踪方法及*** |
CN112732238B (zh) * | 2020-12-28 | 2024-02-20 | 上海微盟企业发展有限公司 | 一种基于js的执行上下文获取方法及相关装置 |
CN116266145A (zh) * | 2021-12-17 | 2023-06-20 | 华为技术有限公司 | 一种处理调用的方法、***和设备 |
CN114003472B (zh) * | 2022-01-04 | 2022-04-12 | 连连(杭州)信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN114785878A (zh) * | 2022-04-24 | 2022-07-22 | 北京印象笔记科技有限公司 | 信息提取方法及装置、电子设备、计算机可读存储介质 |
CN115658431A (zh) * | 2022-10-25 | 2023-01-31 | 贝壳找房(北京)科技有限公司 | 链路追踪的方法、电子设备及计算机可读存储介质 |
CN116775440B (zh) * | 2023-08-21 | 2023-12-01 | 青岛民航凯亚***集成有限公司 | 一种基于机场生产运营***的日志级链路追踪方法及*** |
CN117494117A (zh) * | 2023-11-17 | 2024-02-02 | 北京天融信网络安全技术有限公司 | 一种远程过程调用的跟踪***及跟踪方法 |
CN117978428A (zh) * | 2023-12-05 | 2024-05-03 | 北京天融信网络安全技术有限公司 | 用于解析wmi客户端进程的方法、装置、处理器及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1852209A (zh) * | 2006-05-31 | 2006-10-25 | 北京和利时***工程股份有限公司 | 一种分布式控制***中的远程过程调用方法及*** |
CN104219316A (zh) * | 2014-09-12 | 2014-12-17 | 微梦创科网络科技(中国)有限公司 | 一种分布式***中的调用请求处理方法及装置 |
CN106020963A (zh) * | 2016-06-07 | 2016-10-12 | 中国建设银行股份有限公司 | 一种跨***内部服务调用方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7516209B2 (en) * | 2003-06-27 | 2009-04-07 | Microsoft Corporation | Method and framework for tracking/logging completion of requests in a computer system |
CN103023906B (zh) * | 2012-12-20 | 2017-04-19 | 北京奇虎科技有限公司 | 针对远程过程调用协议进行状态跟踪的方法及*** |
CN106487596B (zh) * | 2016-10-26 | 2019-12-13 | 宜人恒业科技发展(北京)有限公司 | 分布式服务跟踪实现方法 |
CN106357463B (zh) * | 2016-11-07 | 2019-10-25 | 深圳盛灿科技股份有限公司 | 非入侵式的访问链路跟踪实现方法及其*** |
CN106790718A (zh) * | 2017-03-16 | 2017-05-31 | 北京搜狐新媒体信息技术有限公司 | 服务调用链路分析方法及*** |
-
2017
- 2017-12-29 CN CN201711466851.5A patent/CN109992465B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1852209A (zh) * | 2006-05-31 | 2006-10-25 | 北京和利时***工程股份有限公司 | 一种分布式控制***中的远程过程调用方法及*** |
CN104219316A (zh) * | 2014-09-12 | 2014-12-17 | 微梦创科网络科技(中国)有限公司 | 一种分布式***中的调用请求处理方法及装置 |
CN106020963A (zh) * | 2016-06-07 | 2016-10-12 | 中国建设银行股份有限公司 | 一种跨***内部服务调用方法和装置 |
Non-Patent Citations (2)
Title |
---|
Xiuqing Hao ; Lei Sun."New Parallel Robot Mechanisms Based on Chain RPC, PRS and CPS".《2009 International Conference on Artificial Intelligence and Computational Intelligence》.2010,全文. * |
文件运动轨迹追踪技术的研究及实现;王文宇;;计算机***应用(04);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109992465A (zh) | 2019-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109992465B (zh) | 服务追踪方法、装置和计算机可读存储介质 | |
AU2017226398B2 (en) | Service implementation method, apparatus and system based on fix protocol | |
CN106375458B (zh) | 服务调用***、方法及装置 | |
CN105260318A (zh) | 一种基于网页的自动化测试方法及装置 | |
CN108011898B (zh) | 漏洞检测方法、装置、计算机设备和存储介质 | |
CN112422681B (zh) | 一种跨平台分布式通讯调用方法及装置 | |
CN109714406B (zh) | 资源描述文件的处理、页面资源的获取方法及设备 | |
US20220329505A1 (en) | Distributed packet capture | |
CN109254765B (zh) | 定时任务管理方法、装置、计算机设备及存储介质 | |
CN108076017A (zh) | 一种数据包的协议解析方法及装置 | |
CN111984346A (zh) | 微服务环境中调用链追踪的方法、***、装置及存储介质 | |
CN109408251B (zh) | 消息发送方法与装置、消息接收处理方法与装置 | |
CN113158195B (zh) | 一种基于poc脚本的分布式漏洞扫描方法及*** | |
CN108494864B (zh) | 一种数据处理方法、装置和机器可读存储介质 | |
CN115941224A (zh) | 一种网络访问信息管理方法、装置和计算机可读存储介质 | |
US9275369B2 (en) | Demystifying obfuscated information transfer for performing automated system administration | |
CN114244758B (zh) | 安卓平台的网络诊断方法、存储介质、电子设备及*** | |
CN110022332B (zh) | 一种超文本传输安全协议代理方法、装置、设备及介质 | |
CN114996730A (zh) | 一种数据加解密***、方法、计算机设备及存储介质 | |
CN111142960B (zh) | 接口提供方法、装置和*** | |
CN114567472A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN107329880A (zh) | 一种java环境中动态获取日志实例的方法及*** | |
CN112632534A (zh) | 一种恶意行为检测方法及装置 | |
CN112153148A (zh) | 基于消息接收端的消息堆积处理方法及装置 | |
CN109688043B (zh) | 一种imap协议多链接关联解析方法及*** |
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 | ||
EE01 | Entry into force of recordation of patent licensing contract | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20190709 Assignee: Tianyiyun Technology Co.,Ltd. Assignor: CHINA TELECOM Corp.,Ltd. Contract record no.: X2024110000020 Denomination of invention: Service tracking methods, devices, and computer-readable storage media Granted publication date: 20230516 License type: Common License Record date: 20240315 |