CN112579436A - 一种微服务软件架构识别与度量方法 - Google Patents

一种微服务软件架构识别与度量方法 Download PDF

Info

Publication number
CN112579436A
CN112579436A CN202011378841.8A CN202011378841A CN112579436A CN 112579436 A CN112579436 A CN 112579436A CN 202011378841 A CN202011378841 A CN 202011378841A CN 112579436 A CN112579436 A CN 112579436A
Authority
CN
China
Prior art keywords
service
micro
software
sub
architecture
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
CN202011378841.8A
Other languages
English (en)
Other versions
CN112579436B (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.)
Suzhou Research Institute Institute Of Electronics Chinese Academy Of Sciences
Southeast University
Original Assignee
Suzhou Research Institute Institute Of Electronics Chinese Academy Of Sciences
Southeast University
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 Suzhou Research Institute Institute Of Electronics Chinese Academy Of Sciences, Southeast University filed Critical Suzhou Research Institute Institute Of Electronics Chinese Academy Of Sciences
Priority to CN202011378841.8A priority Critical patent/CN112579436B/zh
Publication of CN112579436A publication Critical patent/CN112579436A/zh
Application granted granted Critical
Publication of CN112579436B publication Critical patent/CN112579436B/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/3604Software analysis for verifying properties of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提出了一种微服务软件架构识别与度量方法,对待检测的原始微服务JAR包进行预处理,将JAR包进行文件目录解构和冗余项过滤;根据微服务软件架构特征体系,提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征,其中微服务规模特征采用子服务数量作为特征项,构件特征采用服务注册与发现组件、负载均衡组件作为特征项,微服务拓扑特征采用网关组件作为特征项;构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性。本发明填补了传统软件评测在技术框架符合性评估领域的空白,能够自动恢复待测软件的技术框架,并分析软件对微服务架构的符合性。

Description

