首页> 中国专利> 一种基于多类特征和多个度量指标的微服务架构识别方法

一种基于多类特征和多个度量指标的微服务架构识别方法

摘要

本发明公开了一种基于多类特征和多个度量指标的微服务架构识别方法,针对微服务架构相对于其他软件架构的特点构建了微服务架构识别的决策模型,通过静态分析技术获取目标软件项目中的微服务架构特征度量指标信息,最后利用决策模型计算输入项目使用微服务架构的概率。与现有的架构识别方法相比,本发明方法扩充了微服务架构的特征,并针对每个度量指标设计符合其特性的计算函数,识别准确率更高,识别结果中包含更丰富的内容。

著录项

  • 公开/公告号CN112433755A

    专利类型发明专利

  • 公开/公告日2021-03-02

    原文格式PDF

  • 申请/专利权人 东南大学;

    申请/专利号CN202011288078.X

  • 申请日2020-11-17

  • 分类号G06F8/74(20180101);

  • 代理机构32206 南京众联专利代理有限公司;

  • 代理人杜静静

  • 地址 210096 江苏省南京市玄武区四牌楼2号

  • 入库时间 2023-06-19 10:05:17

说明书

技术领域

本发明属于软件工程逆向工程中的架构模式识别领域,尤其涉及一种基于多类特征和多个度量指标的微服务架构识别方法。

背景技术

一个具有一定规模的软件系统很可能会存在复杂的演进过程,而在系统的演进过程中可能会出现系统架构信息未能及时更新或文档缺失的问题,使得软件系统的真实架构信息存在偏差,进而给后期的维护带来巨大负担。因此,在软件工程逆向工程领域,对软件系统进行架构识别从而尽量获取系统的真实架构信息,是一项重要的工作。

在架构识别技术的研究中,除了传统的软件聚类技术基于软件开发中高内聚低耦合的原则将软件系统中的实体聚类成一定抽象粒度的组件从而得到系统结构视图,帮助目标系统的开发与维护人员理解系统架构的状态外,遗传算法、模式匹配、概念分析等技术也开始逐渐用于架构识别当中。但是,同软件聚类一样,这些架构识别技术更多针对的是通用场景,并未考虑特定架构的特征,采用这些方法获取的结果很可能丢失了很多跟实际架构相关的信息,使得识别的结果与真实结果相差较大,因此,针对不同的软件架构设计有针对性的架构识别方法十分必要。

目前最常用的软件架构包括分层架构、事件驱动架构、微服务架构等,针对分层架构的识别方法近些年来学术界已经提出了不少,识别效果也有了长足的进步;针对事件驱动架构识别的研究资料相比之下就少得多,2019年有相关学者提出了基于本体的事件驱动程序架构模式识别方法,一定程度上给相关研究提供了新的思路;而作为这几年应用越发广泛的微服务架构,则还未有相关的有针对性的研究成果出现。

微服务架构的火热与其架构特点不无关系,它跳脱了传统的单体应用,提倡将单一的应用程序划分成一组小型的服务,每个服务都围绕着具体业务进行构建,使用特定的组件完成特定功能,并且能够被独立地部署到生产环境中,服务之间采用轻量级的通信机制进行沟通,互相协调、配合,为用户提供最终价值。基于上述特征,微服务架构体现出了复杂度可控、技术选型灵活、容错率高、可扩展性强等特点。

因此,在微服务架构的识别中,除了应用已有的架构识别、架构恢复技术外,还应该将架构本身的特性结合起来,使识别效果更符合真实情况。

发明内容

本发明的目的是提供一种能够基于构建的识别微服务架构的决策模型和获取到的输入项目中符合微服务架构典型特征的度量指标信息,通过度量指标信息和决策模型进行计算得到识别出的该输入项目使用微服务架构的总体概率以及不符合原因。

为了实现上述目的,本发明的技术方案如下:一种基于多类特征和多个度量指标的微服务架构识别方法,包括如下步骤:

