掌桥专利:专业的专利平台
掌桥专利
首页

微服务调用链路更新方法、装置、系统和存储介质

文献发布时间:2024-04-18 19:58:21


微服务调用链路更新方法、装置、系统和存储介质

技术领域

本发明涉及计算机网络架构技术领域,尤其涉及一种微服务调用链路更新方法、装置、系统和存储介质。

背景技术

微服务架构因其具有易扩展、易维护、高可靠、高可用等特点,在如今的企业中得到了广泛的应用,为业务分隔、服务复用、敏捷开发带来了极大便利。但随着业务场景越来越丰富,业务领域越来越广泛,服务数量也随之越来越庞大,系统复杂度随之提高,系统变化也日趋频繁,导致系统中服务间的调用关系也随之变得错综复杂。因此中,如何定位特定服务被其他哪些服务所调用,甚至服务中某个改动对其他服务的影响面分析也逐渐成为微服务架构的开发人员所面临的问题和痛点。现有技术中,三个主流的基于链路追踪技术的监控系统Zipkin、SkyWalking和阿里巴巴的Eagle系统框架都是基于Service Mesh的思想,核心在于性能监控和实时的故障排查,只收集部分链路调用信息,而且是采用动态收集方式收集服务调用信息,从而形成服务调用链路,即这些框架需要在线上业务操作的基础上进行记录,因此,目前开发人员通过接口调用关系的时候,大多还是通过口口相传,手动记录的方式进行,导致服务调用链路梳理效率低且收集到的服务调用链路不完整,同时在业务代码更新时,不会对服务调用链路数据进行更新。

发明内容

本发明提供一种微服务调用链路更新方法、装置、系统和存储介质,用以解决现有技术中开发人员需要手动记录接口调用关系,导致服务调用链路梳理效率低且收集到的服务调用链路不完整,只能在服务调用后进行动态更新,引入代码侵入隐患的缺陷。

第一方面,本发明提供一种微服务调用链路更新方法,应用于客户端,包括:

响应于业务代码合并事件,收集所述业务代码合并事件对应的微服务调用关系数据;

解析所述业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,所述微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;

将所述微服务调用链路数据发送至服务端,以使服务端根据所述微服务调用链路数据更新已有微服务调用链路数据。

根据本发明提供的一种微服务调用链路更新方法,所述收集所述业务代码合并事件对应的微服务调用关系数据,包括:

在测试环境,通过字节码增强方式收集第一微服务内方法级别调用关系数据;

通过抽象语法树收集第二微服务内方法级别调用关系数据;

整合所述第一微服务内方法级别调用关系数据和所述第二微服务内方法级别调用关系数据,得到微服务内方法级别调用关系数据。

根据本发明提供的一种微服务调用链路更新方法,所述通过字节码增强方式收集第一微服务内方法级别调用关系数据,包括:

在所述业务代码合并事件对应的微服务的类中添加字节码,所述字节码包括收集链路字节码、解析链路字节码中的至少一种;

根据添加的字节码对所述业务代码合并事件对应的微服务的类中的方法进行解析,得到第一微服务内方法级别调用关系数据。

根据本发明提供的一种微服务调用链路更新方法,所述通过抽象语法树收集第二微服务内方法级别调用关系数据,包括:

对所述业务代码合并事件对应的微服务的类文件进行字节码序列化解析;

将解析出的字节码形式类文件转换为抽象语法树形式类文件,得到第二微服务内方法级别调用关系数据。

根据本发明提供的一种微服务调用链路更新方法,所述解析所述业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,包括:

输入所述微服务内方法级别调用关系数据至第一有向拓扑模型,求解所述第一有向拓扑模型,得到微服务内方法级别调用链路数据;

根据所述微服务内方法级别调用链路数据,获得所述微服务内方法级别调用链路数据的起点、终点和微服务间接口级别调用关系数据;

输入所述微服务间接口级别调用关系数据至第二有向拓扑模型,求解所述第二有向拓扑模型,得到微服务间接口级别调用链路数据;

整合所述微服务内方法级别调用链路数据和所述微服务间接口级别调用链路数据,得到微服务调用链路数据。