一种微服务软件架构识别与度量方法
技术领域
本发明属于软件测试和软件缺陷预测领域,具体涉及一种微服务软件架构识别与度量方法。
背景技术
软件架构是系统的骨架,描述的对象是直接构成系统的抽象组件,各组件之间的连接则明确和相对细致地描述组件之间的通信。软件架构风格又称软件架构惯用范型,是描述某一特定应用领域中系统组织方式的惯用范型,为软件设计与开发提供公共的术语空间,促进设计复用与代码复用[1]。软件架构风格多样,典型的软件架构风格包括管道-过滤器风格[2]、面向对象风格[3]、多层结构风格[4]等。随着云计算和大数据技术的发展,微服务因其轻量化、高可扩展性和弹性部署等优势,成为当前被广泛使用的软件架构。
软件架构识别与度量一般采用逆向工程恢复软件系统结构,以及组件之间的关系。软件架构恢复通常有三种方法:自顶向下、自底向上和混合方法。自顶向下方法建立设计视图与代码之间的对应关系,对代码进行扫描,检查是否存在对应关系,评价结构是否合理,代表性方式是反射模型。自底向上方法从源代码提取各种不同信息,如依赖信息、模式信息等,然后将相关联的源代码实体聚合为一个组件,从而得到软件架构,如ARMIN、Alborn、DSM等。混合方法结合自顶向下和自底向上两种方法,一方面,来自底层的架构信息可以通过各种技术提取出来,在此基础上恢复出架构视图;另一方面,来自高层的架构信息可以用来校验恢复出来的架构实体是否合理,典型代表有Focus、ManSART[、DiscoTect等。然而,上述研究主要考虑如何恢复软件架构,进而对软件的可维护性、可靠性、可演进性等特征进行评估,尚未研究如何辨别恢复出的软件架构是否采用了指定架构(如微服务架构),并定量评估目标系统/软件对架构的符合程度,这在软件检测与评估领域是一个全新的问题。
发明内容
本发明的目的在于提出一种微服务软件架构识别与度量方法,定量分析软件对微服务架构的符合性。
实现本发明目的的技术解决方案为:一种微服务软件架构识别与度量方法,包括如下步骤:
对待检测的原始微服务JAR包进行预处理,将JAR包进行文件目录解构和冗余项过滤;
根据微服务软件架构特征体系,提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征,其中微服务规模特征采用子服务数量作为特征项,构件特征采用服务注册与发现组件、负载均衡组件作为特征项,微服务拓扑特征采用网关组件作为特征项;
构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性。
进一步的,所述文件目录解构的目的是,将编译好的原始微服务JAR包进行软件架构恢复,将JAR包内的文件解构组织成多个子服务的树状结构文件,具体过程是:
将原始微服务JAR包作为最顶层根节点,对应一个顶层文件夹,采用解压缩方法,将原始微服务JAR包内每个子JAR包解构成一个子服务,作为根节点的子节点,并单独生成一个子文件夹存放在顶层文件夹中,子文件夹中包含该子服务的所有字节码和运行依赖包,据此,通过构造软件包的根节点和子节点,完成待测软件文件目录解构。
进一步的,所述冗余项过滤是从解构出的子服务节点中去除掉依赖型JAR包,具体过程是:
检测JAR包是否存在启动配置文件,如果存在,进一步判断配置文件中是否指定启动类,如果存在启动类,则该JAR包为可执行JAR包,并保持该JAR包的子服务标识;否则该JAR包为依赖型JAR包,去除该JAR包的子服务标识。
进一步的,所述提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征是,采用软件粒度信息提取得到微服务规模特征,采用配置文件信息提取、构建工具信息提取和依赖包静态检测得到微服务构件特征,采用配置文件信息提取和服务间关系提取得到微服务拓扑特征,具体方法为:
①软件粒度信息提取:微服务程序预处理过程中,得到的可执行JAR包即为软件的子服务粒度实体,每个软件粒度实体包含子服务名、子服务路径;
②配置文件信息提取:不同微服务框架采用不同的配置文件,可归纳为xml、yml和properties三种类型,通过配置文件,能够获取到服务名、端口信息,如果服务本身是网关服务,还能提取到路由信息,配置文件信息提取的基本思路是:通过编写配置文件的解析代码,采用正则表达式对配置文件进行命中,并以键值对的形式记录提取的信息;
③构建工具信息提取:微服务工程在构建之前,所需要的依赖包通常无法从工程本身直接检测到,而是在构建之后才被打包引入,通过构建工具能够提取微服务工程的外部依赖,常见的构建工具包括Maven和Gradle,构建工具信息提取的基本思路是:对于Maven构建工具,解析pom.xml文件,其dependencies节点中内容即为引入的第三方依赖;对于Gradle构建工具,解析build.gradle文件,采用正则表达式来匹配外部依赖包;
④依赖包静态检测:检测微服务工程中实际引入的JAR文件,提取基本思路是:经过预处理得到的可执行JAR包,执行JAR解压缩,扫描解压后的文件能够获得子服务依赖的完整第三方JAR包,通常存在于lib文件夹下;
⑤服务间关系提取:服务间关系主要指服务注册中心与服务提供者、云配置中心与云配置客户端的关系,服务间关系提取的基本思路是:通过解压缩识别出的子服务组件信息,确定该子服务在整个微服务工程中所扮演的角色,并根据每个子服务的角色推断出子项目之间的联系。
进一步的,所述构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性是,首先定义4个特征项对评价结果的贡献影响函数,包括子服务数量贡献度概率函数、服务注册与发现组件贡献度概率函数、负载均衡组件贡献度概率函数和网关组件贡献度概率函数,然后根据各特征项相互间的权重关系,加权求和得到待测软件对微服务架构的符合程度,具体方法为:
②子服务数量贡献度概率函数
定义子服务数量贡献度概率函数如下:
f1(x)=1/(1+e3-x) (I)
其中:x表示识别出的子服务数量;
②服务注册与发现组件贡献度概率函数
定义服务注册与发现组件贡献度概率函数如下:
f2(x)=tanh(x)=(ex-e-x)/(ex+e-x) (II)
其中:x表示包含服务注册与发现组件的子服务数量;
③负载均衡组件贡献度概率函数
定义负载均衡组件贡献影响函数如下:
f3(x)=tanh(x)=(ex-e-x)/(ex+e-x) (III)
其中:x表示包含负载均衡组件的子服务数量;
④网关组件贡献度概率函数
采用指示函数来定义网关组件贡献影响函数:
f4(x)=IA(x) (IV)
其中:x表示包含网关组件的子服务数量;
(2)微服务架构符合度概率函数
根据各特征项的影响度概率函数,通过加权求和得到待测软件对微服务架构的符合程度,微服务架构符合度概率函数如下:
P=w1*f1(x)+w2*f2(x)+w3*f3(x)+w4*f4(x) (V)
其中:w1、w2、w3和w4分别为子服务数量、服务注册与发现组件、负载均衡组件以及网关组件在微服务架构符合度概率函数计算时所占的权重。
(3)决策得到待测软件是微服务程序的可能性
加权求和得到待测软件对微服务框架的符合度概率函数值,如果概率值低于60%,则认为该软件不为微服务程序的可能性比较高;否则该软件较大可能为微服务程序。
更进一步的,所述权重分配为:w1=0.3、w2=0.5、w3=0.1、w4=0.1。
一种微服务软件架构识别与度量系统,基于所述的方法进行微服务软件架构识别与度量
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述的方法进行微服务软件架构识别与度量。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的方法进行微服务软件架构识别与度量。
本发明与现有技术相比,其显著优点为:1)提供了一套兼容目前主流微服务软件架构特征体系,能够全面刻画微服务软件架构;2)提供了一套特征项在微服务架构符合性贡献度的决策计算方法,能够定量反映特征项的重要性,避免了人工判断带来的主观影响;3)填补了传统软件评测在技术框架符合性评估领域的空白,能够自动恢复待测软件的技术框架,并分析软件对微服务架构的符合性。
附图说明
图1为本发明的微服务软件架构识别与度量方法的整体架构图。
图2为本发明的程序包预处理框图。
图3为本发明的微服务框架特征提取框图。
图4为本发明的决策模型构建框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本发明的整体框架包括程序包预处理、特征建模与提取、决策模型构建和架构符合性输出四个阶段(如图1所示)。程序包预处理对原始软件JAR包进行文件目录解构和冗余项过滤;特征建模与提取依据建立的微服务架构特征体系,提取各特征项对应的特征值;决策模型以特征项贡献影响函数为基础,计算待测软件符合微服务架构的概率。架构符合性输出根据微服务架构符合度概率函数值和经验阈值,给出待测软件属于微服务架构的定性评估结果。
1.程序包预处理
微服务架构识别与度量的原始数据为Java语言开发的JAR程序包,该JAR包可独立运行,包内包含软件字节码和其运行所需的依赖包。程序包预处理主要对原始JAR进行文件目录解构和冗余项过滤,将JAR包内容进行规范化解构和组织管理,如图2所示。
(1)文件目录解构
文件目录解构的目的是将编译好的原始JAR包进行软件架构恢复,将JAR包内的文件解构组织成多个子服务的树状结构文件。文件目录解构的过程是:原始微服务JAR包作为最顶层根节点,对应一个顶层文件夹。采用解压缩方法,将原始微服务JAR包内每个子JAR包解构成一个子服务,作为根节点的子节点,并单独生成一个子文件夹存放在顶层文件夹中,子文件夹中包含该子服务的所有字节码和运行依赖包。据此,通过构造软件包的根节点和子节点,完成待测软件文件目录结构。
(2)冗余项过滤
JAR包可分为依赖型JAR包和可执行JAR包两类,其中依赖型JAR包不可单独运行,可执行JAR包才可作为子服务。冗余项过滤即从解构出的子服务节点中去除掉依赖型JAR包,其基本过程是:检测JAR包是否存在启动配置文件,如果存在,进一步判断配置文件中是否指定启动类。如果存在启动类,则该JAR包为可执行JAR包,并保持该JAR包的子服务标识;否则该JAR包为依赖型JAR包,去除该JAR包的子服务标识。
2.特征建模与提取
通过分析Spring Cloud、Dubbo等主流微服务框架,本发明对微服务框架进行特征归纳,形成微服务软件架构的特征体系;在此基础上,从程序包预处理得到的子服务集合中,采用JAR包信息提取、配置文件信息提取、构建工具信息提取、依赖包静态检测、服务间关系提取等途径,得到待测软件中服务信息、组件信息、拓扑信息等特征值,如图3所示。
本发明提出的微服务软件架构的特征体系,包括三类四个特征项,具体如下:
(1)微服务规模特征
微服务规模特征是从宏观层面表征程序提供的服务功能丰富度情况,采用子服务数量作为特征项。不同于单体应用以每一个可独立部署的应用为单位,微服务架构软件一般由多个松散的可独立部署、运行的子服务共同组成,即微服务架构软件的规模要远高于单体应用。因此,程序内部存在若干个子服务是微服务架构的一个显著特征。
(2)微服务构件特征
微服务构件特征是从微观层面表征每个子服务包含的功能组件情况,采用服务注册与发现组件、负载均衡组件作为特征项。对于微服务内部的众多子服务,每个子服务在完成自身业务的同时需要实现能够被其他服务发现以及能够调用其他服务的功能,这是每个子服务内部需要完成的功能。
(3)微服务拓扑特征
微服务拓扑特征表示子服务之间调用或依赖关系情况,采用网关组件作为特征项。微服务架构的每一个子服务的运行工作都可以由一个集群共同承担,这就使得微服务架构内部的拓扑结构越来越复杂,服务之间的联系也越来越繁琐。因此,微服务内部可以用子服务实体集以及子服务之间的拓扑关系来表示。
本发明提出的微服务软件架构的特征体系具备如下特点:(1)特征具有典型性,即微服务软件特征能够区分微服务软件与普通软件,能够代表微服务;(2)特征具有低耦合性,特征之间不能有强依赖关系,如通过服务与服务之间的端口是否对应来确定服务间的关系,往往不利于架构的识别;而如果通过服务自身的功能和角色来确定服务间的关系,可大大提高识别微服务程序的容错率。
对于上述微服务特征,采用软件粒度信息提取手段可得到微服务规模特征,采用配置文件信息提取、构建工具信息提取和依赖包静态检测等手段可得到微服务构件特征,采用配置文件信息提取和服务间关系提取等手段可得到微服务拓扑特征。
①软件粒度信息提取:微服务程序预处理过程中,得到的可执行JAR包即为软件的子服务粒度实体,每个软件粒度实体包含子服务名、子服务路径等基本信息。
②配置文件信息提取:不同微服务框架采用不同的配置文件,可归纳为xml、yml和properties三种类型。通过配置文件,可获取到服务名、端口等信息,如果服务本身是网关服务,还可提取到路由信息。配置文件信息提取的基本思路是:通过编写配置文件的解析代码,采用正则表达式对配置文件进行命中,并以键值对的形式记录提取的信息。
③构建工具信息提取:微服务工程在构建之前,所需要的依赖包通常无法从工程本身直接检测到,而是在构建之后才被打包引入。通过构建工具可提取微服务工程的外部依赖,常见的构建工具包括Maven和Gradle。构建工具信息提取的基本思路是:对于Maven构建工具,解析pom.xml文件,其dependencies节点中内容即为引入的第三方依赖;对于Gradle构建工具,解析build.gradle文件,采用正则表达式来匹配外部依赖包。
④依赖包静态检测:检测微服务工程中实际引入的JAR文件,提取基本思路是:经过预处理得到的可执行JAR包,执行JAR解压缩,扫描解压后的文件可以获得子服务依赖的完整第三方JAR包,他们通常存在于lib文件夹下。
⑤服务间关系提取:服务间关系主要指服务注册中心与服务提供者、云配置中心与云配置客户端的关系。服务间关系提取的基本思路是:通过解压缩识别出的子服务组件信息,确定该子服务在整个微服务工程中所扮演的角色,并根据每个子服务的角色推断出子项目之间的联系。
3.决策模型构建
根据微服务软件架构特征体系,构建微服务软件架构符合度决策模型。模型首先定义4个特征项对评价结果的贡献影响函数,继而根据各特征项相互间的权重关系,通过加权求和得到待测软件对微服务架构的符合程度,如图4所示。
(1)特征项贡献度概率函数
特征项贡献度概率函数包括子服务数量贡献度概率函数、服务注册与发现组件贡献度概率函数、负载均衡组件贡献度概率函数和网关组件贡献度概率函数。
③子服务数量贡献度概率函数
微服务程序不同于普通单体java项目,即单体java程序只有唯一的源代码目录,而微服务中多个子服务协同运转是其重要特征,通过该特征能够过滤大量未采用微服务架构的单体java程序。经过调研,sigmoid函数能够刻画子服务数量在微服务架构判断中的影响,过滤单体java程序。据此,本发明定义子服务数量贡献度概率函数如下:
f1(x)=1/(1+e3-x) (I)
其中:x表示识别出的子服务数量。子服务数量贡献影响函数具备如下特性:
a)子服务的数量较小时,函数值趋近于0;
b)子服务的数量较大时,函数值逐渐增大,且函数值增长速度逐渐下降,最后趋近于1。
②服务注册与发现组件贡献度概率函数
服务注册与发现组件是微服务程序的核心组件,服务注册与发现组件的检测对于识别微服务架构至关重要,每个子服务对外提供服务或者请求其他服务都需要服务注册与发现组件。若将具有服务注册与发现组件的子项目标识为真正的子服务,则标记的子服务越多,待测软件遵循微服务架构的可能性就越高。显然,标记子服务的数量和最终概率值正相关,但子服务数量对最终概率值的影响不是单纯的线性关系,即当子服务数量达到一定值时,概率加成接近峰值且趋于稳定。经过调研,tanh函数能较好地符合此特性,本发明定义服务注册与发现组件贡献度概率函数如下:
f2(x)=tanh(x)=(ex-e-x)/(ex+e-x) (II)
其中:x表示包含服务注册与发现组件的子服务数量。服务注册与发现组件贡献影响函数具有如下特性:
a)没有检测到任何子服务含有服务注册与发现组件时,函数值为0;
b)存在服务含有服务注册与发现组件,函数值逐渐增大,随着含有注册与发现组件的服务数量逐渐增加,函数值逐渐增大,且函数值增长速度逐渐下降,最后趋近于1。
③负载均衡组件贡献度概率函数
负载均衡也是微服务程序中的常用组件,通常微服务由集群中若干服务器节点来支持,负载均衡是服务调度必须考虑的问题。非微服务程序可能同样具有负载均衡组件或功能,但部署规模远不如微服务程序。负载均衡规模和微服务程序高度相关,tanh函数同样适用于此。本发明定义负载均衡组件贡献影响函数如下:
f3(x)=tanh(x)=(ex-e-x)/(ex+e-x) (III)
其中:x表示包含负载均衡组件的子服务数量。负载均衡组件影响度概率函数具有如下特性:
a)没有检测到任何子服务含有负载均衡组件时,函数值为0;
b)存在服务含有负载均衡组件时,函数值逐渐增大,随着含有负载均衡组件的服务数量逐渐增加,函数值逐渐增大,且函数值增长速度逐渐下降,最后趋近于1。
④网关组件贡献度概率函数
网关是微服务程序中常用组件,网关组件与微服务架构的关系是存在关系,即要么存在要么不存在。此外,网关服务的数量特征和服务注册与发现组件的数量特征不同,一般而言,一个微服务程序如果有多个子服务,只有一个网关服务也是足够的。据此,本发明采用指示函数来定义网关组件贡献影响函数:
f4(x)=IA(x) (IV)
其中:x表示包含网关组件的子服务数量。网关组件贡献度概率函数的特性明显,即存在某个子服务含有网关组件时,函数值为1,否则为0。
(2)微服务架构符合度概率函数
根据各特征项的影响度概率函数,通过加权求和得到待测软件对微服务架构的符合程度。本发明定义微服务架构符合度概率函数如下:
P=w1*f1(x)+w2*f2(x)+w3*f3(x)+w4*f4(x) (V)
其中:w1、w2、w3和w4分别为子服务数量、服务注册与发现组件、负载均衡组件以及网关组件在微服务架构符合度概率函数计算时所占的权重。根据经验值,比较理想的权重分配为:w1=0.3、w2=0.5、w3=0.1、w4=0.1。
本发明还提出一种微服务软件架构识别与度量系统,基于所述的方法进行微服务软件架构识别与度量。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述的方法进行微服务软件架构识别与度量。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的方法进行微服务软件架构识别与度量。
实施例
为了验证本发明方案的有效性,进行如下仿真实验,实现软件架构特征提取以及对微服务架构的符合性评测,具体操作步骤如下:
首先通过类型检查,确定待测软件形态为利用Java语言开发的JAR包;然后,利用JAR包文件解压缩,恢复树状层次的子服务文件目录结构;最后,通过检查JAR包内是否存在启动类,过滤依赖型的JAR包。
(1)对待识别与度量的软件进行类型检查,判断其软件形态是否为Java语言开发的JAR包;若是,则执行下述过程;若不是,则结束整个流程,标识该软件不可识别;
(2)将原始微服务JAR包采用解压缩方法进行解构,提取JAR包中子服务粒度实体;
(3)检测JAR包的子服务是否存在启动配置文件,如果存在,进一步判断配置文件中是否指定启动类;如果都满足,则标记该子服务为可执行JAR包,否则标记为依赖程序包;
(4)将预处理得到的可执行JAR包作为微服务规模特征值;
(5)对每个可执行JAR包,通过配置文件信息提取、构建工具信息提取和依赖包静态检测,分析得到微服务构件特征值;
(6)对每个可执行JAR包,通过服务间关系提取,分析得到微服务拓扑特征值;
(7)根据公式(I),计算微服务规模特征的贡献度概率函数值,根据公式(II),计算服务注册与发现组件特征的贡献度概率函数值,根据公式(III),计算负载均衡组件特征的贡献度概率函数值,根据公式(IV),计算微服务拓扑特征的贡献度概率函数值;
(8)根据公式(V),加权求和得到待测软件对微服务框架的符合度概率函数值;如果概率值低于60%,则认为该软件不为微服务程序的可能性比较高;否则该软件较大可能为微服务程序。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (9)

