非入侵式的访问链路跟踪实现方法及其系统与流程

文档序号:12751817阅读:590来源:国知局

本发明涉及计算机技术领域,具体涉及一种非入侵式的访问链路跟踪实现方法及其系统。



背景技术:

随着公司业务的发展壮大,各个业务系统衍生的接口越来越多,各接口之间相互调用关系越来越复杂,例如:一个A请求,需要调用B接口和C接口,其中B接口中又调了D接口,C接口调用了E接口。系统分析人员想知道系统的瓶颈、性能以及各接口使用率,已经无法全盘掌控,一旦某些接口出现瓶颈,将直接影响整个系统的性能。



技术实现要素:

有鉴于此,本发明的主要目的在于提供一种非入侵式的访问链路跟踪实现方法及其系统。

为达到上述目的,本发明的技术方案是这样实现的:

本发明实施例提供一种非入侵式的访问链路跟踪实现方法,该方法为:任意一业务接口生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;当任意一业务接口调用另一个业务接口时,将携带所述跟踪ID的通讯报文发送给另一业务接口,所述另一接口解出通讯报文,检查是否携带有跟踪ID,如果携带有跟踪ID,生成的跟踪数据中增加节点parent_id,形成父子关系,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;周期性地将每个业务接口对应的缓存中的跟踪数据根据先进先出方式取出,根据所述跟踪数据中的节点和跟踪ID确定每一个调用链的层级依赖关系;所述跟踪数据还包括调用发起时间、发起IP、发起服务的服务名称、Span名称、调用结束时间;所述通讯报文的通讯方式为http或者socket。

上述方案中,该方法还包括:当该业务接口调用另一个业务接口时,将携带所述跟踪ID的通讯报文发送给另一业务接口,所述另一接口解出通讯报文,检查是否携带有跟踪ID,如果没有携带跟踪ID,则所述另一个业务接口生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中。

本发明实施例还提供一种非入侵式的访问链路跟踪实现系统,该系统包括:跟踪数据生成单元、调用单元、解析单元、读取显示单元;

所述跟踪数据生成单元,用于针对任意一业务接口生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;还用于如果所述通讯报文携带有跟踪ID,生成的跟踪数据中增加节点parent_id,形成父子关系,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;所述通讯报文的通讯方式为http或者socket;

所述调用单元,用于当任意一业务接口调用另一个业务接口时,将携带所述跟踪ID的通讯报文发送给另一业务接口;

所述解析单元,用于解析所述通讯报文,检查是否携带有跟踪ID;

所述读取显示单元,用于周期性地将每个业务接口对应的缓存中的跟踪数据根据先进先出方式取出,根据所述跟踪数据中的节点和跟踪ID确定每一个调用链的层级依赖关系;所述跟踪数据还包括调用发起时间、发起IP、发起服务的服务名称、Span名称、调用结束时间;

所述跟踪数据生成单元,如果所述通讯报文没有携带跟踪ID,则不参与访问链路跟踪关系。

上述方案中,所述跟踪数据生成单元,如果所述通讯报文没有携带父级跟踪ID,则生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中。

与现有技术相比,本发明的有益效果:

本发明数据读写快,同时利用报文格式自定义的方便,使调用链路追踪变得简单易用,能够实现上下级调用关系、请求次数、执行时间,通过汇总统计能够清晰地实现调用关系拓扑图。

附图说明

图1为本发明实施例提供一种非入侵式的访问链路跟踪实现方法的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例提供一种非入侵式的访问链路跟踪实现方法,如图1所示,该方法通过以下步骤实现:

步骤101:任意一业务接口生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;

具体地,所述跟踪数据还包括调用发起时间、发起IP、发起服务的服务名称、Span名称、调用结束时间。

例如,业务接口A生成跟踪数据(包含跟踪ID),将数据写入系统缓存中,同时把跟踪ID放到全局变量中。

