CN114416564A - 一种微服务系统中循环依赖检测方法及系统 - Google Patents

一种微服务系统中循环依赖检测方法及系统 Download PDF

Info

Publication number
CN114416564A
CN114416564A CN202210065403.9A CN202210065403A CN114416564A CN 114416564 A CN114416564 A CN 114416564A CN 202210065403 A CN202210065403 A CN 202210065403A CN 114416564 A CN114416564 A CN 114416564A
Authority
CN
China
Prior art keywords
service
directed graph
services
cyclic
task
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.)
Granted
Application number
CN202210065403.9A
Other languages
English (en)
Other versions
CN114416564B (zh
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.)
Southern Power Grid Digital Grid Research Institute Co Ltd
Original Assignee
Southern Power Grid Digital Grid Research Institute 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 Southern Power Grid Digital Grid Research Institute Co Ltd filed Critical Southern Power Grid Digital Grid Research Institute Co Ltd
Priority to CN202210065403.9A priority Critical patent/CN114416564B/zh
Publication of CN114416564A publication Critical patent/CN114416564A/zh
Application granted granted Critical
Publication of CN114416564B publication Critical patent/CN114416564B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural

Landscapes

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

Abstract

本申请实施例在于提供一种微服务系统中循环依赖检测方法及系统,属于微服务系统领域。所述检测方法包括:响应于对所述微服务系统的循环依赖检测请求,执行第一循环依赖检测任务以及第二循环依赖检测任务;其中,执行所述第一循环依赖检测任务,包括:获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息;基于所述各个服务上报的调用信息,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;基于所述第一有向图,确定所述请求任务是否存在循环依赖;基于表征所述各个服务的调用关系的第二有向图;确定所述多个服务之间是否存在循环依赖。本申请旨在对微服务系统中的循环依赖进行检测。

Description