1.一种微服务软件架构识别与度量方法,其特征在于,包括如下步骤:
对待检测的原始微服务JAR包进行预处理,将JAR包进行文件目录解构和冗余项过滤;
根据微服务软件架构特征体系,提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征,其中微服务规模特征采用子服务数量作为特征项,构件特征采用服务注册与发现组件、负载均衡组件作为特征项,微服务拓扑特征采用网关组件作为特征项;
构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性。
2.根据权利要求1所述的微服务软件架构识别与度量方法,其特征在于,所述文件目录解构的目的是,将编译好的原始微服务JAR包进行软件架构恢复,将JAR包内的文件解构组织成多个子服务的树状结构文件,具体过程是:
将原始微服务JAR包作为最顶层根节点,对应一个顶层文件夹,采用解压缩方法,将原始微服务JAR包内每个子JAR包解构成一个子服务,作为根节点的子节点,并单独生成一个子文件夹存放在顶层文件夹中,子文件夹中包含该子服务的所有字节码和运行依赖包,据此,通过构造软件包的根节点和子节点,完成待测软件文件目录解构。
3.根据权利要求2所述的微服务软件架构识别与度量方法,其特征在于,所述冗余项过滤是从解构出的子服务节点中去除掉依赖型JAR包,具体过程是:
检测JAR包是否存在启动配置文件,如果存在,进一步判断配置文件中是否指定启动类,如果存在启动类,则该JAR包为可执行JAR包,并保持该JAR包的子服务标识;否则该JAR包为依赖型JAR包,去除该JAR包的子服务标识。
4.根据权利要求1所述的微服务软件架构识别与度量方法,其特征在于,所述提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征是,采用软件粒度信息提取得到微服务规模特征,采用配置文件信息提取、构建工具信息提取和依赖包静态检测得到微服务构件特征,采用配置文件信息提取和服务间关系提取得到微服务拓扑特征,具体方法为:
①软件粒度信息提取:微服务程序预处理过程中,得到的可执行JAR包即为软件的子服务粒度实体,每个软件粒度实体包含子服务名、子服务路径;
②配置文件信息提取:不同微服务框架采用不同的配置文件,可归纳为xml、yml和properties三种类型,通过配置文件,能够获取到服务名、端口信息,如果服务本身是网关服务,还能提取到路由信息,配置文件信息提取的基本思路是:通过编写配置文件的解析代码,采用正则表达式对配置文件进行命中,并以键值对的形式记录提取的信息;
③构建工具信息提取:微服务工程在构建之前,所需要的依赖包通常无法从工程本身直接检测到,而是在构建之后才被打包引入,通过构建工具能够提取微服务工程的外部依赖,常见的构建工具包括Maven和Gradle,构建工具信息提取的基本思路是:对于Maven构建工具,解析pom.xml文件,其dependencies节点中内容即为引入的第三方依赖;对于Gradle构建工具,解析build.gradle文件,采用正则表达式来匹配外部依赖包;
④依赖包静态检测:检测微服务工程中实际引入的JAR文件,提取基本思路是:经过预处理得到的可执行JAR包,执行JAR解压缩,扫描解压后的文件能够获得子服务依赖的完整第三方JAR包,通常存在于lib文件夹下;
⑤服务间关系提取:服务间关系主要指服务注册中心与服务提供者、云配置中心与云配置客户端的关系,服务间关系提取的基本思路是:通过解压缩识别出的子服务组件信息,确定该子服务在整个微服务工程中所扮演的角色,并根据每个子服务的角色推断出子项目之间的联系。
5.根据权利要求1所述的微服务软件架构识别与度量方法,其特征在于,所述构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性是,首先定义4个特征项对评价结果的贡献影响函数,包括子服务数量贡献度概率函数、服务注册与发现组件贡献度概率函数、负载均衡组件贡献度概率函数和网关组件贡献度概率函数,然后根据各特征项相互间的权重关系,加权求和得到待测软件对微服务架构的符合程度,具体方法为:
①子服务数量贡献度概率函数
定义子服务数量贡献度概率函数如下:
f1(x)=1/(1+e3-x) (I)
其中:x表示识别出的子服务数量;
②服务注册与发现组件贡献度概率函数
定义服务注册与发现组件贡献度概率函数如下:
f2(x)=tanh(x)=(ex-e-x)/(ex+e-x) (II)
其中:x表示包含服务注册与发现组件的子服务数量;
③负载均衡组件贡献度概率函数
定义负载均衡组件贡献影响函数如下:
f3(x)=tanh(x)=(ex-e-x)/(ex+e-x) (III)
其中:x表示包含负载均衡组件的子服务数量;
④网关组件贡献度概率函数
采用指示函数来定义网关组件贡献影响函数:
f4(x)=IA(x) (IV)
其中:x表示包含网关组件的子服务数量;
(2)微服务架构符合度概率函数
根据各特征项的影响度概率函数,通过加权求和得到待测软件对微服务架构的符合程度,微服务架构符合度概率函数如下:
P=w1*f1(x)+w2*f2(x)+w3*f3(x)+w4*f4(x) (V)
其中:w1、w2、w3和w4分别为子服务数量、服务注册与发现组件、负载均衡组件以及网关组件在微服务架构符合度概率函数计算时所占的权重。
(3)决策得到待测软件是微服务程序的可能性
加权求和得到待测软件对微服务框架的符合度概率函数值,如果概率值低于60%,则认为该软件不为微服务程序的可能性比较高;否则该软件较大可能为微服务程序。
6.根据权利要求5所述的微服务软件架构识别与度量方法,其特征在于,所述权重分配为:w1=0.3、w2=0.5、w3=0.1、w4=0.1。
7.一种微服务软件架构识别与度量系统,其特征在于,基于权利要求1-6所述的方法进行微服务软件架构识别与度量。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1-6所述的方法进行微服务软件架构识别与度量。
9.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6所述的方法进行微服务软件架构识别与度量。
CN202011378841.8A 2020-12-01 2020-12-01 一种微服务软件架构识别与度量方法 Active CN112579436B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011378841.8A CN112579436B (zh) 2020-12-01 2020-12-01 一种微服务软件架构识别与度量方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011378841.8A CN112579436B (zh) 2020-12-01 2020-12-01 一种微服务软件架构识别与度量方法