步骤102:当任意一业务接口调用另一个业务接口时,将携带所述跟踪ID的通讯报文发送给另一业务接口,所述另一接口解出通讯报文,检查是否携带有跟踪ID,如果携带有跟踪ID,生成的跟踪数据中增加节点parent_id,形成父子关系,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;

如果所述通讯报文没有携带父级跟踪ID,则所述另一业务接口生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中。

具体地,所述通讯报文的通讯方式为http或者socket。

例如,业务接口A调用接口B时,把跟踪ID带到通讯报文中,业务接口B收到请求后,解出通讯报文,检查是否带有跟踪ID,如果带有跟踪ID,生成的跟踪数据中增加节点parent_id,形成父子关系,将数据写入当前操作系统缓存中,同时把跟踪ID放到全局变量中;业务接口C处理方式与业务接口B相同。

步骤103:周期性地将每个业务接口对应的缓存中的跟踪数据根据先进先出方式取出,根据所述跟踪数据中的节点和跟踪ID确定每一个调用链的层级依赖关系并且进行显示。

具体地,将每个系统中的缓存数据按先进先出的方式取出来,统一写入kafka分布式消息系统中,用zipkin将kafka分布式消息系统中的数据取出来,写入到Elasticsearch中分布式存储,用zipkin-ui程序把Elasticsearch中的数据读取出来,并做调用链上下级依赖关系显示。

实施例:

本发明实施例提供一种非入侵式的访问链路跟踪实现方法,该方法通过以下步骤实现:

1.接口调用方发起调用时,生成TraceID和Span跟踪数据,所述Span跟踪数据包括:调用发起时间、发起IP、发起服务的服务名称、Span名称、调用结束时间。

2.把Span跟踪数据写入到系统缓存中,由程序直接操作系统的System V IPC。

3.调用接口时,把TraceID与其它数据一起组装到通讯报文中传输,通讯方式支持http,socket,报文内容格式可自行定义,如:Json\Protobuf\Thrift。

4.接口接收方收到TraceID后,再生成新的Span,同时在Span上增加parentId节点并赋上TraceID的值,与上一个Span建立关联关系。

5.上一接口再调另一接口,处理方式将与前面步骤相同。

6.每台服务器不间断的执行缓存数据(System V)的读取操作,并统一写入到kafka分布式消息服务中。

7.zipkin程序实时的从kafka分布式消息服务把数据读取出来,进行整理,整理完数据写入到Elasticsearch存储,采用Elasticsearch存储的优势是它具有搜索引擎机制,数据读取检索快,支持分布式存储。

8.zipkin-ui程序实时的检索Elasticsearch的数据,并在界面上展示出来每一个调用链的层级依赖关系,执行时长。

本发明实施例还提供一种非入侵式的访问链路跟踪实现系统,该系统包括:跟踪数据生成单元、调用单元、解析单元、读取显示单元;

所述跟踪数据生成单元,用于针对任意一业务接口生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;还用于如果所述通讯报文携带有跟踪ID,生成的跟踪数据中增加节点parent_id,形成父子关系,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中;

所述调用单元,用于当任意一业务接口调用另一个业务接口时,将携带所述跟踪ID的通讯报文发送给另一业务接口;

所述解析单元,用于解析所述通讯报文,检查是否携带有跟踪ID;

所述读取显示单元,用于周期性地将每个业务接口对应的缓存中的跟踪数据根据先进先出方式取出,根据所述跟踪数据中的节点和跟踪ID确定每一个调用链的层级依赖关系并且进行显示。

所述跟踪数据还包括调用发起时间、发起IP、发起服务的服务名称、Span名称、调用结束时间。

所述通讯报文的通讯方式为http或者socket。

所述跟踪数据生成单元,如果所述通讯报文没有携带跟踪ID,则不参与访问链路跟踪关系。

所述跟踪数据生成单元,如果所述通讯报文没有携带父级跟踪ID,则生成包含跟踪ID的跟踪数据,将所述跟踪数据写入缓存中同时把所述跟踪ID存储到全局变量中。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

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