步骤1)根据微服务架构的特性构建微服务架构识别的决策模型P

步骤2)输入一个目标软件项目的源码,对该目标软件项目进行预处理得到粒度大小可能为单个子服务实体b

步骤3)基于步骤2)中所获取的实体集合B,分别对B中的各实体b

步骤4)基于步骤3)中建立的微服务信息和组件库L获取决策模型中各度量指标相关的子服务数量信息x;

步骤5)基于步骤4)中获取的度量指标相关子服务数量信息x利用各指标相应的概率值计算函数和决策模型函数进行计算得到目标软件项目使用微服务架构的概率值P。

进一步的,步骤1)中构建的决策模型具体内容如下:

(1)对微服务架构的特征进行总结和归纳,将特征划分为三类:规模特征、构件特征和拓扑特征,并选取具有代表性和通用性的特性作为微服务架构识别的度量指标,构建度量指标集合A={a

(2)根据每个度量指标a

a)子服务数量度量指标的概率值计算函数为:

其中x为从微服务信息和组件库中获取到的子服务数量,P

b)服务注册与发现组件度量指标的概率值计算函数为:

其中x为从微服务信息和组件库中获取到的包含服务注册与发现组件的子服务数量,P

c)负载均衡组件度量指标的概率值计算函数为:

其中x为从微服务信息和组件库中获取到的包含负载均衡组件的子服务数量,P

d)网关组件度量指标的概率值计算函数为:

f

其中x为从微服务信息和组件库中获取到的包含网关组件的子服务数量,

P

(3)根据每个度量指标的重要性在最终的决策模型中为各度量指标的加成概率值赋予特定的权重,得到最终的决策模型函数。设子服务数量、服务注册与发现组件、负载均衡组件以及网关组件这四个度量指标的加成概率值在最终的决策模型函数中所占的权重分别用w

P=w

其中P为输入目标软件项目使用微服务架构的概率值。

进一步的,步骤2)中对目标软件项目进行预处理得到粒度大小可能为单个子服务实体的集合的具体流程如下:

遍历输入项目中的所有文件夹目录,其中src文件夹的上级文件夹目录可能包含单个子服务,将这些src文件夹的上级文件夹目录路径保存到存储可能为单个子服务实体b

进一步的,步骤3)中对各实体进行静态分析检测其是否使用了决策模型中的度量指标相关的组件并将相关信息存入微服务信息和组件库的具体流程如下:

(1)分别检测步骤2)中获取的集合B中的实体b

(2)若实体b

(3)若实体b

(4)将实体b

进一步的,步骤4)中获取决策模型中各度量指标相关的子服务数量信息的具体流程如下:

(1)从步骤3)中建立的微服务信息和组件库L中统计包含至少一类组件的实体数量x

(2)从步骤3)中建立的微服务信息和组件库L中统计包含服务注册与发现组件的实体数量x

(3)从步骤3)中建立的微服务信息和组件库L中统计包含负载均衡组件的实体数量x

(4)从步骤3)中建立的微服务信息和组件库L中统计包含网关组件的实体数量x

进一步的,步骤5)中根据概率值计算函数和决策模型函数进行计算得到目标软件项目使用微服务架构的概率值P的具体流程如下:

(1)将从步骤4)中统计得到的子服务数量值x

(2)将从步骤4)中统计得到的包含服务注册与发现组件的子服务数量值x

(3)将从步骤4)中统计得到的包含负载均衡组件的子服务数量值x

(4)将从步骤4)中统计得到的包含网关组件的子服务数量值x

(5)将以上四步计算得到的加成概率值代入最终的决策模型函数

P=w

其中w

有益效果:本发明方法基于微服务架构的特征构建了架构识别的决策模型,利用该模型结合静态分析获取到的目标软件项目中与微服务架构相关的度量指标信息进行计算可以得到一个判断目标软件项目使用微服务架构的总体概率。本发明方法与现有技术相比,主要有以下一些优点:

(1)扩充了微服务架构的特征,识别效果较好,识别准确率较高。本发明提出的基于多类特征和多个度量指标的微服务架构识别方法深入考虑了微服务架构的特性,针对性地选取了通用但能有效体现微服务架构特征的度量指标并为每个度量指标设计了能代表其特点的计算函数来计算其对于微服务架构决策模型的加成概率值,此外,还根据每个指标的重要性,为其分配了该指标在最终的架构识别概率计算函数中所占的权重值。因此,与现有的架构识别方法相比,识别准确率较高。

(2)识别结果包含更丰富的内容。本发明提出的基于多类特征和多个度量指标的微服务架构识别方法在识别过程中对服务实体使用的体现微服务架构特征的组件进行了提取,与现有的架构识别方法的识别结果相比,包含更丰富的内容,能较好地还原目标软件项目内部的微服务特征。

(3)本发明所提出的微服务架构识别方法是完全自动化的。本发明方法以目标软件项目作为输入,其余步骤都是自动完成的,识别完成后自动给出识别出的微服务架构概率值和各子服务使用的组件信息。

附图说明

图1是本发明的流程图。

图2是本发明的数据流图,表示本发明中涉及的功能模块及数据信息之间的联系。

图3是子服务数量度量指标概率值计算函数的函数模型图。

图4是服务注册与发现组件度量指标概率值计算函数的函数模型图。

图5是负载均衡组件度量指标概率值计算函数的函数模型图。

具体实施方式

为了加深对本发明的认识和理解,下面结合附图对本发明的技术方案进行详细说明:

图1给出了本发明的流程图,其中架构识别过程主要包含预处理、静态分析、指标信息获取和概率计算四个步骤,概率计算需要用到我们构建的决策模型。

根据我们前面提到的步骤,依次实施:

第一步,构建决策模型。

(1)子服务数量度量指标概率值计算函数定义:

微服务项目不同于一般的单体java项目,单体java项目一般只具备一个src源代码目录,而微服务则不同,多个子服务协同工作是微服务项目的一个重要特征,体现在目标软件项目中则是项目内部可能存在多个包含src文件夹的子服务。综合分析子服务数量度量指标概率值计算函数应该具备如下特性:①子服务数量较小时,函数值趋近于0;②子服务数量较大且数量越多时,函数值越趋近于1,当子服务数量达到一定值之后,此时该指标引起的概率加成趋于平缓,即函数值变化趋于平缓。因此,我们定义子服务数量度量指标概率值计算函数为

函数模型如图3所示。

(2)服务注册与发现组件度量指标概率值计算函数定义:

我们将具有服务注册与发现组件的实体看做是真正的子服务并做标记,它们是微服务架构中的核心成员,如果检测到标记的子服务越多,那么对微服务架构的识别就越有利,因此标记子服务的数量和最终的概率值是正相关的,但是标记子服务的数量对最终概率值的影响不能是单纯的线性关系,当标记子服务数量达到一定值时,该指标对应的概率加成应接近峰值且趋于稳定。综合分析服务注册与发现组件度量指标概率值计算函数应该具备如下特性:①具有服务注册与发现组件的子服务数量为0,则函数值为0;②存在某个子服务具有服务注册与发现组件,函数值趋近于1,且该类子服务数量越多,函数值越趋近于1,但越往后概率加成越趋于平缓,即函数值变化趋于平缓。因此,我们定义服务注册与发现组件度量指标概率值计算函数为

函数模型如图4所示。

(3)负载均衡组件度量指标概率值计算函数定义:

负载均衡也是微服务项目中的常用组件。通常在微服务中一个服务可以由一个集群来支持很多台服务器,因此负载均衡是非常必要的,这也是微服务项目高可用的一个体现。虽然其他非微服务项目可能同样具有负载均衡,但是部署规模远不如微服务项目,即一个项目是否使用了微服务架构与负载均衡的规模高度相关,函数特性与服务注册与发现组件度量指标概率值计算函数类似,因此我们定义负载均衡组件度量指标概率值计算函数为

函数模型如图5所示。

(4)网关组件度量指标概率值计算函数定义:

网关组件是微服务项目中较为常用的组件,网关组件可能不是必须的,但如果使用了网关组件,对于微服务架构的识别是有利的。与上述指标不同的是,网关组件的存在对于微服务架构一般来说是一个是与否的关系,即要么存在要么不存在,因此我们采用指示函数来对应这个关系,定义网关组件度量指标概率值计算函数为

f

即具有网关组件的子服务数量为0时,函数值为0;否则函数值为1。

各度量指标的权重分配方面,因为服务注册与发现组件是微服务项目中的核心组件,每一个子项目如果需要对外提供自己的服务或者请求其他服务都需要服务注册与发现组件,因此在识别微服务架构的过程中,对服务注册与发现组件的检测是至关重要的,所以我们赋予了一个较大的权重0.5来识别这一指标;而负载均衡组件与网关组件都属于微服务常用的组件,但并不是必须具备的,为了弱化其对于一些不具有这两类组件的微服务项目的概率识别,我们分别赋予了较小的权重0.1来识别这两类指标;余下0.3的权重则赋予子服务数量度量指标。

第二步,预处理。

预处理的主要工作是对输入的目标软件项目进行src文件夹检测,并将检测到的src文件夹目录的上级文件夹视作可能为单个子服务的实体并将其存入实体集合。

第三步,静态分析。

静态分析的主要工作是对预处理得到的实体集合B中的每一个实体b

第四步,指标信息获取。

指标信息获取的主要工作是从微服务信息和组件库中统计与决策模型中度量指标相关的子服务数量信息。

第五步,概率计算。

概率计算的主要工作是根据指标信息获取得到的各指标相关子服务数量信息和框架模型计算目标软件项目使用微服务架构的概率。

实施例:

为了方便描述,我们以ruoyi-cloud开源项目的识别过程为例。ruoyi-cloud项目是一个基于SpringCloud框架实现的开源微服务项目,集成了eureka、gateway、feign等核心微服务组件。

根据我们前面提到的步骤,依次实施(因为构建决策模型独立于特定的目标软件项目,因此我们不将这部分步骤放在实施例中介绍):

第一步,预处理。

对ruoyi-cloud项目进行预处理后,我们会得到的一个实体集合B,其中包含15个可能为子服务的实体b

第二步,静态分析。

对预处理后得到的实体集合B进行静态分析,我们会得到ruoyi-cloud项目的微服务信息和组件库L,其中记录的使用了服务注册与发现组件Eureka的实体有ruoyi-config,ruoyi-eureka,ruoyi-gateway,ruoyi-activiti,ruoyi-auth,ruoyi-dfs,ruoyi-gen,ruoyi-system,ruoyi-monitor;使用了负载均衡组件Feign的实体有ruoyi-auth,ruoyi-dfs,ruoyi-system;使用了网关组件Zuul的实体有ruoyi-auth,使用了网关组件SpringCloud Gateway的实体有ruoyi-gateway。

第三步,指标信息获取。

基于微服务信息和组件库L进行度量指标相关子服务数量统计,ruoyi-cloud项目中有9个实体至少具有一类组件,分别为ruoyi-config,ruoyi-eureka,ruoyi-gateway,ruoyi-activiti,ruoyi-auth,ruoyi-dfs,ruoyi-gen,ruoyi-system,ruoyi-monitor,所以子服务数量x

第四步,概率计算。

结合上面获取的信息,ruoyi-cloud项目使用微服务架构的概率P=w

需要说明的是上述实施例仅仅是本发明的优选实施例,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均属于本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号