一种微服务系统中循环依赖检测方法及系统
技术领域
本申请实施例涉及微服务系统的领域,具体而言,涉及一种微服务系统中循环依赖检测方法及系统。
背景技术
微服务是当前非常流行的软件架构,普遍应用于分布式系统的开发之中,微服务通过将一个完整的系统拆分为若干个粒度较小的服务单元,每个服务单元通过网络接口与其他服务单元相互调用,共同完成业务功能。微服务架构提倡把服务拆小而独立,一个软件系统往往会有很多服务单元,大部分业务需求是需要多个服务单元一起配合才能完成微服务架构提倡把服务单元拆的小而独立,一个软件系统往往会有很多服务单元,大部分业务需求是需要多个服务单元一起配合才能完成。
微服务的主要优势都来源于一个原则,即独立可部署性;独立可部署性要求每个服务可以完全自主的控制自身的开发、部署和运维,要想达到这一点,最重要的是避免服务之间出现循环依赖的情况发生。假设服务A和服务B产生了循环依赖,当A和B任何一方需要发布新功能或者因为异常情况宕机时,都会影响到对方的功能,以至于两个服务必须协调出一致的生命周期操作。
在现有技术中,检测微服务系统中是否存在循环依赖的方法主要是通过人工检测的方式,列出微服务系统一个服务周期内的所有服务,再对这些服务一一进行分析;这种方法需要大量的人力,且很容易出现漏检;在微服务系统中服务量达到一定的量级后,人工检测的方法也无法进行检测。
发明内容
本申请实施例提供一种微服务系统中循环依赖检测方法及系统,旨在对微服务系统中的循环依赖进行检测。
第一方面,本申请实施例提供一种微服务系统中循环依赖检测方法,所述方法包括:
响应于对所述微服务系统的循环依赖检测请求,执行第一循环依赖检测任务以及第二循环依赖检测任务;
其中,执行所述第一循环依赖检测任务,包括:
获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识;
基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;
基于所述第一有向图,确定所述请求任务是否存在循环依赖;
其中,执行所述第二循环依赖检测任务,包括:
获取所述微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识;
基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图;
基于所述第二有向图,确定所述多个服务之间是否存在循环依赖。
可选地,获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,包括:
每当所述所述微服务系统中的一个服务在调用另一个服务的接口时,另一个服务均检测所述服务的调用请求中是否存在唯一标识;
若不存在,则生成唯一标识并放入所述服务中;
若存在,则将唯一标识放入另一个服务生成的调用请求中;
获取所有唯一标识相同的所述服务的调用信息。
可选地,所述基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图,包括:
创建一个分组,将所述各个服务上报的调用信息放入所述分组中;
按照所述当前时间戳的先后顺序,对所述分组中多个调用信息进行先后排列;
按照所述排列顺序,依次连接所述多个调用信息中调用服务的服务标识和被调用服务的服务标识,得到所述第一有向图。
可选地,所述基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图,包括:
创建一个分组,将所述各个服务上报的调用信息放入所述分组中;
案子所述当前时间戳的先后顺序,对所述分组中多个调用信息进行先后排列;
按照所述排列顺序,依次连接所述多个调用信息中调用服务的服务标识和被调用服务的服务标识,得到所述第一有向图。
可选地,所述基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图,包括:
按照每个服务所调用其他服务之间的服务调用关系,连接各个服务的服务标识,其中,调用服务的服务标识连接被调用服务的服务标识,得到所述第二有向图。
可选地,所述基于所述第二有向图,确定所述多个服务之间是否存在循环依赖,包括:
遍历所述第二有向图,判断所述第二有向图中是否存在服务标识相同的两个服务之间的连接关系;
若存在,则该微服务系统中存在循环依赖。
可选地,所述方法还包括:
当检测到所述请求任务存在循环依赖时,输出第一告警信息;
当检测到所述第二有向图中存在循环依赖时,输出存在循环依赖的服务的第二告警信息。
可选地,所述方法还包括:
每在输出第二告警信息时,均获取所述第二有向图中存在循环依赖服务的当前服务版本信息;
对多次输出第二告警信息时获取的当前服务版本信息进行对比,以确定服务存在循环依赖的版本。
第二方面,本申请实施例提供一种微服务系统中循环依赖检测系统,包括第一获取模块、第一有向图生成模块、第二获取模块、第二有向图生成模块、循环依赖判断模块、告警模块和记录对比模块,其中:
第一获取模块,用于获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识;
第一有向图生成模块,用于基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;
第二获取模块,用于获取所述微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识;
第二有向图生成模块,用于基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图;
循环依赖判断模块,用于基于基于所述第一有向图,确定所述请求任务是否存在循环依赖;用于基于所述第二有向图,确定所述多个服务之间是否存在循环依赖;
告警模块,用于在当检测到所述请求任务存在循环依赖时,输出第一告警信息;在检测到所述第二有向图中存在循环依赖时,输出存在循环依赖的服务的第二告警信息;
记录对比模块,用于在输出第二告警信息时,同时对比所述存在循环依赖服务的当前服务版本信息;若所述存在循环依赖的的当前服务版本信息不一致,则上报记录。
有益效果:本申请通过在对微服务系统内的循环依赖进行检测时,首先将循环依赖检测分为第一循环依赖检测任务和第二循环依赖检测任务两类,其中,第一循环依赖检测任务用于检测微服务系统内执行同一请求任务的请求之间是否存循环依赖,第二循环依赖检测任务用于检测在微服务系统内的多个服务之间是否存在循环依赖;在检测时,通过分别生成表征执行请求任务的各个服务的服务流程的第一有向图和表征微服务系统中各个服务之间调用关系的第二有向图,再通过对第一有向图和第二有向图内存在的调用关系进行判断,完成循环依赖检测;从而解决人工检测循环依赖时面对大量数据难以检测且容易产生漏检的问题,具有面对大量数据,也能够检测微服务系统内是否存在循环依赖的效果。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提出的检测方法的步骤流程图;
图2是本申请一实施例提出的其中两个第一有向图的结构;
图3是本申请一实施例提出的其中两个第二有向图的结构;
图4是本申请另一实施例提出的检测系统的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
实施例一
参照图1,示出了本发明实施例中的一种微服务系统中循环依赖检测方法的步骤流程图,如图1所示,本检测方法可以包括以下步骤:
S1,响应于对所述微服务系统的循环依赖检测请求,执行第一循环依赖检测任务以及第二循环依赖检测任务;
在本实施例中,将微服务系统内的循环依赖分为两类,第一循环依赖检测任务和第二循环依赖检测任务分别用于对微服务系统内的这两类循环依赖进行检测。其中,第一循环依赖检测任务针对微服务系统中执行同一请求任务的多个服务之间是否存在循环依赖,第二循环依赖检测任务针对同一微服务系统中,执行多个请求任务的多个服务之间是否存在循环依赖。
S11,其中,执行所述第一循环依赖检测任务,包括:
S111,获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识;
微服务系统在执行请求任务时,往往一个请求任务需要多个服务配合完成,而执行同一请求任务的多个服务之间通过网络接口互相调用;第一循环依赖检测任务用于对微服务系统内执行同一请求任务的各个服务之间有没有循环依赖进行检测。
S112,基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;
第一有向图通过多个服务的当前时间戳和服务标识生成,能够反馈执行同一请求任务的多个服务之间的服务流程。
S113,基于所述第一有向图,确定所述请求任务是否存在循环依赖;
第一有向图上列举了实现同一请求任务的多个服务之间的关系,通过对第一有向图的分析,就能够确定执行同一请求任务的多个服务之间有没有存在循环依赖。
S12,其中,执行所述第二循环依赖检测任务,包括:
S121,获取所述微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识;
通过对微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,能够确定该微服务系统中多个服务之间的联系。
S122,基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图;
S123,基于所述第二有向图,确定所述多个服务之间是否存在循环依赖。
第二有向图上列举了在同一微服务系统中,执行多个请求任务的多个服务之间的关系,通过对第二有向图的分析,就能够确定同一微服务系统中的多个服务之间有没有存在循环依赖。
本实施例通过在对微服务系统内的循环依赖进行检测时,首先将循环依赖检测分为第一循环依赖检测任务和第二循环依赖检测任务两类,其中,第一循环依赖检测任务用于检测微服务系统内执行同一请求任务的请求之间是否存循环依赖,第二循环依赖检测任务用于检测在微服务系统内的多个服务之间是否存在循环依赖;在检测时,通过分别生成表征执行请求任务的各个服务的服务流程的第一有向图和表征微服务系统中各个服务之间调用关系的第二有向图,再通过对第一有向图和第二有向图内存在的调用关系进行判断,完成循环依赖检测;从而解决人工检测循环依赖时面对大量数据难以检测且容易产生漏检的问题,具有面对大量数据,也能够检测微服务系统内是否存在循环依赖的效果。
实施例二
参照图1所示,示出了本申请实施例中的一种微服务系统中循环依赖检测方法的步骤流程图,如图1所示,该检测方法具体可以包括以下步骤:
S1,响应于对所述微服务系统的循环依赖检测请求,执行第一循环依赖检测任务以及第二循环依赖检测任务;
微服务系统是将一个完整的系统拆分为若干个粒度较小的服务,每个服务通过网络接口与其他服务相互调用,共同完成业务功能。
而微服务系统中的循环依赖是指:若完成一个请求任务需要服务A、服务B和服务C;其中,服务A调用服务B提供的接口,而服务B又需要调用服务A的接口,此时,由于服务A的需要调用B的接口,即服务A的能力依赖服务B的能力,而服务B又要调用服务A的接口,则表示服务B依赖于服务A,这样就构成了循环依赖。循环依赖不仅发生在两个服务之间,也可发生在多个服务之间,例如服务A依赖服务B,服务B依赖服务C,服务C依赖于服务A,也会形成循环依赖。这种循环依赖存在于微服务系统执行同一请求任务的各个服务之间。
还存在另外一种循环依赖的方式,若微服务系统中执行了多个请求任务,其中一个请求任务中的服务A在执行时需要调用另一个请求任务的服务B提供的接口,而服务B又需要调用第三个请求任务的服务C的接口,服务C有需要调用服务A的接口;则此时,服务A、服务B和服务C也构成了循环依赖。循环依赖不仅发生在执行同一请求任务的两个服务之间,也存在于微服务系统中执行不同请求任务的多个服务之间。
S11,其中,执行所述第一循环依赖检测任务,包括:
S101,获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识;
在获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息时,通过微服务系统自带的接口进行获取;如果微服务系统使用的是Spring Cloud,则通过Javaweb中的Filter获取,如果微服务系统使用的是Service Mesh,则通过Sidecar获取。
在本实施例中,通过设置唯一标识来确定微服务系统的各个服务是否在同一个请求任务中。
设置唯一标识的流程如下:
获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,包括:
每当所述所述微服务系统中的一个服务在调用另一个服务的接口时,另一个服务均检测所述服务的调用请求中是否存在唯一标识;
若不存在,则生成唯一标识并放入所述服务中;
在服务中不存在唯一标识时,则说明该服务可能是同一请求任务执行周期的起点,需要生成新的唯一标识;
若存在,则将唯一标识放入另一个服务生成的调用请求中;
在服务中存在唯一标识时,说明该服务可能是同一请求任务执行周期的中间节点,服务中的唯一标识是通过同一请求任务执行周期的上一节点传递的,则将唯一标识通过调用请求传递到下一个服务中。
获取所有唯一标识相同的所述服务的调用信息。
在本实施例中,当一个请求任务需要多个服务依次处理时,第一个服务生成一个唯一标识,然后将这个唯一标识放入到调用请求中,同时通过调用请求去调用第二个服务的接口。第二个服务收到调用请求后,先从调用请求中获取唯一标识,然后把唯一标识再放入到调用请求中,通过调用请求去调用第三个服务的接口。在传递唯一标识的过程中,若是第二个服务收到的调用请求中没有存在唯一标识,则发出调用请求的第一个服务是同一请求任务周期的起点,则第二个服务生成唯一标识并放入第一个服务中;若存在,则发出调用请求的第一个服务是同一请求任务周期的中间节点,第二个服务只需要将唯一标识放入自己生成的调用请求中,就能够将唯一标识传递到第三个服务。
通过获取所有唯一标识相同的服务,就能够获取在执行同一请求任务的各个服务的调用信息;通过这部分调用信息,就能够为判断存在于微服务系统执行同一请求任务的各个服务之间的循环依赖提供基础数据。
S102,基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;
在本实施例中,各个服务上报的调用信息是执行检测微服务系统中是否存在循环依赖的基础数据,在第一循环依赖检测任务中,检测的目标是存在于微服务系统执行同一请求任务的各个服务之间的循环依赖;基于微服务系统执行同一请求任务的各个服务之间的循环依赖的特点,检测的第一步是生成第一有向图,第一有向图能够表征微服务系统中执行其中一个请求任务的各个服务的服务流程。
其中,生成第一有向图包括下述步骤:
创建一个分组,将所述各个服务上报的调用信息放入所述分组中;
在微服务系统中,可能同时在执行多个请求任务,而多个请求任务又由多个服务执行,通过建立分组,再将各个服务上报的调用信息放入分组中,则该分组中此时就只有执行其中一个请求任务所需的服务的调用信息,这部分调用信息是通过唯一标识来作区分的。
按照所述当前时间戳的先后顺序,对所述分组中多个调用信息进行先后排列;
当前时间戳是各个服务在微服务系统中被执行时的时间,通过对当前时间戳进行排序,就能够对多个执行同一请求任务的服务排出调用顺序。
按照所述排列顺序,依次连接所述多个调用信息中调用服务的服务标识和被调用服务的服务标识,得到所述第一有向图。
如图2所示,图2示出了本申请实施例中其中两个第一有向图的结构;在微服务系统中,存在其中一个请求任务由服务1、服务2、服务3和服务4组成;其中服务1的服务标识为服务1,服务2的服务标识为服务2,服务3的服务标识为服务3,服务4的服务标识为服务4;基于服务1、服务2、服务3和服务4绘制成的第一有向图如图2中a和b所示。
通过对多个执行同一请求任务的服务进行先后连接,得到的第一有向图就能够反馈微服务系统中执行其中一个请求任务的各个服务的服务流程。
S103,基于所述第一有向图,确定所述请求任务是否存在循环依赖,包括:
遍历所述第一有向图,判断所述第一有向图中是否存在服务标识相同的两个服务之间的连接关系;
若存在,则所述请求任务中存在循环依赖。
如图2中a所示,该第一有向图中,服务2调用服务1,服务3调用服务2,服务4调用服务3,在其中,并不存在服务标识相同的两个服务之间的连接关系,所以在图2中a并不存在循环依赖。
如图2中b所示,该第一有向图中,服务2调用服务1,服务3调用服务2,服务4调用服务3,而服务1又调用了服务4,存在服务标识相同的两个服务之间的连接关系,则在在图2中b存在循环依赖。且循环依赖开始于服务标识相同的两个服务中当前时间戳时间显示较大的那一个服务,结束于当前时间戳时间显示较小的那一个,在图2中b所示,循环依赖起始于位于上方的服务1,结束于下方的服务1。
S12,其中,执行所述第二循环依赖检测任务,包括:
S121,获取所述微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识;
微服务系统在运行时,往往在一个微服务系统中存在多个请求任务需要执行,而一个请求任务又需要多个服务配合完成;所以在一个微服务系统中,可能同时存在大量的服务,执行不同请求任务的多个服务之间又能够通过网络接口互相调用;在本实施例中,第二循环依赖检测任务用于对微服务系统内各个服务之间有没有循环依赖进行检测,不限于这些服务是否在执行同一个请求任务。
S122,基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图;包括:
按照每个服务所调用其他服务之间的服务调用关系,连接各个服务的服务标识,其中,调用服务的服务标识连接被调用服务的服务标识,得到所述第二有向图。
通过每个服务所调用其他服务之间的服务调用关系,再对其进行连接,得到的第二有向图就能够反馈在同一个微服务系统中,执行多个请求任务的多个服务之间的关系。
S123,基于所述第二有向图,确定所述多个服务之间是否存在循环依赖。包括:
遍历所述第二有向图,判断所述第二有向图中是否存在服务标识相同的两个服务之间的连接关系;
若存在,则该微服务系统中存在循环依赖。
如图3所示,图3示出了本申请实施例中其中两个第二有向图的结构;且图3中的第二有向图通过步骤S122得到;若微服务系统中存在服务A、服务B、服务C、服务D和服务E五个服务,这五个服务分别服务于不同的请求任务,但是彼此之间存在调用关系。
如图3中a所示,其中,服务A调用服务C的接口,服务C调用服务D的接口,服务D调用服务E的接口,服务E调用服务B的接口,服务B又调用服务A的接口,则在这个五个服务中,有A—>C—>D—>B—>E—>A这个指向的一种调用方式,因为服务A的服务标识在第二有向图中出现了两次,存在服务标识相同的两个服务之间的连接关系;所以该微服务系统中存在循环依赖。
如图3中b所示,其中,服务A调用服务C的接口,服务C调用服务D的接口,服务E调用服务D的接口,服务E调用服务B的接口,服务B又调用服务A的接口;在图3中a这个第二有向图中,有B—>A—>C—>D和E—>D两种服务的调用方式,但是在这两种调用方式中,均未出现某一个服务标识在第二有向图中出现两次的情况,所以图3中b不存在服务标识相同的两个服务之间的连接关系,该微服务系统中存在循环依赖。
在本实施例中,检测方法还包括:
当检测到所述请求任务存在循环依赖时,输出第一告警信息;
当检测到所述第二有向图中存在循环依赖时,输出存在循环依赖的服务的第二告警信息。
通过第一告警信息和第二告警信息能够提醒微服务系统的维护人员当前微服务系统中存在循环依赖,而第二告警信息能够提醒循环依赖位于当前微服务系统中的哪一个请求任务中。
每在输出第二告警信息时,均获取所述第二有向图中存在循环依赖服务的当前服务版本信息;
对多次输出第二告警信息时获取的当前服务版本信息进行对比,以确定服务存在循环依赖的版本。
第二告警信息用于提醒维护人员当前微服务系统中存在循环依赖,而若存在循环依赖的服务,则获取当前服务版本信息,当前服务版本信息能够确定存在循环依赖的服务的版本;维护人员在维护微服务系统时,可以通过当前服务版本信息来对循环依赖在服务中存在的版本进行判断,提示产生循环依赖的服务,是从哪个版本开始出现的循环依赖以及循环依赖持续至服务的哪个版本;以进行维护。
本实施例通过在对微服务系统内的循环依赖进行检测时,首先将循环依赖检测分为第一循环依赖检测任务和第二循环依赖检测任务两类,其中,第一循环依赖检测任务用于检测微服务系统内执行同一请求任务的请求之间是否存循环依赖,第二循环依赖检测任务用于检测在微服务系统内的多个服务之间是否存在循环依赖;在检测时,通过分别生成表征执行请求任务的各个服务的服务流程的第一有向图和表征微服务系统中各个服务之间调用关系的第二有向图,再通过对第一有向图和第二有向图内存在的调用关系进行判断,完成循环依赖检测;从而解决人工检测循环依赖时面对大量数据难以检测且容易产生漏检的问题,具有面对大量数据,也能够检测微服务系统内是否存在循环依赖的效果。
实施例三
基于同一发明构思,图4示出的一种微服务系统中循环依赖检测系统的结构示意图,参照图4所示,所述检测系统包括第一获取模块、第一有向图生成模块、第二获取模块、第二有向图生成模块、循环依赖判断模块、告警模块和记录对比模块,其中:
第一获取模块,用于获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识;
第一有向图生成模块,用于基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;
第二获取模块,用于获取所述微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识;
第二有向图生成模块,用于基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图;
循环依赖判断模块,用于基于基于所述第一有向图,确定所述请求任务是否存在循环依赖;用于基于所述第二有向图,确定所述多个服务之间是否存在循环依赖。
告警模块,用于在当检测到所述请求任务存在循环依赖时,输出第一告警信息;在检测到所述第二有向图中存在循环依赖时,输出存在循环依赖的服务的第二告警信息。
记录对比模块,用于在输出第二告警信息时,同时对比所述存在循环依赖服务的当前服务版本信息;若所述存在循环依赖的的当前服务版本信息不一致,则上报记录。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (9)

