CN115357471A - 一种微服务调试方法、装置及系统 - Google Patents

一种微服务调试方法、装置及系统 Download PDF

Info

Publication number
CN115357471A
CN115357471A CN202110533935.6A CN202110533935A CN115357471A CN 115357471 A CN115357471 A CN 115357471A CN 202110533935 A CN202110533935 A CN 202110533935A CN 115357471 A CN115357471 A CN 115357471A
Authority
CN
China
Prior art keywords
micro
service
call chain
service call
debugging
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.)
Pending
Application number
CN202110533935.6A
Other languages
English (en)
Inventor
李�浩
潘晓林
沈强
彭辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Mobile Communications Group Co Ltd
China Mobile Shanghai ICT Co Ltd
CM Intelligent Mobility Network Co Ltd
Original Assignee
China Mobile Communications Group Co Ltd
China Mobile Shanghai ICT Co Ltd
CM Intelligent Mobility Network Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Mobile Communications Group Co Ltd, China Mobile Shanghai ICT Co Ltd, CM Intelligent Mobility Network Co Ltd filed Critical China Mobile Communications Group Co Ltd
Priority to CN202110533935.6A priority Critical patent/CN115357471A/zh
Publication of CN115357471A publication Critical patent/CN115357471A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种微服务调试方法、装置及系统,涉及微服务调试技术领域。该方法包括:从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;根据目标微服务调用链数据,在本地开发环境中重现异常现象;在异常现象中,对目标微服务调用链上的微服务节点进行调试。本发明的方案,解决了微服务运维测试过程难以定位问题根源的问题。

Description

