异步微服务调用链路跟踪方法、装置、介质及电子设备与流程

文档序号:19123962发布日期:2019-11-13 01:56阅读:425来源:国知局
异步微服务调用链路跟踪方法、装置、介质及电子设备与流程

本发明属于计算机网络架构技术领域,具体而言,涉及一种异步微服务调用链路跟踪方法、装置、介质及电子设备。



背景技术:

在业务系统日常运维过程中,利用日志进行问题的追踪和定位非常重要。目前,大部分公司和企业都采用微服务开发框架,完成一个完整的业务流程往往需要通过多个应用服务器的不同微服务组合完成,因此对日志的管理、查询相当复杂和困难。

为了解决微服务开发框架带来的日志检索困难、查找不便等问题,目前普遍的做法是将每台应用服务器产生的日志经统一归集后转储到一个用于集中存放和管理日志的存储服务器上,然而这种做法存在以下问题:1)仅仅解决了日志的统一存储问题,没有提供用于统一检索和监控分析的界面,用户需要逐个打开日志文件进行搜索、查找,因此依然存在不便之处;2)不能对微服务调用链路进行跟踪,即面对用户的一次调用请求(后文简称请求)不能将整个微服务调用链路完整地关联起来,无法对跨应用服务器、跨微服务实现编排调用的轨迹进行查询和追踪;3)当通过消息队列(mq)进行异步微服务调用时,如果想要关联消息队列的发送者和接收者,则只能通过日志打印输出消息内容或业务关键词的方式,这样势必会对日志的输出提出特殊要求,不够方便、灵活。



技术实现要素:

为解决上述现有技术中存在的问题,根据本发明的一个实施例,提供一种异步微服务调用链路跟踪方法,其中异步微服务调用包括:根据用户的请求调用第一微服务,以及待所述第一微服务处理完成之后以消息队列的方式调用第二微服务,所述方法包括:

在所述第一微服务处理完成之后,在发送到第一消息队列以用于调用所述第二微服务的消息中插入为所述请求创建的跟踪标识;以及

监听所述第一消息队列中的消息,从监听到的消息中取出所述跟踪标识并且传递给所述第二微服务。

根据本发明的一个示例,上述方法中,通过消息发送接口在发送到第一消息队列以用于调用所述第二微服务的消息中插入为所述请求创建的跟踪标识,所述消息发送接口是由消息发送超类实现的;以及通过消息监听接口监听所述第一消息队列中的消息,从监听到的消息中取出所述跟踪标识并且传递给所述第二微服务,所述消息监听接口是由消息监听超类实现的。

根据本发明的一个示例,在从监听到的消息中取出所述跟踪标识并且传递给所述第二微服务之后,上述方法还可以包括:生成包括所述跟踪标识的日志。

根据本发明的一个示例,上述方法还可以包括:针对多个工作单元中的每个工作单元,创建对应的跨度标识;其中所述多个工作单元至少包括:对应于所述第一微服务的服务处理的工作单元,对应于对所述第二微服务的调用的工作单元,对应于所述第二微服务的服务处理的工作单元。

根据本发明的一个示例,上述方法中,所生成的日志还包括所属工作单元对应的跨度标识。

根据本发明的一个示例,在生成包括所述跟踪标识的日志之后,上述方法还可以包括:

收集已生成的日志,发送至第二消息队列;

从所述第二消息队列中读取日志,对读取到的日志进行格式转换,存储经格式转换的日志;

基于跟踪标识对所存储的日志创建索引;以及

提供可视化平台,其中用户通过所述可视化平台检索所存储的日志。

上述方法还可以包括:分析所存储的日志;根据分析结果确定是否发出预警。

根据本发明的一个实施例,还提供一种异步微服务调用链路跟踪装置,其中,异步微服务调用包括:根据用户的请求调用第一微服务,以及待所述第一微服务处理完成之后以消息队列的方式调用第二微服务,所述装置包括:

消息发送模块,用于在所述第一微服务处理完成之后,在发送到第一消息队列以用于调用所述第二微服务的消息中插入为所述请求创建的跟踪标识;以及

消息监听模块,用于监听所述第一消息队列中的消息,从监听到的消息中取出所述跟踪标识并且传递给所述第二微服务。

根据本发明的一个实施例,还提供一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述实施例中所述的异步微服务调用链路跟踪方法。