1.一种微服务系统中循环依赖检测方法,其特征在于,所述方法包括:
响应于对所述微服务系统的循环依赖检测请求,执行第一循环依赖检测任务以及第二循环依赖检测任务;
其中,执行所述第一循环依赖检测任务,包括:
获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识;
基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;
基于所述第一有向图,确定所述请求任务是否存在循环依赖;
其中,执行所述第二循环依赖检测任务,包括:
获取所述微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识;
基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图;
基于所述第二有向图,确定所述多个服务之间是否存在循环依赖。
2.根据权利要求1所述的一种检测方法,其特征在于,获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,包括:
每当所述所述微服务系统中的一个服务在调用另一个服务的接口时,另一个服务均检测所述服务的调用请求中是否存在唯一标识;
若不存在,则生成唯一标识并放入所述服务中;
若存在,则将唯一标识放入另一个服务生成的调用请求中;
获取所有唯一标识相同的所述服务的调用信息。
3.根据权利要求2所述的一种检测方法,其特征在于,所述基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图,包括:
创建一个分组,将所述各个服务上报的调用信息放入所述分组中;
按照所述当前时间戳的先后顺序,对所述分组中多个调用信息进行先后排列;
按照所述排列顺序,依次连接所述多个调用信息中调用服务的服务标识和被调用服务的服务标识,得到所述第一有向图。
4.根据权利要求3所述的一种检测方法,其特征在于,所述基于所述第一有向图,确定所述请求任务是否存在循环依赖,包括:
遍历所述第一有向图,判断所述第一有向图中是否存在服务标识相同的两个服务之间的连接关系;
若存在,则所述请求任务中存在循环依赖。
5.根据权利要求1所述的一种检测方法,其特征在于,所述基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图,包括:
按照每个服务所调用其他服务之间的服务调用关系,连接各个服务的服务标识,其中,调用服务的服务标识连接被调用服务的服务标识,得到所述第二有向图。
6.根据权利要求5所述的一种检测方法,其特征在于,所述基于所述第二有向图,确定所述多个服务之间是否存在循环依赖,包括:
遍历所述第二有向图,判断所述第二有向图中是否存在服务标识相同的两个服务之间的连接关系;
若存在,则该微服务系统中存在循环依赖。
7.根据权利要求1-6任一所述的一种检测方法,其特征在于,所述方法还包括:
当检测到所述请求任务存在循环依赖时,输出第一告警信息;
当检测到所述第二有向图中存在循环依赖时,输出存在循环依赖的服务的第二告警信息。
8.根据权利要求7所述的一种检测方法,其特征在于,所述方法还包括:
每在输出第二告警信息时,均获取所述第二有向图中存在循环依赖服务的当前服务版本信息;
对多次输出第二告警信息时获取的当前服务版本信息进行对比,以确定服务存在循环依赖的版本。
9.一种微服务系统中循环依赖检测系统,其特征在于,包括第一获取模块、第一有向图生成模块、第二获取模块、第二有向图生成模块、循环依赖判断模块、告警模块和记录对比模块,其中:
第一获取模块,用于获取所述微服务系统中执行同一请求任务的各个服务上报的调用信息,每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识;
第一有向图生成模块,用于基于所述各个服务上报的调用信息中每个服务执行所述请求任务的当前时间戳、该服务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征执行所述请求任务的各个服务的服务流程的第一有向图;
第二获取模块,用于获取所述微服务系统中每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识;
第二有向图生成模块,用于基于每个服务执行请求任务的服务标识、以及该服务所要调用的其他服务的服务标识,生成表征所述各个服务的调用关系的第二有向图;
循环依赖判断模块,用于基于基于所述第一有向图,确定所述请求任务是否存在循环依赖;用于基于所述第二有向图,确定所述多个服务之间是否存在循环依赖;告警模块,用于在当检测到所述请求任务存在循环依赖时,输出第一告警信息;在检测到所述第二有向图中存在循环依赖时,输出存在循环依赖的服务的第二告警信息;
记录对比模块,用于在输出第二告警信息时,同时对比所述存在循环依赖服务的当前服务版本信息;若所述存在循环依赖的的当前服务版本信息不一致,则上报记录。
CN202210065403.9A 2022-01-20 2022-01-20 一种微服务系统中循环依赖检测方法及系统 Active CN114416564B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210065403.9A CN114416564B (zh) 2022-01-20 2022-01-20 一种微服务系统中循环依赖检测方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210065403.9A CN114416564B (zh) 2022-01-20 2022-01-20 一种微服务系统中循环依赖检测方法及系统