根据本发明上述任一项提供的微服务调用链路更新方法,所述微服务调用链路数据采用自定义数据协议,所述自定义数据协议内容包括调用服务名称、调用服务接口路径、被调用服务名称、被调用服务接口、调用类型中的至少一种。

第二方面,本发明提供一种微服务调用链路更新方法,应用于服务端,包括:

接收客户端发送的微服务调用链路数据;

根据接收到的微服务调用链路数据更新已有微服务调用链路数据。

根据本发明提供的微服务调用链路更新方法,所述根据接收到的微服务调用链路数据更新已有微服务调用链路数据,包括:

根据接收到的微服务调用链路数据增加已有微服务调用链路数据对应的新微服务调用接口和/或微服务调用关系;

和/或,

根据接收到的微服务调用链路数据剔除已有微服务调用链路数据对应的微服务调用接口和/或微服务调用关系。

第三方面,本发明还提供一种微服务调用链路更新方法,包括:

客户端响应于业务代码合并事件,收集所述业务代码合并事件对应的微服务调用关系数据;

解析所述业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,所述微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;

将所述微服务调用链路数据发送至服务端;

服务端接收客户端发送的微服务调用链路数据;

根据接收到的微服务调用链路数据更新已有微服务调用链路数据。

第四方面,本发明还提供一种微服务调用链路更新装置,应用于客户端,包括:

收集模块,用于响应于业务代码合并事件,收集所述业务代码合并事件对应的微服务调用关系数据;

解析模块,用于解析所述业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,所述微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;

发送模块,用于将所述微服务调用链路数据发送至服务端,以使服务端根据所述微服务调用链路数据更新已有微服务调用链路数据。

第五方面,本发明还提供一种微服务调用链路更新装置,应用于服务端,包括:

接收模块,用于接收客户端发送的微服务调用链路数据;

更新模块,用于根据接收到的微服务调用链路数据更新已有微服务调用链路数据。

第六方面,本发明还提供一种微服务调用链路更新系统,包括:

客户端和服务端,

所述客户端用于执行如上述所述第一方面的微服务调用链路更新方法;所述服务端用于执行如上述所述第二方面的微服务调用链路更新方法。

第七方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述所述微服务调用链路更新方法。

本发明提供的一种微服务调用链路更新方法、装置、系统和存储介质,客户端通过响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;将微服务调用链路数据发送至服务端,以使服务端根据微服务调用链路数据更新已有微服务调用链路数据,实现无侵入、静态、自动收集更完整的调用链路数据,为开发人员在接口梳理及改动影响面分析时提高效率,降低因接口改动而未同步其他接口导致线上问题的概率。

附图说明

为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明提供的一种微服务调用链路更新方法的流程示意图之一;

图2是本发明提供的一种微服务调用链路更新方法的流程示意图之二;

图3是本发明提供的一种微服务调用链路更新方法的流程示意图之三;

图4是本发明提供的一种微服务调用链路更新方法的流程示意图之四;

图5是本发明提供的一种微服务调用链路更新方法的流程示意图之五;

图6是本发明提供的一种微服务调用链路更新方法的流程示意图之六;

图7是本发明提供的一种微服务内方法级别调用关系的有向拓扑图;

图8是本发明提供的一种微服务调用链路数据可视化效果图;

图9是本发明提供的一种微服务调用链路更新方法的流程示意图之七;

图10是本发明提供的一种微服务调用链路更新逻辑图;

图11是本发明提供的一种微服务调用链路更新方法的流程示意图之八;

图12是本发明提供的一种微服务调用链路更新装置的结构示意图之一;

图13是本发明提供的一种微服务调用链路更新装置的结构示意图之二;

图14是本发明提供的一种微服务调用链路更新系统的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的一种微服务调用链路更新方法,如图1所示,本发明实施例提供的一种微服务调用链路更新方法,应用于客户端,包括:

步骤101:响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;

在本发明实施例中,对业务代码合并事件对应的微服务调用关系数据的收集是通过综合使用字节增强方式和抽象语法树分析得到的,现有的抽象语法树分析只收集单个服务内部的调用信息,字节增强方式收集不同微服务间的调用信息,本发明实施例通过将字节增强方式和抽象语法树分析结合,实现微服务全链路的调用关系数据的收集。

步骤102:解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据。

