基于类耦合关系的微服务拆分方法探究

(整期优先)网络出版时间:2023-06-29
/ 2

基于类耦合关系的微服务拆分方法探究

朱怡 

中国移动通信集团陕西有限公司     陕西省西安市  710021

摘要:微服务的构建是为满足社会需求所产生的,在市场中微服务已成为热门发展内容。为解决微服务拆分现存问题,本文主要对微服务的拆分进行探索,思考类耦合关系下进行拆分的方法,对微服务进行静态耦合分析、动态耦合分析,再设计出类耦合详细关系图,最后对微服务进行有效拆分,以此为相关研究者提供参考思路。

关键词:类耦合关系;微服务;拆分;方法探究

引言

信息时代的到来,促使互联网得到快速发展,软件是通过互联网为人们提供服务的媒介,其种类越来越多样化,软件之间的竞争也逐渐激烈。软件的维护与运行是目前人们关注的重点。微服务作为服务类软件构建的重要技术,将软件中的各项模块划分为独立运行的小型服务系统,使各模块之间互不干扰,在互联网领域中成为关注的重点。

1 类耦合关系

1.1静态耦合关系

类的耦合关系中,静态耦合关系是系统源代码中类之间的耦合关系,不受系统程序执行的影响,这种耦合关系程序员只需要对源代码进行继承、关联、依赖关系的分析就可以完成。继承关系是指一个程序继承另一个程序的功能,不仅能够运行另一程序的功能,还能够展现自身的特有功能,这种关系被称为一个程序继承于另一个程序。在耦合关系中,继承关系是一种强耦合关系,这是因为若是另一程序发生变化,会影响继承程序的功能。在运算中用符号记作Gen,若a程序继承于b,则Gen=1,若否则为0。关联关系是两个程序都共有一个功能,也就是说一个程序中包含另一个程序的组成部分。关联关系在耦合关系中,是一种长期并平等的关系,所以关联关系的耦合关系与继承关系的相比会较弱。在运算中用符号记作Ass,若a程序关联于b,则Ass=1,若否则为0。依赖关系是一个程序利用另一个程序的方法,或者是一个程序产生另一个程序的组成部分,这种关系被称为是一个程序依赖于另一个程序。两个程序之间关系是临时性的,这使得耦合关系没有关联关系的耦合关系强。在运算中用符号记作Dep,若a依赖于b,则Dep=1,若否则为0。静态耦合度往往用Cs表示,是继承关系、关联关系、依赖关系各自与特殊值相乘的和。公式为Cs1Gen2Ass3Dep(α1=0.6,α2=0.3,α3=0.1)

1.2动态耦合关系

动态耦合关系是系统中程序执行时所展现出类之间的耦合关系。针对微服务程序中可以发现,微服务往往是围绕需求(即业务功能)进行建设,这使得微服务通常是专门服务某一种需求,因此在系统程序运作时,如果存在两个程序共同服务一种需求的情况,那么这两个程序通常情况下会被划分为同一个微服务当中[1]

2 探索微服务拆分具体方法

2.1静态耦合分析

想要实现对微服务的拆分,首要步骤就是对系统源代码进行静态耦合关系的分析,思考程序之间耦合关系是继承、关联、还是依赖关系,并构建出程序之间的静态耦合关系图,计算静态耦合度,为后续进行微服务拆分提供基础帮助。为提升对系统源代码的静态分析速度,可以采用Java作为分析工具,利用Java可以实现对系统所有类的分析,并自动生成关系图。自动生成的静态耦合关系图中,只存在结点(即类)之间的关系,并不标注权值(即耦合度)。其中将结点(即类)之间的继承关系、关联关系、依赖关系,在图中进行了详细标识。另外,使用Java工具将系统程序中的耦合关系进行提取,可能会存在重复耦合、非需求的类、类的自我耦合等情况,这就导致在计算静态耦合度会出现数值不准确的情况,为设计类耦合关系图提供错误的数据,不利于微服务的正确拆分。所以在通过Java得出静态耦合关系图后,需要进行严格检查,避免关系图中存在错误,若是存在错误,及时根据系统程序的耦合关系情况进行修改,保证为类耦合关系图的设计提供可靠数据支持。

2.2动态耦合分析