根据本发明的一个实施例,还提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个计算机程序,当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述电子设备实现如上述实施例中所述的异步微服务调用链路跟踪方法。

本发明实施例提供的技术方案具有如下有益效果:

在springcloudsleuth(服务链路跟踪工具)技术的基础上,通过在发送到消息队列的消息中插入为用户请求创建的跟踪标识(traceid),并且在监听到消息队列中的消息时从该消息中取出traceid并传递给待调用的微服务,实现了经由消息队列的traceid的传递,并且实现了利用消息队列进行异步微服务调用的链路跟踪;进一步而言,无需进行日志内容的定制和开发(即无需对日志输出提出特殊要求),就可以实现完整的异步微服务调用链路跟踪。此外,本发明还提供了日志的统一检索和监控分析平台,方便用户基于traceid检索、查找异步微服务调用链路上的日志内容。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:

图1示意性示出了根据本发明一个实施例的异步微服务调用链路跟踪方法的流程图;

图2示意性示出了根据本发明另一个实施例的异步微服务调用链路跟踪方法的流程图;

图3示出了根据本发明一个实施例的日志归集与展示方法的示意图;

图4示意性示出了根据本发明一个实施例的异步微服务调用链路跟踪装置的框图;

图5示出了适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。

附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。

针对微服务开发框架,用户发起的请求在后端系统中会经过多个不同的微服务调用,这些微服务协同产生最后的结果,从而形成一条复杂的微服务调用链路。为了对微服务调用链路进行跟踪,springcloudsleuth提供了一套完整的解决方案,其原理如下:当用户的请求发送到入口端点(或称统一接入)时,为该请求创建一个唯一的跟踪标识(traceid),并且在各微服务之间流转时始终保持传递该唯一的traceid,直到返回给用户为止。一条微服务调用链路可以包括多个span(或称跨度),每个span对应链路中的一个工作单元,对于每个工作单元创建唯一标识(spanid,或称跨度标识)来标记其开始、过程以及结束,span还可以存储有描述信息、事件时间戳、annotation的键值对属性、上一级工作单元的spanid(parentid)等。在springboot应用中,在工程中引入spring-cloud-starter-sleuth依赖之后,会自动地为当前应用构建起各通信通道的跟踪机制。

假设用户的请求需要调用两个微服务(例如第一微服务和第二微服务),其中用户向入口端点发送http请求之后,入口端点先调用第一微服务,第一微服务执行相应的处理后通过resttemplate(resttemplate是用于访问rest服务的客户端;rest即表述化状态转移,为一种软件架构风格)对第二微服务发起请求。为实现traceid和spanid的传递,该请求在发送到第二微服务之前sleuth会在其头部增加如下信息:请求的唯一的跟踪标识,即traceid;当前工作单元的唯一标识,即spanid;以及,是否将信息输出到服务收集和展示等等。第二微服务在开始处理时会创建新的spanid(对应一个新的工作单元),并且将所接收的spanid作为parentid(或称父标识)。由此,通过traceid、spanid以及parentid将微服务调用链路中的跟踪记录串联起来。

然而,当使用消息队列(mq)进行微服务之间的异步调用时,由于数据交互的唯一载体是消息,并且消息队列的生产者和消费者的操作是异步进行的,如果采用现有的springcloudsleuth技术,则无法通过消息队列做到traceid和spanid的传递,从而无法实现异步微服务调用的链路跟踪。

为解决这一问题,根据本发明的一个实施例,提供一种异步微服务调用链路跟踪方法。其中,异步微服务调用指的是:根据用户的请求调用第一微服务,待第一微服务处理完成之后以消息队列的方式调用第二微服务。该异步微服务调用链路跟踪方法在具有计算功能和存储功能的电子设备处执行,并且所述电子设备可以位于客户端或者服务器处。

概括而言,该异步微服务调用链路跟踪方法包括:在第一微服务处理完成之后,在发送到消息队列以用于调用第二微服务的消息中插入为用户请求创建的traceid;以及,监听消息队列中的消息,从监听到的消息中取出traceid并且传递给第二微服务。

图1示意性地示出了该异步微服务调用链路跟踪方法的流程图,下面结合图1详细描述该方法的各个步骤:

步骤s101.在第一微服务处理完成之后,在发送到消息队列以用于调用第二微服务的消息中插入为用户请求创建的traceid。根据本发明的一个实施例,步骤s101包括如下的子步骤:

步骤s1011.当接收到用户向入口端点发送的请求(例如http请求)时,为该请求创建并存储唯一的traceid;接着,由入口端点调用第一微服务(调用的头部可以包含该traceid)并由第一微服务进行服务处理,生成并存储包含该traceid的日志。

步骤s1012.在第一微服务处理完成之后,由入口端点或者第一微服务发送调用第二微服务的消息。

步骤s1013.由消息发送接口接收或拦截该调用第二微服务的消息,在消息中插入为请求创建的traceid,并且将包含traceid的消息发送至消息队列。

其中,消息发送接口可以通过硬件、软件或者软硬结合的方式来实现,根据本发明的一个实施例,该消息发送接口可以通过设计一个消息发送超类来实现,该消息发送超类被调用时执行以下过程:获取调用第二微服务的消息以及为请求创建的traceid,将traceid插入该消息中,并且将包含traceid的消息发送至消息队列。

步骤s102.监听消息队列中的消息,从监听到的消息中取出traceid并且传递给第二微服务。根据本发明的一个实施例,步骤s102包括如下子步骤:

步骤s1021.由消息监听接口监听消息队列中的消息,从监听到的消息中取出traceid,向第二微服务传递该traceid和调用第二微服务的消息。

其中,消息监听接口可以通过硬件、软件或者软硬结合的方式来实现。根据本发明的一个实施例,该消息监听接口可以通过设计一个消息监听超类来实现,该消息监听超类被调用时执行如下过程:监听消息队列中的消息;当监听到消息时,从监听到的消息中取出traceid;并且向第二微服务传递该traceid以及调用第二微服务的消息。

步骤s1022.由第二微服务进行服务处理,生成并存储包含traceid的日志。

在上述实施例中,通过在发送到消息队列的消息(即调用第二微服务的消息)中插入为请求创建的traceid,并且在监听到消息后从该消息中取出traceid传递给待调用的第二微服务,实现了经由消息队列的traceid的传递;所生成的日志包含traceid,因此可以实现(利用消息队列进行)异步微服务调用的链路跟踪。此外,无需进行日志内容的定制和开发,从而方便、灵活地实现了异步微服务调用链路跟踪。

在上述实施例中,日志离散地存储在微服务节结点(例如微服务所处的应用服务器)上,导致日志检索、查找不便等问题。对此,根据本发明的一个实施例,还提供一种异步微服务调用链路跟踪方法,其中异步微服务调用指的是:根据用户的请求调用第一微服务,待第一微服务处理完成之后以消息队列的方式调用第二微服务。该异步微服务调用链路跟踪方法在具有计算功能和存储功能的电子设备处执行,并且所述电子设备可以位于客户端或者服务器处。

概括而言,在该异步微服务调用链路跟踪方法中,除了采用唯一的traceid之外,还采用spanid将异步微服务调用链路中的跟踪记录串联起来,并且对生成的日志进行归集和展示,便于用户进行基于traceid的查询和检索。

图2示意性地示出了该异步微服务调用链路跟踪方法的流程图,现结合图2描述该方法的各个步骤:

步骤s201.为用户的请求创建唯一的traceid,创建spanid并且由第一微服务进行服务处理,生成并存储包含traceid和所创建的spanid的日志。

当接收到用户向入口端点发送的请求时,为该请求创建并存储唯一的traceid;由入口端点调用第一微服务(调用请求的头部可以包含该traceid);创建一个spanid(例如spanida,该spanida对应于一个工作单元u1,该工作单元u1对应于第一微服务的服务处理)并且由第一微服务进行服务处理。生成并存储包含该traceid和spanida的日志(该日志对应于工作单元u1,换句话说,该日志属于工作单元u1)。

步骤s202.在第一微服务处理完成之后,由入口端点或第一微服务发送调用第二微服务的消息。

步骤s203.由消息发送接口来接收或拦截调用第二微服务的消息,创建spanid(例如spanidb,该spanidb对应于一个工作单元u2,该工作单元u2对应于对第二微服务的调用),在消息中插入traceid以及spanidb,并且将包含traceid和spanidb的消息发送至消息队列。

如上文所述,消息发送接口可以通过设计一个消息发送超类来实现。另外,本领域技术人员应理解,基于springcloudsleuth技术,可以存储上一级工作单元的spanid(例如spanida)作为spanidb的parentid。