在本发明实施例中,微服务调用链路数据的收集、更新以及全链路展示等采用自定义静态收集通用数据协议,自定义数据协议内容包括调用服务名称(fromApplication)、调用服务接口路径(fromPath)、被调用服务名称(toApplication)、被调用服务接口(toPath)、调用类型(type)中的至少一种。因为不依赖于线上环境和业务方实际调用信息,且聚焦于微服务系统调用全链路信息的收集,因此相关数据不用遵循其他链路追踪框架所采用的OpenTracing规范,其中,OpenTracing定义了一套通用的数据上报接口,要求各个分布式追踪系统都来实现这套接口,而采用自定义静态收集通用数据协议,使得对于微服务调用链路的收集更加灵活。

步骤103:将微服务调用链路数据发送至服务端,以使服务端根据微服务调用链路数据更新已有微服务调用链路数据。

在本发明实施例中,根据微服务调用链路数据,更新已有微服务调用链路数据,不但对新增的微服务调用链路数据进行更新,同时对于已删除的微服务调用链路数据,对数据库中存储的历史数据剔除已删除的微服务调用接口和/或微服务调用关系。而当前链路追踪系统对于链路调用信息的更新是基于日志进行更新,只能对新增的链路进行更新。

在本发明实施例中,如图2所示,静态链路收集流程结构图包括:服务名称映射、服务信息记录、定时任务、服务分批构建部署、调用关系消息、数据处理存储、模块删除、结果记录和定时数据分析。通过代码托管平台GitLab Webhook对GitLab发出的代码提交、代码合并等事件消息进行监听,其中,GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。GitLab Webhook是GitLab的一个功能,比较适合前端代码的自动部署。基于消息中class文件路径的组织信息,对其他系统消息进行过滤。当监听到所关注微服务系统中各个微服务合并代码到master分支的事件后,触发定时任务:在测试环境,服务部署平台以Java Agent方式部署对应业务合并代码的微服务,从而触发微服务调用链路数据收集,最终实现基于事件驱动的微服务调用链路数据的自动实时更新。

在本发明实施例中,master主分支为在初始化本地Git时,Git默认创建了一个叫master的分支,也叫做主分支,master主分支用来保存和记录整个项目已经完成的功能代码。Java Agent是一个统称,该功能是Java虚拟机提供的一整套后门,通过这套后门可以对虚拟机方方面面进行监控与分析,甚至干预虚拟机的运行。Java Agent又叫做Java探针,是一种可以动态修改Java字节码的技术。Java类编译之后形成字节码被Java虚拟机执行,在Java虚拟机在执行这些字节码之前获取这些字节码信息,并且通过字节码转换器对这些字节码进行修改,来完成一些额外的功能。

在本发明实施例中,服务部署平台以Java Agent方式部署和启动对应业务合并代码的微服务的方式如下:将Java Agent对应的agent.jar包上传到文件服务器,基于测试环境部署平台,在待获取微服务调用链路数据的环境中全量覆盖启动脚本,加入如下脚本内容启动Instrumentation的代理程序:-javaagent:/Users/XXX/code/utopia-microservice-comb/utopia-microserv ice-comb-javaagent/target/utopia-microservice-comb-javaagent-1.0.0-SN APSHOT.jar=${module},60,/Users/XXX/code/utopia-microservice-comb/utopia-microservice-comb-core/target/utopia-microservice-comb-core-1.0.0-SNAPSHOT.jar。

因为上传的agent.jar包当中含有Java Agent的相关实现,而相关的收集过程,解析流程,以及收集数据消息发送流程均在core.jar包当中,因此在自动部署的服务中,由于Java Agent的存在,在实现ClassFileTransfomer接口的时候,transform方法会在类文件被加载时调用,从而实现微服务链路信息的静态和自动收集。ClassFileTransfomer用于转换类文件,对Java类文件的操作可以理解为对一个byte数组的操作(将类文件的二进制字节流读入一个byte数组),开发者可以在ClassFileTransformer的transform方法当中得到,操作并最终返回一个类的定义(一个byte数组)。byte是计算机最基础的存储单位和最基础的通讯单位。