一种微服务调试方法、装置及系统
技术领域
本发明涉及微服务调试技术领域,特别是指一种微服务调试方法、装置及系统。
背景技术
随着云计算和互联网相关技术的不断发展,传统的软件架构已经越来越难以适应在云计算环境下对软件项目能够弹性伸缩和快速迭代的需求,为了应对新技术所带来的挑战,越来越多的软件项目采用微服务架构来取代传统的单体应用架构。微服架构相对于传统的单体应用架构赋予了软件:
1.弹性伸缩的能力,软件服务在面对突如其来大量访问请求时系统能够灵活调度计算资源增强处理并发的能力。
2.快速迭代升级的能力,针对客户需求相应的更新升级所依赖的微服务,而不会影响到整个软件系统。
但是,由于软件拆分成了多个独立的微服务,在运维测试过程中如果某个微服务出现异常,定位和复现问题是比较困难的,特别是在生产环境中,如果需要对出现问题的微服务进行修改和调试是不被允许的。目前只能用传统的方式通过登录服务器查询微服务输出的日志同时对比程序代码的逻辑来判断和定位问题的根源,这种方式效率极低并且不容易发现问题。
发明内容
本发明的目的是提供一种微服务调试方法、装置及系统,可解决微服务运维测试过程难以定位问题根源的问题。
为达到上述目的,本发明的实施例提供一种微服务调试方法,包括:
从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
根据目标微服务调用链数据,在本地开发环境中重现异常现象;
在异常现象中,对目标微服务调用链上的微服务节点进行调试。
可选地,所述微服务调试方法还包括:
通过微服务网关处的监听程序,监听系统请求,所述系统请求携带有微服务调用链数据;
记录所述系统请求的微服务调用链数据,构建所述微服务调用链数据库;所述微服务调用链数据包括:微服务调用链上的微服务节点的输入数据、微服务调用链上的微服务节点的输出数据、微服务调用链上的微服务节点的时延数据、业务API名称、微服务调用链标识、微服务调用链调用的微服务的CPU/内存、微服务调用链的调用链深度、微服务调用链的调用链错误日志数量和微服务调用链的调用链告警日志数量中的至少一项。
可选地,从微服务调用链数据库中,获取发生异常的目标微服务调用链数据的步骤,包括:
在从微服务调用链数据库中,获取微服务调用链数据的特征值;
将所述特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据。
可选地,将所述特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据的步骤,包括:
根据以下公式,确定第一微服务调用链是否工作正常;
Figure BDA0003068976850000021
若p(X)<ε,则确定所述第一微服务调用链发生异常,并将所述第一微服务调用链的数据确定为所述目标微服务调用链数据;
其中,
Figure BDA0003068976850000022
Figure BDA0003068976850000023
X(i)为特征值样本集合{X(1),X(2)……,X(m)}中的特征值样本,m为所述微服务调用链数据库中的微服务调用链的历史数量,ε为预设值。
可选地,所述特征值样本包括:调用链整体耗时、调用链负载、调用链深度、调用链错误日志数量和调用链告警日志数量中的至少一项特征值。
可选地,从微服务调用链数据库中,获取发生异常的目标微服务调用链数据的步骤之前,还包括:
接收本地调试请求;
根据所述调试请求,建立协同开发插件与协同开发系统的websocket连接;其中,所述目标微服务调用链数据是基于所述websocket连接获取的。
可选地,根据所述目标微服务调用链数据,在本地开发环境中重现异常现象的步骤,包括:
通过协同开发系统对所述目标微服务调用链数据进行分析,确定异常分析结果;
通过协同开发插件,从远端环境下载所述异常分析结果对应的微服务;
通过所述协同开发插件,在代码仓库中拉取所述微服务对应版本的微服务代码到本地开发环境;
根据所述微服务代码,在所述本地开发环境中重现异常现象。
可选地,根据所述微服务代码,在所述本地开发环境中重现异常现象的步骤,包括:
将所述微服务代码和所述本地开发环境中的微服务镜像副本进行关联,重现所述异常现象。
为达到上述目的,本发明的实施例提供一种微服务调试装置,包括:
获取模块,用于从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
构建模块,用于根据目标微服务调用链数据,在本地开发环境中重现异常现象;
调试模块,用于在异常现象中,对目标微服务调用链上的微服务节点进行调试。
可选地,所述微服务调试装置还包括:
监听模块,用于通过微服务网关处的监听程序,监听系统请求,所述系统请求携带有微服务调用链数据;
记录模块,用于记录所述系统请求的微服务调用链数据,构建所述微服务调用链数据库;所述微服务调用链数据包括:微服务调用链上的微服务节点的输入数据、微服务调用链上的微服务节点的输出数据、微服务调用链上的微服务节点的时延数据,业务API名称,微服务调用链标识,微服务调用链调用的微服务的CPU/内存、微服务调用链的调用链深度、微服务调用链的调用链错误日志数量和微服务调用链的调用链告警日志数量中的至少一项。
可选地,所述获取模块包括:
第一获取子模块,用于在从微服务调用链数据库中,获取微服务调用链数据的特征值;
第二获取子模块,用于将所述特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据。
可选地,所述第二获取子模块包括:
第一确定单元,用于根据以下公式,确定第一微服务调用链是否工作正常;
Figure BDA0003068976850000041
第二确定单元,用于若p(X)<ε,则确定所述第一微服务调用链发生异常,并将所述第一微服务调用链的数据确定为所述目标微服务调用链数据;
其中,
Figure BDA0003068976850000042
Figure BDA0003068976850000043
X(i)为特征值样本集合{X(1),X(2)……,X(m)}中的特征值样本,m为所述微服务调用链数据库中的微服务调用链的历史数量,ε为预设值。
可选地,所述特征值样本包括:调用链整体耗时、调用链负载、调用链深度、调用链错误日志数量和调用链告警日志数量中的至少一项特征值。
可选地,所述微服务调试装置还包括:
接收模块,用于接收本地调试请求;
建立模块,用于根据所述调试请求,建立协同开发插件与协同开发系统的websocket连接;其中,所述目标微服务调用链数据是基于所述websocket连接获取的。
可选地,所述构建模块包括:
第一确定子模块,用于通过协同开发系统对所述目标微服务调用链数据进行分析,确定异常分析结果;
下载子模块,用于通过协同开发插件,从远端环境下载所述异常分析结果对应的微服务;
拉取子模块,用于通过所述协同开发插件,在代码仓库中拉取所述微服务对应版本的微服务代码到本地开发环境;
构建子模块,用于根据所述微服务代码,在所述本地开发环境中重现异常现象。
可选地,所述构建子模块包括:
构建单元,用于将所述微服务代码和所述本地开发环境中的微服务镜像副本进行关联,重现所述异常现象。
为达到上述目的,本发明的实施例提供一种微服务调试系统,包括:本地开发环境、集成测试环境/生产环境、协同开发系统和协同开发插件;其中,协同开发系统包括:智能微服务调用链异常检测模块,用于:
从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
根据目标微服务调用链数据,在本地开发环境中重现异常现象;
在异常现象中,对目标微服务调用链上的微服务节点进行调试。
可选地,所述集成测试环境/生产环境包括:容器集群、镜像仓库、代码仓库和日志系统。
可选地,所述协同开发系统还包括:
容器集群集成模块,用于与所述容器集群、镜像仓库、代码仓库和日志系统集成,通过集成容器集群的API查询微服务容器实例的信息;
微服务配置文件管理模块,用于管理微服务的配置文件以及微服务配置文件的版本管理,并为所述协同开发插件提供微服务配置文件查询和下载API;
微服务版本管理模块,用于管理和查询微服务容器的版本号和微服务代码版本号;
协同开发插件连接管理模块,用于与所述协同开发插件建立websocket连接。
可选地,所述协同开发插件包括:
容器API集成模块,用于集成本地容器环境,并通过调用API来执行本地容器环境的管理相关操作;
配置模块,用于导入微服务代码到集成开发环境(Integrated DevelopmentEnvironment,IDE),设置微服务本地容器连接地址和端口,配置微服务代码调试模式;
微服务代码调试模块,用于调用协同开发系统API构建本地开发环境。
本发明的上述技术方案的有益效果如下:
本发明实施例中,在生产环境微服务代码级别的问题定位,大大提升了效率,降低开发联调风险。完全不依赖于远端环境,通过将所需调试的微服务镜像按需自动下载到开发者本地环境中进行代码更改还调试,完全不会影响到其他的开发人员或者是正在执行测试任务的测试环境和执行生产的生产环境。
附图说明
图1为本发明实施例的微服务调试方法的流程示意图之一;
图2为本发明实施例的微服务调试方法的流程图之二;
图3为本发明实施例的微服务调试装置的结构示意图;
图4为本发明实施例的微服务调试系统的架构示意图之一;
图5为本发明实施例的微服务调试系统的架构示意图之二;
图6为本发明实施例的协同开发系统的模块示意图;
图7为本发明实施例的协同开发插件的模块示意图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
在本发明的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
另外,本文中术语“系统”和“网络”在本文中常可互换使用。
在本申请所提供的实施例中,应理解,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
如图1所示,本发明实施例的一种微服务调试方法,包括:
步骤11:从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
其中,步骤11之前还可包括:通过微服务网关处的监听程序,监听系统请求,系统请求携带有微服务调用链数据;记录系统请求的微服务调用链数据,构建微服务调用链数据库;微服务调用链数据包括:微服务调用链上的微服务节点的输入数据、微服务调用链上的微服务节点的输出数据、微服务调用链上的微服务节点的时延数据、业务API名称、微服务调用链标识、微服务调用链调用的微服务的CPU/内存、微服务调用链的调用链深度、微服务调用链的调用链错误日志数量和微服务调用链的调用链告警日志数量中的至少一项。
通过部署在微服务网关处的监听程序,监听系统请求,一旦有请求达到网关,监听程序启动异步线程,开始记录该请求的调用链信息,调用链的信息包括:业务API名称、微服务调用链标识(TraceID)、微服务调用链上各个微服务的CPU/内存、微服务调用链的调用深度、微服务调用链各个微服务输出的错误日志条数、微服务调用链各个微服务输出的告警数量。
调用链完成之后,启动异常检测算法,分析该次调用链是否正常,筛选出发生异常的目标微服务调用链数据。其中,每个调用链都对应相应的业务API,是客户端对业务API的调用触发了相关调用链的启动,所以每个调用链异常检测的样本数据是根据每个调用链对应的业务API名称进行选取。
步骤12:根据目标微服务调用链数据,在本地开发环境中重现异常现象;
其中,本发明实施例中,本地开发环境是基于Docker引擎的,Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
步骤13:在异常现象中,对目标微服务调用链上的微服务节点进行调试。
其中,步骤11包括:
在从微服务调用链数据库中,获取微服务调用链数据的特征值;
将特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据。
例如:将特征值代入多元高斯分布算法进行计算,判断业务请求所触发的微服务调用链是否工作正常。具体地,将特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据的步骤,包括:
根据以下公式,确定第一微服务调用链是否工作正常;
Figure BDA0003068976850000081
若p(X)<ε,则确定第一微服务调用链发生异常,并将所述第一微服务调用链的数据确定为所述目标微服务调用链数据;
其中,
Figure BDA0003068976850000082
Figure BDA0003068976850000083
X(i)为特征值样本集合{X(1),X(2)……,X(m)}中的特征值样本,m为微服务调用链数据库中的微服务调用链的历史数量,ε为预设值,如ε=0.01。
在典型的基于微服务架构的平台中,微服务实例多、服务间依赖关系复杂、服务调用链路长,对系统问题的定位和异常恢复工作难度较大。基于多元高斯分布的异常检测算法,从海量的微服务调用链数据中,筛选出异常的微服务调用链,并将微服务调用链以及调用链上每个微服务节点输入、输出和时延数据从数据库中拉取出来并通过微服务开发协同系统导入到本地开发环境的数据库中,本地开发环境将利用这些数据重现生产环境中的异常现象,并开始调试。
可选地,特征值样本包括:调用链整体耗时、调用链负载、调用链深度、调用链错误日志数量和调用链告警日志数量中的至少一项特征值。其中,基于多元高斯分布的异常检测算法的微服务调用链特征值选取,如下表所示:
Figure BDA0003068976850000091
保存异常调用链数据信息,包括微服务实例的性能、调用链上各个微服务的输入参数和输出结果、调用链上各微服务处理请求所耗时间,这些数据将提供给微服务本地调试使用。
进一步地,步骤11之前还包括:接收本地调试请求;根据调试请求,建立协同开发插件与协同开发系统的网页套接字(websocket)连接;其中,目标微服务调用链数据是基于websocket连接获取的。
具体地,开发者可登录到协同开发系统,查找潜在故障的微服务调用链,开发者选取微服务调用链,向协同开发系统提交本地调试请求,同时开发者登录成功后本地环境中的协同开发插件与协同开发系统建立websocket连接。协同开发系统是一个软件系统,以门户网站(Web Portal)的形式展现,可以接收开发者的请求,并发送给远端容器环境,同时将信息反馈给开发者本地环境中的协同开发插件。协同开发插件是一个开发插件(如使用Python开发),运行在开发者本地的容器开发环境中,用于接收协同开发系统发送过来的指令,运行或者更新本地容器,并与开发者本地IDE集成,拉取微服务代码。
可选地,步骤12包括:通过协同开发系统对目标微服务调用链数据进行分析,确定异常分析结果;通过协同开发插件,从远端环境下载异常分析结果对应的微服务;通过协同开发插件,在代码仓库中拉取微服务对应版本的微服务代码到本地开发环境;根据微服务代码,在本地开发环境中重现异常现象。
例如:开发者可通过协同开发系统提供的智能异常分析功能对目标微服务调用链数据进行分析,分析出存在潜在问题的微服务调用链,即确定异常分析结果。开发者根据该异常分析结果从协同开发插件向远端环境发送请求,以自动下载异常分析结果中存在潜在问题的微服务调用链中所涉及到的微服务到本地,进行开发调试。具体的,通过匹配环境中正在运行的微服务镜像版本和其代码构建版本,能快速同步容器镜像和代码到本地开发环境,并导入到开发者的IDE,同时通过保存的微服务调用链上的微服务输入输出数据,组装成自动化测试请求,对本下载到本地的微服务进行自动化测试,帮助开发者快速定位有错误的微服务。
其中,根据微服务代码,在本地开发环境中重现异常现象的步骤,包括:将微服务代码和本地开发环境中的微服务镜像副本进行关联,重现异常现象。协同开发插件在代码仓库中拉取到对应版本的微服务代码并导入到开发者IDE中,代码导入完成之后协同开发插件将IDE中的代码和本地容器环境中微服务镜像副本进行关联,通过这种方式开发者可以在本地环境中迅速定位代码问题和进行代码测试联调,并且无需依赖远端环境,大大提升了开发效率。其中,IDE是开发者所使用的代码开发工具如:集成开发环境(Eclipse)、vs码(vscode)等。
下面将结合附图对本发明实施例的微服务调试方法做进一步说明。
如图2所示,微服务调试方法包括:
步骤21:开发者向协同开发系统提交下载微服务到本地开发环境的请求。
具体地,开发者登录到协同开发系统,查找潜在故障的微服务调用链,开发者选取微服务调用链,向协同开发系统提交本地调试请求,同时开发者登录成功后本地环境中的协同开发插件与协同开发系统建立websocket连接。
步骤22:协同开发平台在容器集群(Kubernetes)中查询微服务的镜像版本、代码构建标签序号、微服务配置版本号。协同开发系统接收到开发者提交的微服务本地调试请求,开始在容器集群搜索开发者指定的微服务的信息,信息包括微服务的镜像版本号、该镜像的代码构建标签序号和微服务的配置版本号。其中,Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理,在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
步骤23:协同开发系统将微服务镜像版本号、代码构建标签序号、微服务配置版本号需要传递给协同开发插件。协同开发系统通过与开发者本地环境中的协同开发插件已建立的连接,将微服务的镜像版本号、该镜像的代码构建标签序号和微服务的配置版本号传递给协同开发插件。
步骤24:协同开发插件获取了微服务的镜像版本号、镜像的代码构建标签序号和微服务的配置版本号,在本地开发环境同时启动下载任务,包括:步骤241:镜像下载、步骤242:配置文件下载和步骤243:代码下载。
步骤241:协同开发插件将获得的微服务镜像版本提交给镜像仓库,拉取微服务镜像到本地开发环境。开发者本地开发环境中的协同开发插件使用微服务镜像版本号,以http的方式向容器镜像仓库发起容器镜像拉取请求,请求的合法性经过容器镜像仓库验证后响应拉取请求,协同开发插件下载容器镜像到本地开发环境。
步骤242:协同开发插件将获得的微服务配置版本号提交给容器集群拉取微服务配置。协同开发插件使用微服务的配置版本号,以http的方式向协同开发系统发起配置文件下载请求,请求的合法性经过协同开发系统验证后响应下载请求,协同开发插件在本地开发环境中创建配置文件挂载目录,并下载微服务配置文件到本地开发环境目录中。
步骤243:协同开发插件将获得的微服务代码构建标签序号提交给代码仓库,拉取相应版本代码到本地IDE。协同开发插件使用镜像的代码构建标签序号以http的方式向代码仓库(GitLab)发起代码下载请求,请求的合法性经过代码仓库统验证后响应下载请求,协同开发插件将代码下载到本地文件系统,并导入到IDE中。
步骤25:协同开发插件在本地容器环境中启动微服务镜像,待微服务的镜像下载、配置文件下载和代码下载完成之后,启动微服务镜像。
步骤26:协同开发插件将配置文件导入本地容器环境,以将微服务配置文件与微服务容器进行挂载。
步骤27:组装自动化测试。协同开发插件为微服务调用链上的各个微服务自动组装微服务调用链上每个微服务的输入输出参数形成测试请求,自动发送到微服务调用链上的微服务进行自动化测试,通过比对正常情况下微服务响应时间和返回值,并逐步缩小微服务调用链上的微服务调试范围,并最终定位出现问题的微服务。
步骤28:开发者在本地IDE中调试微服务。协同开发插件,将本地容器访问地址和端口信息更新到IDE的排除故障(Debug)配置文件,启动IDE,IDE加载本地环境中的微服务代码,开始本地微服务的代码调试工作。
本实施例中微服务基于容器化的开发环境,开发者本地环境基于Docker引擎,开发测试环境基于容器集群。开发者可通过协同开发系统提供的智能异常分析功能分析出存在潜在问题的微服务调用链,开发者通过将将异常分析结果从协同开发插件向远端环境发送请求自动下载调用链中所涉及到的微服务到本地进行开发调试,同时协同开发插件在代码仓库中拉取到对应版本的微服务代码并导入到开发者IDE中,代码导入完成之后协同开发插件将IDE中的代码和本地容器环境中微服务镜像副本进行关联,通过这种方式开发者可以在本地环境中迅速定位代码问题和进行代码测试联调,并且无需依赖远端环境,大大提升了开发效率。
以上介绍了本发明实施例的微服务调试方法,下面将结合附图对其对应的微服务调试装置作进一步说明。
如图3所示,本发明实施例的微服务调试装置300包括但不限于以下功能模块:
获取模块310,用于从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
构建模块320,用于根据目标微服务调用链数据,在本地开发环境中重现异常现象;
调试模块330,用于在异常现象中,对目标微服务调用链上的微服务节点进行调试。
可选地,该微服务调试装置300还包括:
监听模块,用于通过微服务网关处的监听程序,监听系统请求,系统请求携带有微服务调用链数据;
记录模块,用于记录系统请求的微服务调用链数据,构建微服务调用链数据库;微服务调用链数据包括:微服务调用链上的微服务节点的输入数据、微服务调用链上的微服务节点的输出数据、微服务调用链上的微服务节点的时延数据、业务API名称、微服务调用链标识、微服务调用链调用的微服务的CPU/内存、微服务调用链的调用链深度、微服务调用链的调用链错误日志数量和微服务调用链的调用链告警日志数量中的至少一项。
可选地,获取模块310包括:
第一获取子模块,用于在从微服务调用链数据库中,获取微服务调用链数据的特征值;
第二获取子模块,用于将特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据。
可选地,第二获取子模块包括:
第一确定单元,用于根据以下公式,确定第一微服务调用链是否工作正常;
Figure BDA0003068976850000131
第二确定单元,用于若p(X)<ε,则确定所述第一微服务调用链发生异常,并将所述第一微服务调用链的数据确定为所述目标微服务调用链数据;
其中,
Figure BDA0003068976850000141
Figure BDA0003068976850000142
X(i)为特征值样本集合{X(1),X(2)……,X(m)}中的特征值样本,m为微服务调用链数据库中的微服务调用链的历史数量,ε为预设值。
可选地,特征值样本包括:调用链整体耗时、调用链负载、调用链深度、调用链错误日志数量和调用链告警日志数量中的至少一项特征值。
可选地,该微服务调试装置300还包括:
接收模块,用于接收本地调试请求;
建立模块,用于根据调试请求,建立协同开发插件与协同开发系统的websocket连接;其中,目标微服务调用链数据是基于websocket连接获取的。
可选地,构建模块320包括:
第一确定子模块,用于通过协同开发系统对目标微服务调用链数据进行分析,确定异常分析结果;
下载子模块,用于通过协同开发插件,从远端环境下载异常分析结果对应的微服务;
拉取子模块,用于通过协同开发插件,在代码仓库中拉取微服务对应版本的微服务代码到本地开发环境;
构建子模块,用于根据微服务代码,在本地开发环境中重现异常现象。
可选地,构建子模块包括:
构建单元,用于将微服务代码和本地开发环境中的微服务镜像副本进行关联,重现异常现象。
值得指出的是,本发明实施例的微服务调试装置的实施例是与上述微服务调试方法实施例对应的产品实施例,上述方法实施例的所用实现方式均适用于该装置实施例中,并达到相同的技术效果,故在此不再赘述。
本发明实施例的一种可读存储介质,其上存储有程序或指令,所述程序或指令被处理器执行时实现如上所述的微服务调试方法中的步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
本发明实施例还提供了一种微服务调试系统,如图4和图5所示,该系统包括:本地开发环境、集成测试环境/生产环境、协同开发系统和协同开发插件;其中,协同开发系统包括:智能微服务调用链异常检测模块,用于:
从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
根据目标微服务调用链数据,在本地开发环境中重现异常现象;
在异常现象中,对目标微服务调用链上的微服务节点进行调试。
本实施例提出了一种微服务开发和远端环境协同调试的架构方案,其中包含了协同开发系统和协同开发插件两个重要组件模块,微服务协同开发整体架构中协同开发系统集成容器集群环境和协同管理开发插件,协同开发系统集成容器集群的API,并通过与之建立TCP长连接监听集群以及集群容器的状态变化,协同开发系统将其获得的微服务信息同步发送给协同开发插件,协同开发插件使用协同开发系统发送过来的信息和指令管理本地开发环境,从而实现微服务的开发。通过协同开发系统和插件,集成了远端容器集群和本地容器开发环境,能够为开发者快速的建立复杂的、独立的微服务开发环境,并提供了一套有效的开发环境和协同开发工具,极大的提高了微服务开发效率。
可选地,如图5所示,集成测试环境/生产环境包括:容器集群、镜像仓库、代码仓库和日志系统。
可选地,如图6所示,协同开发系统还包括:
容器集群集成模块,用于与容器集群、镜像仓库、代码仓库和日志系统集成,通过集成容器集群的API查询微服务容器实例的信息。可选地,该容器集群集成模块包括:容器实例ID、微服务版本、镜像版本。
微服务配置文件管理模块,用于管理微服务的配置文件以及微服务配置文件的版本管理,并为协同开发插件提供微服务配置文件查询和下载API;
微服务版本管理模块,用于管理和查询微服务容器的版本号和微服务代码版本号;
协同开发插件连接管理模块,用于与协同开发插件建立websocket连接。
可选地,如图7所示,协同开发插件包括:
容器API集成模块,用于集成本地容器环境,并通过调用API来执行本地容器环境的管理相关操作;具体地,此模块负责集成本地容器环境(Docker Engine),通过调用API来创建微服务容器镜像,启动/停止微服务容器,挂载本地目录到容器等容器环境管理相关操作。
配置模块,用于导入微服务代码到IDE,设置微服务本地容器连接地址和端口,配置微服务代码调试模式;
微服务代码调试模块,用于调用协同开发系统API构建本地开发环境。具体地,调用协同开发系统API,查询当前生产环境中存在潜在故障的微服务调用链,微服务代码调试模块下载需要调试的微服务调用链相关数据和微服务镜像到本地开发环境,通过自动组装微服务调用链上每个微服务的输入输出参数形成测试请求,自动发送到微服务调用链上的微服务进行自动化测试,通过比对正常情况下微服务响应时间和返回值,并逐步缩小微服务调用链上的微服务调试范围,并最终定位出现问题的微服务,通过结合IDE代码调试通过对相关微服务进行代码级别调试找出最终问题。
本发明实施例的微服务调试系统中,开发者可以快速构建本地开发环境,在开发者自己的开发环境实现对微服的开发联调,通过智能的异常检测模块可快速实现生产环境微服务错误定位。这种方式不依赖于部署在远程环境中的微服务,开发者完全在本地独立的环境中进行代码调式工作,开发者与开发者之间不存在相互干扰,在提升工作效率的同时也避免了对测试/生产环境造成影响,从而可以大大提升整体项目进度,降低风险。
本发明实施例的一种可读存储介质,其上存储有程序或指令,所述程序或指令被处理器执行时实现如上所述的微服务调试方法中的步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,所述处理器为上述实施例中所述的微服务调试系统中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
进一步需要说明的是,此说明书中所描述的终端包括但不限于智能手机、平板电脑等,且所描述的许多功能部件都被称为模块,以便更加特别地强调其实现方式的独立性。
本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地位于一起,而是可以包括存储在不同位里上的不同的指令,当这些指令逻辑上结合在一起时,其构成模块并且实现该模块的规定目的。
实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储器设备分布。同样地,操作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上(包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于系统或网络上。
在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应的功能,所述硬件电路包括常规的超大规模集成(VLSI)电路或者门阵列以及诸如逻辑芯片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。
上述范例性实施例是参考该些附图来描述的,许多不同的形式和实施例是可行而不偏离本发明精神及教示,因此,本发明不应被建构成为在此所提出范例性实施例的限制。更确切地说,这些范例性实施例被提供以使得本发明会是完善又完整,且会将本发明范围传达给那些熟知此项技术的人士。在该些图式中,组件尺寸及相对尺寸也许基于清晰起见而被夸大。在此所使用的术语只是基于描述特定范例性实施例目的,并无意成为限制用。如在此所使用地,除非该内文清楚地另有所指,否则该单数形式“一”、“一个”和“该”是意欲将该些多个形式也纳入。会进一步了解到该些术语“包含”及/或“包括”在使用于本说明书时,表示所述特征、整数、步骤、操作、构件及/或组件的存在,但不排除一或更多其它特征、整数、步骤、操作、构件、组件及/或其族群的存在或增加。除非另有所示,陈述时,一值范围包含该范围的上下限及其间的任何子范围。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (14)

1.一种微服务调试方法,其特征在于,包括:
从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
根据所述目标微服务调用链数据,在本地开发环境中重现异常现象;
在所述异常现象中,对所述目标微服务调用链上的微服务节点进行调试。
2.根据权利要求1所述的微服务调试方法,其特征在于,还包括:
通过微服务网关处的监听程序,监听系统请求,所述系统请求携带有微服务调用链数据;
记录所述系统请求的微服务调用链数据,构建所述微服务调用链数据库;所述微服务调用链数据包括:微服务调用链上的微服务节点的输入数据、微服务调用链上的微服务节点的输出数据、微服务调用链上的微服务节点的时延数据、业务API名称、微服务调用链标识、微服务调用链调用的微服务的CPU/内存、微服务调用链的调用链深度、微服务调用链的调用链错误日志数量和微服务调用链的调用链告警日志数量中的至少一项。
3.根据权利要求1或2所述的微服务调试方法,其特征在于,从微服务调用链数据库中,获取发生异常的目标微服务调用链数据的步骤,包括:
在从微服务调用链数据库中,获取微服务调用链数据的特征值;
将所述特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据。
4.根据权利要求3所述的微服务调试方法,其特征在于,将所述特征值代入多元高斯分布的异常检测算法进行计算,获取发生异常的目标微服务调用链数据的步骤,包括:
根据以下公式,确定第一微服务调用链是否工作正常;
Figure FDA0003068976840000011
若p(X)<ε,则确定所述第一微服务调用链发生异常,并将所述第一微服务调用链的数据确定为所述目标微服务调用链数据;
其中,
Figure FDA0003068976840000021
Figure FDA0003068976840000022
X(i)为特征值样本集合{X(1),X(2)……,X(m)}中的特征值样本,m为所述微服务调用链数据库中的微服务调用链的历史数量,ε为预设值。
5.根据权利要求4所述的微服务调试方法,其特征在于,所述特征值样本包括:调用链整体耗时、调用链负载、调用链深度、调用链错误日志数量和调用链告警日志数量中的至少一项特征值。
6.根据权利要求1所述的微服务调试方法,其特征在于,从微服务调用链数据库中,获取发生异常的目标微服务调用链数据的步骤之前,还包括:
接收本地调试请求;
根据所述调试请求,建立协同开发插件与协同开发系统的网页套接字websocket连接;其中,所述目标微服务调用链数据是基于所述websocket连接获取的。
7.根据权利要求1所述的微服务调试方法,其特征在于,根据所述目标微服务调用链数据,在本地开发环境中重现异常现象的步骤,包括:
通过协同开发系统对所述目标微服务调用链数据进行分析,确定异常分析结果;
通过协同开发插件,从远端环境下载所述异常分析结果对应的微服务;
通过所述协同开发插件,在代码仓库中拉取所述微服务对应版本的微服务代码到本地开发环境;
根据所述微服务代码,在所述本地开发环境中重现异常现象。
8.根据权利要求7所述的微服务调试方法,其特征在于,根据所述微服务代码,在所述本地开发环境中重现异常现象的步骤,包括:
将所述微服务代码和所述本地开发环境中的微服务镜像副本进行关联,重现所述异常现象。
9.一种微服务调试装置,其特征在于,包括:
获取模块,用于从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
构建模块,用于根据所述目标微服务调用链数据,在本地开发环境中重现异常现象;
调试模块,用于在所述异常现象中,对所述目标微服务调用链上的微服务节点进行调试。
10.一种可读存储介质,其上存储有程序或指令,其特征在于,所述程序或指令被处理器执行时实现如权利要求1至9中任一项所述的微服务调试方法中的步骤。
11.一种微服务调试系统,其特征在于,包括:本地开发环境、集成测试环境/生产环境、协同开发系统和协同开发插件;其中,所述协同开发系统包括:智能微服务调用链异常检测模块,用于:
从微服务调用链数据库中,获取发生异常的目标微服务调用链数据;
根据所述目标微服务调用链数据,在本地开发环境中重现异常现象;
在所述异常现象中,对所述目标微服务调用链上的微服务节点进行调试。
12.根据权利要求11所述的微服务调试系统,其特征在于,所述集成测试环境/生产环境包括:容器集群、镜像仓库、代码仓库和日志系统。
13.根据权利要求12所述的微服务调试系统,其特征在于,所述协同开发系统还包括:
容器集群集成模块,用于与所述容器集群、镜像仓库、代码仓库和日志系统集成,通过集成容器集群的API查询微服务容器实例的信息;
微服务配置文件管理模块,用于管理微服务的配置文件以及微服务配置文件的版本管理,并为所述协同开发插件提供微服务配置文件查询和下载API;
微服务版本管理模块,用于管理和查询微服务容器的版本号和微服务代码版本号;
协同开发插件连接管理模块,用于与所述协同开发插件建立websocket连接。
14.根据权利要求12所述的微服务调试系统,其特征在于,所述协同开发插件包括:
容器API集成模块,用于集成本地容器环境,并通过调用API来执行本地容器环境的管理相关操作;
配置模块,用于导入微服务代码到集成开发环境IDE,设置微服务本地容器连接地址和端口,配置微服务代码调试模式;
微服务代码调试模块,用于调用协同开发系统API构建本地开发环境。
CN202110533935.6A 2021-05-17 2021-05-17 一种微服务调试方法、装置及系统 Pending CN115357471A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110533935.6A CN115357471A (zh) 2021-05-17 2021-05-17 一种微服务调试方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110533935.6A CN115357471A (zh) 2021-05-17 2021-05-17 一种微服务调试方法、装置及系统

Publications (1)

Publication Number Publication Date
CN115357471A true CN115357471A (zh) 2022-11-18

Family

ID=84030862

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110533935.6A Pending CN115357471A (zh) 2021-05-17 2021-05-17 一种微服务调试方法、装置及系统

Country Status (1)

Country Link
CN (1) CN115357471A (zh)

Similar Documents

Publication Publication Date Title
US7694181B2 (en) Automated software testing framework
CN112261118B (zh) 多媒体数据的异常检测方法、终端及服务器
US8321856B2 (en) Supplying software updates synchronously
CN108845940B (zh) 一种企业级信息系统自动化功能测试方法和系统
CN107302476B (zh) 一种测试异步交互系统的自动化测试方法与系统
US20230161694A1 (en) Orchestration for automated performance testing
CN110750458A (zh) 大数据平台测试方法、装置、可读存储介质及电子设备
CN113434158B (zh) 一种大数据组件的自定义管理方法、装置、设备及介质
CN115098156B (zh) 一种网络模态管理系统及管理方法
CN112540924A (zh) 接口自动化测试方法、装置、设备及存储介质
Zaccarelli et al. Stream2segment: An open‐source tool for downloading, processing, and visualizing massive event‐based seismic waveform datasets
Vanhove et al. Tengu: An experimentation platform for big data applications
CN113190286B (zh) 动态远程加载功能插件的mes系统、加载方法、终端及介质
CN110795139A (zh) 客户端批量打包方法、装置、计算机设备和存储介质
CN113672502A (zh) 程序多系统测试方法及其相应的装置、设备、介质
CN115357471A (zh) 一种微服务调试方法、装置及系统
JP2003330756A (ja) 監視制御ソフトウェアの構成管理方法
CN115525545A (zh) 一种基于Docker的自动化测试方法、系统、设备及介质
CN112306492A (zh) 一种基于管理者和工作者架构的支持多平台的自动化编译方法
CN111506339A (zh) 软件开发工具包sdk的变更信息处理方法及装置
CN112698998A (zh) 一种可持续集成的arm服务器出厂测试方法
CN112836220B (zh) 一种云中心环境检查方法
Sleibi et al. Automating Distributed Production Testing
CN117234765B (zh) 一种国产操作系统内核性能下降补丁自动二分定位方法
US11860752B2 (en) Agentless system and method for discovering and inspecting applications and services in compute environments

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