步骤s204.由消息监听接口监听消息队列中的消息,从监听到的消息中取出traceid和spanid(spanidb),并且向第二微服务传递该traceid、spanid以及调用第二微服务的消息。

如上文所述,消息监听接口可以通过设计一个消息监听超类来实现。另外,步骤s203和s204也可以生成并存储包含该traceid和spanidb的日志(该日志对应于工作单元u2)。

步骤s205.第二微服务将由消息监听接口传递的spanid(spanidb)作为parentid进行存储,创建spanid(例如spanidc,该spanidc对应于一个工作单元u3,该工作单元u3对应于第二微服务的服务处理)并且由第二微服务进行服务处理,生成并存储包含traceid和spanidc的日志(该日志对应于工作单元u3)。

步骤s206.收集已生成的日志并且发送至kafka消息队列进行缓存。

步骤s206中的kafka消息队列与上文中用于异步微服务调用的消息队列不同,本领域技术人员应理解,除了kafka,也可以利用其他现有的消息队列产品来缓存收集的日志。

具体地,可以利用日志收集组件logback进行日志的收集,logback可以与微服务集成,也可以独立地部署。logback在收集到日志之后,将收集到的日志发送至kafka消息队列,采用消息队列来缓存日志可以降低日志的丢失率。

步骤s207.从kafka消息队列中读取日志,进行格式转换,并且存储经格式转换的日志。

具体地,利用日志转换组件logstash读取kafka消息队列中的日志并且按照转换格式要求进行格式转换,将经格式转换的日志输出到日志索引存储组件elasticsearch(elasticsearch是一种分布式、高性能、高可用、可伸缩的搜索和分析系统)进行存储。

步骤s208.基于traceid对所存储的日志创建日志索引,并且向用户提供可视化平台,其中用户可以通过该可视化平台基于traceid来检索日志。

具体而言,利用日志索引存储组件elasticsearch创建基于traceid的日志索引,并且提供针对elasticsearch的一个可视化平台kibana,kibana用于搜索、查找存储在elasticsearch中的数据,并且展示给用户。

在上述实施例中,实现了日志的统一检索和监控分析的界面(可视化平台kibana),方便用户基于traceid来检索、查找异步微服务调用链路上的日志内容。

在上述实施例中,采用了logback与kafka消息队列的组合来收集和缓存日志。本领域技术人员应理解,在其他实施例中,也可以采用flume与kafka消息队列的组合模式,并且经转换的日志也可以存储在mongodb文档数据库中。

在上述实施例中,利用日志收集组件logback执行日志的收集,而在另一个实施例中,如图3所示,也可以通过其他日志收集代理组件来收集微服务相关的日志或者来自其他资源(如数据库、存储设备、缓存等)的日志,日志收集代理组件例如可以是filebeat、packbeat、redisbeat、kafkabeat等。通过这些日志收集代理组件收集的日志可以直接存储到日志索引存储组件elasticsearch中。另外,如图3所示,除了向用户提供可视化平台,还可以对存储在elasticsearch中的日志进行分析,并且根据分析结果确定是否发出预警。

以下结合附图介绍本发明的装置实施例。

根据本发明的一个实施例,还提供一种异步微服务调用链路跟踪装置,图4示意性地示出了根据本发明一个实施例的异步微服务调用链路跟踪装置400的框图。

参见图4,异步微服务调用链路跟踪装置400包括:消息发送模块401和消息监听模块402。其中,消息发送模块401用于在第一微服务处理完成之后,在发送到第一消息队列以用于调用第二微服务的消息中插入为用户请求创建的traceid;消息监听模块402用于监听第一消息队列中的消息,从监听到的消息中取出traceid并且传递给第二微服务。

具体而言,消息发送模块401用于通过消息发送接口在发送到第一消息队列以用于调用第二微服务的消息中插入为请求创建的traceid,该消息发送接口是由消息发送超类实现的;并且,消息监听模块402用于通过消息监听接口监听第一消息队列中的消息,从监听到的消息中取出traceid并且传递给第二微服务,该消息监听接口是由消息监听超类实现的。