Publications (2)

Publication Number Publication Date
CN112579436A true CN112579436A (zh) 2021-03-30
CN112579436B CN112579436B (zh) 2022-11-29

Family

ID=75126860

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011378841.8A Active CN112579436B (zh) 2020-12-01 2020-12-01 一种微服务软件架构识别与度量方法

Country Status (1)

Country Link
CN (1) CN112579436B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113268425A (zh) * 2021-05-27 2021-08-17 东南大学 一种基于规则的微服务源文件预处理方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090064324A1 (en) * 2007-08-30 2009-03-05 Christian Lee Hunt Non-intrusive monitoring of services in a service-oriented architecture
US20090254394A1 (en) * 2006-02-06 2009-10-08 Robert Moel System and Method for Managing Service Facilities in a Service Enterprise
CN110162414A (zh) * 2019-02-01 2019-08-23 腾讯科技(深圳)有限公司 基于微服务架构实现人工智能服务的方法及装置
CN110543462A (zh) * 2019-09-04 2019-12-06 陕西丝路云启智能科技有限公司 微服务可靠性预测方法、预测装置、电子设备及存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090254394A1 (en) * 2006-02-06 2009-10-08 Robert Moel System and Method for Managing Service Facilities in a Service Enterprise
US20090064324A1 (en) * 2007-08-30 2009-03-05 Christian Lee Hunt Non-intrusive monitoring of services in a service-oriented architecture
CN110162414A (zh) * 2019-02-01 2019-08-23 腾讯科技(深圳)有限公司 基于微服务架构实现人工智能服务的方法及装置
CN110543462A (zh) * 2019-09-04 2019-12-06 陕西丝路云启智能科技有限公司 微服务可靠性预测方法、预测装置、电子设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王子勇等: "一种基于执行轨迹监测的微服务故障诊断方法", 《软件学报》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113268425A (zh) * 2021-05-27 2021-08-17 东南大学 一种基于规则的微服务源文件预处理方法
CN113268425B (zh) * 2021-05-27 2024-03-22 东南大学 一种基于规则的微服务源文件预处理方法