现有系统框架都是基于Service Mesh的思想,Service Mesh是一个基础设施层,用于处理服务间通信。在实际应用当中,Service Mesh通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。这些框架需要在线上业务操作的基础上完成收集,所以要完成对微服务调用链路的收集,所有线上环境部署的微服务需要引入相应框架的依赖,将导致对线上业务运行环境的侵入,导致梳理效率低,而且这些收集工作将对线上环境造成额外负担以及资源损耗。同时,现有系统想要收集到某一条实际存在的调用链路,必须近期有相关的业务方调用才能收集到,导致基于动态调用收集的链路信息很难做到全面,举例来说,当某业务代码有基于特殊条件的特殊处理逻辑时,只有满足特殊条件时才能触发服务调用链路信息收集,但是这种基于特殊条件的特殊处理逻辑场景在实际业务中很少出现,因此导致通过动态链路收集的方式,收集不到在这个特殊条件下的链路信息。再比如,在实际业务中,经常出现配置过一次业务参数之后,很长时间不会再次调用的场景,因此导致动态链路收集同样很难收集到该链路信息。

本发明实施例是一种基于Java Agent的静态链路收集,每次代码合并,就会收集一次链路调用信息,是一种基于代码合并事件的监控,不依赖于线上环境,同时也不需要必须有业务方实际调用才能收集到调用链路信息,保证覆盖多种业务场景,从而保证所收集到的微服务调用关系数据的完整性。

在本发明实施例中,在该微服务链路信息收集完毕之后,在测试环境中通过异步的方式删除该服务模块,进行资源回收。

目前开发人员通过接口调用关系的时候,大多还是通过口口相传,手动记录的方式进行,导致服务调用链路梳理效率低且收集到的服务调用链路不完整,同时在业务代码更新时,不会对服务调用链路数据进行更新。

本发明提供的一种微服务调用链路更新方法,客户端通过响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;将微服务调用链路数据发送至服务端,以使服务端根据微服务调用链路数据更新已有微服务调用链路数据,实现无侵入、静态、自动收集更加完整的微服务调用链路数据,实现无侵入、静态、自动收集更完整的调用链路数据,为开发人员在接口梳理及改动影响面分析时提高效率,降低因接口改动而未同步其他接口导致线上问题的概率。

基于上述任一实施例,如图3所示,收集业务代码合并事件对应的微服务调用关系数据,包括:

步骤301:在测试环境,通过字节码增强方式收集第一微服务内方法级别调用关系数据;

在本发明实施例中,以Java Agent的方式进行服务的部署和启动后,加载指定路径的工具类,即加载Java Agent对应的jar包中core.jar包当中指定的工具类CombBootstrap,通过将Java Agent对应preMain方法中的agentArgs以及Instrumentation传入对应的工具类CombBootstrap当中。基于反射进行实例化,工具类的内部实现对ClassFileTransformer接口的实现,以及对transform方法的重写,在重写方法中基于JavaAssist库对服务中所有加载的类进行解析收集,并且根据全路径过滤非业务代码的方法。

在本发明实施例中,Java虚拟机启动时会先执行premain方法,这个方法是在main方法启动前拦截大部分类的加载活动,因为可以拦截类的加载,因此就可以结合第三方的字节码编译工具,比如Java Assist来改写实现类。Instrumentation是Java Agent的一个API,允许Java虚拟机在加载某个class文件之前对其字节码进行修改,同时也支持对已加载的class(类字节码)进行重新加载。

步骤302:通过抽象语法树收集第二微服务内方法级别调用关系数据;

在本发明实施例中,在Java Agent对应的transform方法中,通过FernFlower框架将对应class文件的字节码进行序列化,FernFlower用于反编译,并通过JDT(JavaDevelopment Tools,Eclipse平台的全功能的Java集成开发环境插件)、AST(AbstractSyntax Tree,抽象语法结构树)相关工具,对解析的类进行结构化,形成抽象语法树。基于该抽象语法树收集的方法调用信息,获取方法异步调用关系等基于Java Assist库收集不到的信息,整理拼接成方法的全类名加入参全类名的形式。通过抽象语法树收集到的第二微服务内方法级别调用关系数据比第一微服务内方法级别调用关系数据更具体,是关于服务内方法级别调用关系源码层级的数据。