动态耦合分析是微服务拆分的重要基础,通过对微服务系统的功能动态运行进行分析,推断出类与微服务功能的关系图,并计算出动态耦合度。对微服务系统的功能动态运行进行分析,为保证分析的效率性,可以利用Aspectj作为辅助工具,通过运行代理的方法在系统程序转换时,将外部程序进行植入命令,使用此工具不会对植入的程序造成影响。采用Aspectj还可以生成类与需求(即业务功能)的关联图,从关系图中可以分析出类与类之间的关联。在动态耦合关系中,存在多个类服务一个业务功能、一个类服务多个业务功能。最后对动态耦合度进行计算,动态耦合度是类与业务功能之间数量的比值关系,是一个类与另一个类共同完成的业务功能数量与一个类与另一个类参与到所有业务功能的数量的比值[2]

2.3设计类耦合关系图

设计类耦合关系图是保证微服务合理拆分的重要基础。为保证类耦合关系图设计的合理性,就需要依靠静态耦合度与动态耦合度的矩阵进行计算,得出耦合度矩阵权值。耦合度矩阵权值是静态耦合度矩阵镜像化操作与动态耦合度矩阵相加的和。根据计算出的耦合度矩阵数值,将系统程序中的每个类之间的耦合关系,通过关系图进行展示。将类作为耦合关系图的结点,结合系统程序中的实际关系进行连接,并标注出结点与结点(即类与类)之间的耦合度(即权值)。在类耦合关系图设计完成后,还需要再次进行复查,结合Java分析的数据,对类耦合关系图进行计算与比对,确保类耦合关系图与实际系统程序的耦合关系、耦合度相吻合,避免类耦合关系图设计失误情况的发生,为后续进行微服务拆分提供准确的参考基础。通过对类耦合关系图进行设计,保证类耦合关系图的准确程度,确保类耦合关系图中每个结点(即类)之间耦合关系的正确性,为微服务拆分的准确性、效率性提供帮助。在类耦合关系图设计下,有效避免微服务拆分错误情况的发生,防止删除权值错误情况的出现,为微服务拆分效率提供重要保障。

2.4微服务拆分

微服务的拆分是最重要的执行步骤,通过参考静态耦合分析关系图、动态耦合关系图,以及详细设计的类耦合关系图,进行拆分。根据以上分析的类的耦合关系图进行拆分,将系统程序中的各结点集拆分成互不相通的连通分量,其中每一个连通分量所具有的类均组合成一个微服务,连通分量也就是微服务的数目,可以受程序员的分配。为实现对耦合关系的拆分,就需要将关系图当中多余的部分进行删除,直到连通分量的数目达到程序员的要求。同时为保证微服务拆分的准确程度,需要以微服务的高内聚低耦合原则作为拆分核心,将计算出的静态、动态耦合度较高的程序(即类)划分到相同的微服务程序当中,删除耦合关系图当中权值边相对较小的部分。另外,为进一步保证拆分与删除的效率,实现删除一边完成一次拆分,首先需要将耦合关系图彻底分析并摊开,转换成对应的最大生成树,确保最大生成树是每个耦合关系图的最小的连通子图,涵盖耦合关系图中的所有结点,并确保最大生成树边缘的权值总和为最大。不断删除最大生成树中权值最小的边,生成新的连通分量,直到连通分量的数值达到需要,则完成微服务拆分。此外,为保证微服务拆分的质量,就需要保证微服务结构化模块的水平,确保结构化模块水平为最高,促使微服务拆分次数得到减少[3]

结论:综上所述,本文主要基于类耦合关系对微服务拆分进行探索。首先对类耦合关系进行细化,分为静态与动态,再基于类耦合关系对微服务进行拆分,通过对微服务进行静态与动态分析,设计出类耦合关系图,为微服务拆分提供基础,最后以关系图作为拆分参考,实现微服务的有效拆除。基于类耦合关系的微服务拆分,不仅提升拆分效率,还对拆分的效果具有重要帮助。

参考文献:

[1]刘若宇,刘晓燕. 基于类耦合关系的微服务拆分方法[J]. 陕西理工大学学报(自然科学版),2023,39(01):60-66.

[2]张海燕,姚慧子. 一类耦合交错的Hadamard型分数阶微分系统边值问题[J]. 宿州学院学报,2022,37(12):6-9+15.

[3]刘若宇,刘晓燕. 一种组合优化模型驱动的微服务拆分方法[J]. 小型微型计算机系统:1-8.