根据本发明的一个实施例,异步微服务调用链路跟踪装置400还包括日志生成模块(未在图中示出),该日志生成模块用于生成包括traceid的日志。具体地,消息发送模块401用于针对多个工作单元中的每个工作单元,创建对应的spanid;其中,所述多个工作单元至少包括:对应于第一微服务的服务处理的工作单元,对应于对第二微服务的调用的工作单元,对应于第二微服务的服务处理的工作单元。根据本发明的一个实施例,日志生成模块所生成的日志还包括所属工作单元对应的spanid。

根据本发明的一个实施例,异步微服务调用链路跟踪装置400还包括:日志收集模块(未在图中示出),用于收集已生成的日志,发送至第二消息队列;日志转换及存储模块(未在图中示出),用于从第二消息队列中读取日志,对读取到的日志进行格式转换,并且存储经格式转换的日志;日志索引创建模块(未在图中示出),用于基于traceid对所存储的日志创建索引;以及可视化模块(未在图中示出),用于提供可视化平台,其中用户通过该可视化平台检索所存储的日志。

根据本发明的一个实施例,异步微服务调用链路跟踪装置400还包括:预警模块(未在图中示出),用于分析所存储的日志,以及根据分析结果确定是否发出预警。

由于本实施例的异步微服务调用链路跟踪装置的各个功能模块与上文结合图1描述的异步微服务调用链路跟踪方法实施例的步骤对应,因此对于本装置实施例中未披露的细节,请参照结合图1描述的异步微服务调用链路跟踪方法的实施例。

根据本发明的一个实施例,还提供一种适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。参见图5,计算机系统500包括总线505,耦合到总线505的设备之间可以快速地传输信息。处理器501与总线505耦合,用于执行由计算机程序代码所指定的一组动作或操作,处理器501可以单独地或者与其他设备组合实现为机械、电、磁、光、量子或者化学部件等。

计算机系统500还包括耦合到总线505的存储器503,存储器503(例如,ram或者其他动态存储设备)存储可由计算机系统500改变的数据,包括实现上述实施例所述的异步微服务调用链路跟踪方法的指令或计算机程序。当处理器501执行该指令或计算机程序时,使得计算机系统500能够实现上述实施例中描述的异步微服务调用链路跟踪方法,例如,可以实现如图1-2中所示的各个步骤。存储器503还可以存储处理器501执行指令或计算机程序期间产生的临时数据,以及系统操作所需的各种程序和数据。计算机系统500还包括耦合到总线505的只读存储器502以及非易失性储存设备508,例如磁盘或光盘等,用于存储当计算机系统500被关闭或掉电时也能持续的数据。

计算机系统500还包括诸如键盘、传感器等的输入设备506,以及诸如阴极射线管(crt)、液晶显示器(lcd)、打印机等的输出设备507。计算机系统500还包括耦合到总线505的通信接口504,通信接口504可以提供对外部设备的单向或双向的通信耦合。例如,通信接口504可以是并行端口、串行端口、电话调制解调器或者局域网(lan)卡。计算机系统500还包括耦合到总线505的驱动设备509以及可拆卸设备510,诸如磁盘、光盘、磁光盘、半导体存储器等等,其根据需要安装在驱动设备509上,以便于从其上读出的计算机程序根据需要被安装入储存设备508。

根据本发明的另一个实施例,还提供一种计算机可读介质,该计算机可读介质可以是上述计算机系统500中所包含的,也可以是单独存在而未装配入该计算机系统500中的。该计算机可读介质承载有一个或者多个计算机程序或者指令,当所述一个或者多个计算机程序或者指令被处理器执行时,使得该计算机系统500实现上述实施例中所述的异步微服务调用链路跟踪方法。需要说明的是,计算机可读介质指的是向处理器501提供数据的任意介质,这种介质可以采取任意形式,包括但不限于,计算机可读存储介质(例如,非易失性介质、易失性介质)以及传输介质。其中,非易失性介质诸如包括光盘或磁盘,例如储存设备508;易失性介质例如包括存储器504。传输介质例如包括同轴电缆、铜线、光纤电缆以及在没有电缆和线缆的情况下通过空间的载波,例如声波和电磁波,包括无线电、光和红外波。计算机可读介质的一般形式包括:软盘、柔性盘、硬盘、磁带、任意其它磁介质、cd-rom、cdrw、dvd、任意其它光介质、穿孔卡片、纸带、光标记表单、具有孔或其它光可识别标识的图案的任意其它物理介质、ram、prom、eprom、flash-eprom、任意其它存储器芯片或磁带盒、载波、或计算机可读取的任意其它介质。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

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