步骤303:整合第一微服务内方法级别调用关系数据和第二微服务内方法级别调用关系数据,得到微服务内方法级别调用关系数据。

在本发明实施例中,整合通过抽象语法树收集的信息与Java Assist收集到的信息取,最后微服务内的方法调用信息在内存中的数据结构大致为:的K-V结构,得到完整的离散的微服务内方法级别调用关系数据,为后续解析完整的微服务调用链路数据提供数据支持。其中,K-V结构是Java架构中常见的一种数据结构,K代表java键值中的Key,V代表java键值中的Value。

基于上述任一实施例,如图4所示,通过字节码增强方式收集第一微服务内方法级别调用关系数据,包括:步骤401:在业务代码合并事件对应的微服务的类中添加字节码,字节码包括收集链路字节码、解析链路字节码中的至少一种;步骤402:根据添加的字节码对业务代码合并事件对应的微服务的类中的方法进行解析,得到第一微服务内方法级别调用关系数据。

在本发明实施例中,通过添加收集链路字节码、解析链路字节码,实现对微服务内的收集,为微服务间调用关系数据的收集提供支持。

基于上述任一实施例,如图5所示,通过抽象语法树收集第二微服务内方法级别调用关系数据,包括:步骤501:对业务代码合并事件对应的微服务的类文件进行字节码序列化解析;步骤502:将解析出的字节码形式类文件转换为抽象语法树形式类文件,得到第二微服务内方法级别调用关系数据。

在本发明实施例中,通过抽象语法树实现对微服务内调用关系数据的收集。

基于上述任一实施例,如图6所示,解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,包括:

步骤601:输入微服务内方法级别调用关系数据至第一有向拓扑模型,求解第一有向拓扑模型,得到微服务内方法级别调用链路数据;

在本发明实施例中,将微服务内部方法作为第一有向拓扑图的节点,微服务内部方法间的调用作为节点间的链接,得到第一有向拓扑图;通过基于回溯的DFS(Deep FirstSearch,深度优先搜索)算法遍历完整的微服务内方法级别调用关系数据,将方法自动编号,将第一有向拓扑图转换为对应的第一邻接矩阵,得到第一有向拓扑模型,求解第一有向拓扑模型,得到完整的微服务内方法级别调用链路数据,如图7所示,图7中0号,6号节点表示调用链路起点方法,2,4,5节点表示调用链路终点方法。其中,DFS是一种图遍历算法,它从一个起始点开始,一直往下走直到不能再走为止,然后返回到前一个节点,继续探索它的其他分支,直到找到目标节点为止。

步骤602:根据微服务内方法级别调用链路数据,获得微服务内方法级别调用链路数据的起点、终点和微服务间接口级别调用关系数据;

在本发明实施例中,根据微服务内方法级别调用链路数据,对标识注解进行解析,获取微服务内方法级别调用链路数据的起点和终点的方法如下:对于第一邻接矩阵,矩阵入度为0的列序号表示对应方法为整个调用链路的起点,即没有别的方法调用它,矩阵出度为0的行序号表示对应方法为调用链路的终点,即该方法没有调用其它方法,从而确定微服务内方法级别调用链路数据的起点和终点。

在本发明实施例中,基于微服务内方法级别调用链路数据的起点和终点并结合Java Assist解析出的微服务内部方法级别调用关系数据,获取到本微服务所有feign接口下调用的其他服务feign接口的接口注解信息,即解析得到服务名称(fromApplication)、调用服务接口路径(fromPath)、被调用服务名称(toApplication)、被调用服务接口(toPath)、调用类型(type)等微服务间接口级别调用链路关系数据。Feign是Spring Cloud提供的声明式、模板化的HTTP客户端,feign会完全代理HTTP请求,调用feign接口只需要像调用方法一样调用它就可以完成服务请求及相关处理。Spring Cloud是一系列框架的有序集合。

步骤603:输入微服务间接口级别调用关系数据至第二有向拓扑模型,求解第二有向拓扑模型,得到微服务间接口级别调用链路数据;