Also Published As

Publication number Publication date
CN112579436B (zh) 2022-11-29

Similar Documents

Publication Publication Date Title
CN105022960B (zh) 基于网络流量的多特征移动终端恶意软件检测方法及系统
CN103577324B (zh) 移动应用中隐私信息泄露的静态检测方法
CN111401914B (zh) 风险评估模型的训练、风险评估方法及装置
CN103036730B (zh) 一种对协议实现进行安全测试的方法及装置
EP2095236B1 (en) Method, system and computer program for testing software applications based on multiple data sources
CN106803799B (zh) 一种性能测试方法和装置
CN103297267B (zh) 一种网络行为的风险评估方法和系统
CN110110529B (zh) 一种基于复杂网络的软件网络关键节点挖掘方法
Shtern et al. Methods for selecting and improving software clustering algorithms
CN105376223B (zh) 网络身份关系的可靠度计算方法
CN111290958B (zh) 一种调试智能合约的方法及装置
CN103678124B (zh) 基于持续集成环境的视频监控平台自动测试方法及装置
CN104866764B (zh) 一种基于对象引用图的Android手机恶意软件检测方法
CN110825615A (zh) 基于网络嵌入的软件缺陷预测方法及系统
CN106530121A (zh) 电力监控系统安全防护合规性检测方法和系统
CN112579436B (zh) 一种微服务软件架构识别与度量方法
Mısırlı et al. Different strokes for different folks: A case study on software metrics for different defect categories
CN114462040A (zh) 一种恶意软件检测模型训练、恶意软件检测方法及装置
CN114785710A (zh) 一种工业互联网标识解析二级节点服务能力的评估方法及系统
Mendling et al. Metrics for business process models
Abdurazik et al. Coupling-based class integration and test order
CN117376228B (zh) 一种网络安全测试工具确定方法及装置
CN110287700A (zh) 一种iOS应用安全分析方法及装置
CN113722711A (zh) 基于大数据安全漏洞挖掘的数据添加方法及人工智能系统
CN112416800A (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
GR01 Patent grant
GR01 Patent grant