Publications (2)

Publication Number Publication Date
CN114416564A true CN114416564A (zh) 2022-04-29
CN114416564B CN114416564B (zh) 2024-09-13

Family

ID=81276248

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210065403.9A Active CN114416564B (zh) 2022-01-20 2022-01-20 一种微服务系统中循环依赖检测方法及系统

Country Status (1)

Country Link
CN (1) CN114416564B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102317877A (zh) * 2009-02-18 2012-01-11 三菱电机株式会社 程序分析支援装置
US20190166023A1 (en) * 2017-11-27 2019-05-30 International Business Machines Corporation Pre-starting services based on traversal of a directed graph during execution of an application
CN110875928A (zh) * 2019-11-14 2020-03-10 北京神州绿盟信息安全科技股份有限公司 一种攻击溯源方法、装置、介质和设备
CN113946450A (zh) * 2021-11-03 2022-01-18 北京航空航天大学 一种用于k8s微服务框架的自适应带权轮询负载均衡系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102317877A (zh) * 2009-02-18 2012-01-11 三菱电机株式会社 程序分析支援装置
US20190166023A1 (en) * 2017-11-27 2019-05-30 International Business Machines Corporation Pre-starting services based on traversal of a directed graph during execution of an application
CN110875928A (zh) * 2019-11-14 2020-03-10 北京神州绿盟信息安全科技股份有限公司 一种攻击溯源方法、装置、介质和设备
CN113946450A (zh) * 2021-11-03 2022-01-18 北京航空航天大学 一种用于k8s微服务框架的自适应带权轮询负载均衡系统