在本发明实施例中,将微服务间接口作为第二有向拓扑图的节点,微服务间接口之间的调用作为节点间的链接,得到第二有向拓扑图;通过基于回溯的DFS算法遍历完整的微服务间接口级别调用关系数据,将接口自动编号,将第二有向拓扑图转换为对应的第二邻接矩阵,得到第二有向拓扑模型,求解第二有向拓扑模型,得到完整的微服务间接口级别调用链路数据,例如A服务中a接口调用了B服务中b接口。

步骤604:整合微服务内方法级别调用链路数据和微服务间接口级别调用链路数据,得到微服务调用链路数据。

在本发明实施例中,通过基于微服务调用关系数据构建有向拓扑图,并将有向拓扑图转换为邻接矩阵,求解邻接矩阵,得到微服务调用链路数据,在实际业务应用场景中的接口或者方法的调用链路,提高工作效率。还可以通过可视化的方式展示微服务调用链路数据,如图8所示为一种微服务调用链路数据可视化效果图。

基于上述任一实施例,微服务调用链路数据采用自定义数据协议,自定义数据协议内容包括调用服务名称、调用服务接口路径、被调用服务名称、被调用服务接口、调用类型中的至少一种。

本发明实施例提供一种微服务调用链路更新方法,如图9所示,应用于服务端,包括:步骤901:接收客户端发送的微服务调用链路数据;步骤902:根据接收到的微服务调用链路数据更新已有微服务调用链路数据。

在本发明实施例中,在Java Agent收集完毕相关服务内接口调用其它服务接口信息后,发送所有本次收集到的服务间接口调用链路数据消息,并且在发送完毕后,发送一个收集完毕标识。服务端接收到相关数据后,逐条跟现有存储信息进行比对,如果发现是新增接口,或是新的调用链路,即在进行数据的更新。并在内存中维护一个全局的Map,即当前服务接收到的所有接口调用信息。接收到发送完毕标识后,进行二次确认,并将该服务已存储的调用数据和内存中记录的数据进行比对,判断是否有接口已经删除,从而操作数据库去掉无用的接口调用数据。基于以上两个步骤,本发明实施例在静态自动收集服务调用链路信息的基础上实现了历史数据的自动更新。

基于上述任一实施例,根据接收到的微服务调用链路数据更新已有微服务调用链路数据,包括:根据接收到的微服务调用链路数据增加已有微服务调用链路数据对应的新微服务调用接口和/或微服务调用关系。

基于上述任一实施例,根据接收到的微服务调用链路数据更新已有微服务调用链路数据,包括:根据接收到的微服务调用链路数据剔除已有微服务调用链路数据对应的微服务调用接口和/或微服务调用关系。

在本发明实施例中,可以实现对已废弃接口对应的微服务调用链路数据的删除,而传统的微服务调用链路更新不能实现这一功能,对于之前有过调用且收集的链路信息,但后续在某一次迭代后去掉了相关业务代码,传统的微服务调用链路更新对于动态收集的场景是无法感知的,相关链路数据无法删除。

基于上述任一实施例,根据接收到的微服务调用链路数据更新已有微服务调用链路数据,包括:根据接收到的微服务调用链路数据增加已有微服务调用链路数据对应的新微服务调用接口和/或微服务调用关系,根据接收到的微服务调用链路数据剔除已有微服务调用链路数据对应的微服务调用接口和/或微服务调用关系。

在本发明实施例中,微服务调用链路数据更新逻辑如图10所示,服务端根据接收到的微服务调用链路数据与已有的微服务调用链路数据进行对比,如果有新增数据,在数据库中新增相应的微服务调用接口和/或微服务调用关系,如果有删除数据,在数据库中剔除相应的微服务调用接口和/或微服务调用关系,进而在数据库中完成完整的微服务调用链路数据更新。

在本发明实施例中,根据微服务调用链路数据,更新历史数据,不但对新增的微服务调用链路数据进行更新,同时对于已删除的微服务调用链路数据,对数据库中存储的历史数据剔除已删除的微服务调用接口和/或微服务调用关系。而当前链路追踪系统对于链路调用信息的更新是基于日志进行更新,且只能对新增的链路进行更新。

本发明实施例提供一种微服务调用链路更新方法,如图11所示,该方法包括:步骤1101:客户端响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;步骤1102:解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;步骤1103:将微服务调用链路数据发送至服务端;步骤1104:服务端接收客户端发送的微服务调用链路数据;步骤1105:根据接收到的微服务调用链路数据更新已有微服务调用链路数据。