Also Published As

Publication number Publication date
CN114416564B (zh) 2024-09-13

Similar Documents

Publication Publication Date Title
CN107302450B (zh) 一种数据采集任务变更方法及装置
CN108845954B (zh) 压力测试方法、系统及存储介质
CN113282402B (zh) 一种面向复杂资源约束的测试任务调度方法
CN112202647B (zh) 区块链网络中的测试方法、装置及测试设备
CN111510468A (zh) 计算任务的调度方法、装置、服务器及计算系统
CN102056200A (zh) 一种业务处理流程监控方法和系统
CN111026627A (zh) 压力测试方法、装置及服务器
CN110647453A (zh) 应用性能对比测试方法、系统、设备和计算机可读存储介质
CN107204868B (zh) 一种任务运行监控信息获取方法和装置
CN107729207B (zh) 一种应用程序主线程的监控方法及装置
CN111930542B (zh) 数据采集方法、装置、电子设备及计算机可读存储介质
CN114416564A (zh) 一种微服务系统中循环依赖检测方法及系统
CN117194245A (zh) 自动化测试方法、装置、设备及存储介质
CN111722917A (zh) 性能测试任务的资源调度方法、装置和设备
CN111427634A (zh) 一种原子服务调度的方法及装置
CN111679899B (zh) 任务调度方法、装置、平台设备及存储介质
CN113179329B (zh) 服务发布方法及装置、服务器、存储介质
CN112860509A (zh) 拨测告警方法及装置
CN109995617A (zh) 主机管理特性的自动化测试方法、装置、设备及存储介质
CN113377616B (zh) 接口监控方法、装置以及计算机可读介质
CN107784448A (zh) 一种瀑布模型下的任务管理方法及系统
CN116109112B (zh) 基于聚合接口的业务数据处理方法、装置、介质和设备
CN111585844B (zh) 基于验证码的测试方法、系统、服务器及存储介质
CN110674139B (zh) 信息处理方法、系统、资源管理系统以及存储介质
CN115641120A (zh) 一种数据处理方法及装置

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
CB03 Change of inventor or designer information

Inventor after: Fan Zhongkai

Inventor after: Yang Yang

Inventor after: Liu Mingwei

Inventor after: Dai Haoqi

Inventor after: Kang Yi

Inventor after: Liang Zijian

Inventor after: Liu Zhuqing

Inventor after: Ren Haowen

Inventor after: Wang Jinhe

Inventor after: Zhang Lingzhi

Inventor before: Liu Mingwei

Inventor before: Dai Haoqi

Inventor before: Kang Yi

Inventor before: Liang Zijian

Inventor before: Liu Zhuqing

Inventor before: Ren Haowen

Inventor before: Wang Jinhe

Inventor before: Zhang Lingzhi

CB03 Change of inventor or designer information
GR01 Patent grant