在本发明实施例中,通过客户端响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;将微服务调用链路数据发送至服务端;服务端接收客户端发送的微服务调用链路数据;根据接收到的微服务调用链路数据更新已有微服务调用链路数据,实现了对线上运行业务无任何侵入性的效果,同时基于代码合并事件,静态地进行收集链路信息,不需要依赖实际业务操作,且随着业务代码的更新,能够进行微服务调用链路数据的收集以及数据更新。

本发明提供的一种微服务调用链路更新方法,通过应用于客户端,响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;将微服务调用链路数据发送至服务端,以使服务端根据微服务调用链路数据更新已有微服务调用链路数据,实现无侵入、静态、自动收集更完整的调用链路数据,为开发人员在接口梳理及改动影响面分析时提高效率,降低因接口改动而未同步其他接口导致线上问题的概率。

本发明实施例提供一种微服务调用链路更新装置,如图12所示,应用于客户端,包括:收集模块1201,用于响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;解析模块1202,用于解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;发送模块1203,用于将微服务调用链路数据发送至服务端,以使服务端根据微服务调用链路数据更新已有微服务调用链路数据。

本发明实施例提供一种微服务调用链路更新装置,在测试环境中,响应于代码托管平台GitLab当中代码合并master的事件,触发对应微服务自动构建部署任务,收集微服务基于feign的RPC(Remote Procedure Call,远程过程调用)调用信息后,发送消息给服务端,服务端自动比对历史数据,并进行更新。相对于传统的人工统计接口调用链路的形式,极大地提高了开发人员进行收集,评估影响面等工作的效率,另一方面也极大地提高了微服务调用链路数据收集的完整性,避免接口修改后造成的线上问题。

本发明实施例提供一种微服务调用链路更新装置,如图13所示,应用于服务端,包括:接收模块1301,用于接收客户端发送的微服务调用链路数据;更新模块1302,用于根据接收到的微服务调用链路数据更新已有微服务调用链路数据。

本发明实施例提供一种微服务调用链路更新装置,基于字节码增强,抽象语法树分析等技术,自动、静态地收集微服务所有基于feign的RPC调用链路信息,并且在监听到业务代码合并事件时,自动重新收集对应微服务数据,并将数据库中存储的历史数据进行更新。

本发明实施例提供一种微服务调用链路更新系统,如图14所示,该系统包括:客户端1401和服务端1402,客户端1401用于执行应用于客户端的微服务调用链路更新方法;服务端1402用于执行应用于服务端的微服务调用链路更新方法。

本发明提供的一种微服务调用链路更新系统,该系统包括客户端和服务端,客户端用于执行应用于客户端的微服务调用链路更新方法;服务端用于执行应用于服务端的微服务调用链路更新方法,通过微服务调用链路更新系统,实现无侵入、静态、自动收集更完整的调用链路数据,为开发人员在接口梳理及改动影响面分析时提高效率,降低因接口改动而未同步其他接口导致线上问题的概率。

又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的微服务调用链路更新方法,该方法包括,应用于客户端,响应于业务代码合并事件,收集业务代码合并事件对应的微服务调用关系数据;解析业务代码合并事件对应的微服务调用关系数据,得到微服务调用链路数据,微服务调用链路数据包括微服务内部方法级别调用链路数据和微服务间接口级别调用链路数据;将微服务调用链路数据发送至服务端,以使服务端根据微服务调用链路数据更新已有微服务调用链路数据;和/或,应用于服务端,接收客户端发送的微服务调用链路数据;根据接收到的微服务调用链路数据更新已有微服务调用链路数据。

以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 微服务的双活处理方法、装置及系统、设备、存储介质
  • 调用方法、调用装置、服务器、终端及计算机可读存储介质
  • 一种监控虚拟机中系统调用的方法、装置及存储介质
  • 功能调用系统、方法、装置及存储介质
  • 函数调用和数据访问的方法、系统、存储介质、处理器和装置
  • 微服务调用链路数据处理方法、装置、服务器及存储介质
  • 基于微服务系统的服务调用方法及装置、存储介质
技术分类

06120116485684