《Axioms》:Method for Automated Decomposition of Monolithic Software Systems Based on Graph Neural Networks
编辑推荐:
本研究旨在通过研究并改进从单体架构向微服务架构自动迁移的方法,提升采用微服务架构的软件系统的体系结构质量。研究采用了静态源代码分析方法、图论、图结构变换算法(强连通分量检测、冗余依赖与循环依赖检测)、聚类分析算法、图神经网络(GNN),以及针对簇内一致性与簇间
本研究旨在通过研究并改进从单体架构向微服务架构自动迁移的方法,提升采用微服务架构的软件系统的体系结构质量。研究采用了静态源代码分析方法、图论、图结构变换算法(强连通分量检测、冗余依赖与循环依赖检测)、聚类分析算法、图神经网络(GNN),以及针对簇内一致性与簇间连通性的多准则评估方法。研究结果构成了针对一项科学问题的综合性解决方案:在控制服务间连通性的同时,确保单体软件系统能够自动转换为具有较高体系结构组件内部一致性的微服务架构。
该论文发表于《Axioms》,围绕单体软件系统向微服务架构自动化迁移这一关键问题,提出了一种融合图分析、动态聚类与图神经网络(GNN)的端到端分解框架。研究背景在于,近年来软件开发实践不断从单体架构转向微服务架构,原因是微服务在可扩展性、灵活性和可维护性方面通常具有更明显优势。然而,单体系统往往存在隐式依赖、模块高度耦合、领域边界模糊等问题,导致人工拆分过程耗时、易错且难以稳定复用。现有启发式方法、度量驱动方法与传统图方法虽然在提升模块内聚性和结构模块化方面取得了一定进展,但仍面临若干局限,包括对数据配置较敏感、结构特征与语义特征融合困难、冗余跨模块关系消除效率有限,以及训练模型对异构软件领域泛化不足。因此,开展一种兼顾结构依赖、语义信息与自动学习能力的分解研究,具有明确的理论价值与工程意义。
针对上述问题,研究人员提出了一套面向单体系统自动化分解的综合方法。该方法首先对源代码执行静态分析,构建抽象语法树(AST)与软件依赖有向图,并通过节点中心性、桥边、割点、边权重与节点权重识别体系结构中的关键构件与关键连接。随后,对依赖图执行结构变换,包括识别强连通分量(SCC)、检测并削弱循环依赖、合并内部高凝聚子图、删除冗余边,以获得更稀疏、边界更清晰的体系结构图。在此基础上,研究人员提出动态聚类算法选择机制,根据图的节点规模、图密度、局部扇出(FanOut)、共享资源比(SRR)与介数中心性等特征,自适应选择最合适的聚类策略。为进一步提高分解质量,研究又设计了簇结构优化过程,以多目标函数联合提升内聚性、降低耦合度并增强语义一致性。最后,研究引入图卷积网络(GCN)的简化变体 SimpleGCN,利用结构特征与语义特征学习节点嵌入,并通过包含交叉熵、内聚性、耦合性与语义一致性的多准则损失函数,实现自动化微服务边界识别。
从方法层面看,研究最具特点之处在于将启发式图分析与图神经网络训练机制衔接起来。研究人员并未依赖专家人工标注或预先构造的标准分解数据集,而是利用启发式图方法生成初始参考分解与训练标签,使图神经网络能够在缺乏人工标注的条件下学习软件体系结构中的潜在分组规律。这一设计缓解了自动化软件分解场景中训练样本难以获得的问题,也使系统具备从结构关系与语义属性联合建模的能力。论文的核心结论是:所提出方法能够在控制服务间连接的同时,获得更高的簇内一致性与更优的体系结构模块化水平,并在工业软件系统实验中优于多种已有方法。
方法概括方面,研究主要使用了四类关键技术。第一,基于静态源代码分析构建 Java/Spring 单体系统的依赖图,并结合中心性分析、桥边/割点识别、强连通分量检测与冗余边删除执行图结构净化。第二,基于图规模、密度、共享资源比和介数中心性实现聚类算法动态选择。第三,采用局部迭代搜索对初始簇进行结构细化,以多目标函数联合优化内聚、耦合和语义一致性。第四,使用 SimpleGCN 学习节点嵌入,并在训练中融合结构特征与语义标签。实验样本包括一个工业级物流流程管理 Java 单体系统,以及 Spring PetClinic、Broadleaf Commerce、OpenMRS Core、Apache OFBiz 等开源 Java 项目作为训练集。
以下结合论文结果部分各小标题,对研究结果进行浓缩解读。
3.1. Experimental Setup
研究人员搭建了实验环境,并在 Google Colab 的 Python 3.12.13 环境中完成实验。验证对象包括一个工业级物流流程管理单体系统,其以 Java 和 Spring 框架实现,包含多个互联业务模块。由于保密限制,源代码未公开。该设计表明,研究结果建立在真实企业级单体应用的依赖图之上,重点评估所提方法的分解质量以及动态聚类算法选择的有效性。同时,研究还结合一组测试软件系统进行比较评估,因此文中指标主要反映所研究软件系统上的分解质量,而非多次重复试验的统计推断。
3.2. Experimental Evaluation of Dynamic Clustering Algorithm Selection
为验证动态聚类算法选择机制,研究人员在 30 个不同规模项目上构建图模型,并对同一图依次运行多种候选聚类算法,再根据 cohesion 与 coupling 的平衡判断最优算法。实验显示,该动态选择方法在 73.3% 的情况下与穷举搜索得到的最优选择完全一致,在 86.7% 的情况下,正确算法位于前两名备选之中。当选择并非最优时,cohesion 的平均偏差约为 ?0.004,说明内部一致性损失极小;而簇间连通性的平均增幅约为 0.14,表明该机制整体稳定。由此可见,自适应算法选择能够较准确地将不同结构特征的软件依赖图映射到更合适的聚类策略。
3.3. Experimental Evaluation of the Graph-Based Decomposition Approach
在工业软件系统上,研究人员首先进行了语法与语义分析,共处理 518 个文件(不含测试文件),构建出包含 345 个节点、641 条有向依赖边的系统图。经过图结构变换后,边数降至 452,意味着删除了 189 条边,约占原始边数的 29%。这一结果表明,所提结构净化过程有效降低了循环性与噪声。随后,根据图的结构指标,系统被归类为适合采用 Label Propagation 聚类算法。初始聚类后形成 32 个簇,但平均内聚性仅为 0.0682,耦合值高达 119.0,语义一致性为 0.4883。这说明未经进一步优化时,初始簇虽然能够形成基本划分,但内部连接较弱,跨簇依赖较多,语义边界也仅部分清晰。
3.4. Evaluation of Cluster Structure Refinement Method
在同一工业项目上,研究人员进一步应用簇结构优化方法。结果显示,平均 cohesion 从 0.0682 提升至 0.0752,总 intercluster dependencies 从 119.00 降至 88.20,semantic coherence 从 0.4883 提升至 0.6358。该结果证明,在初始聚类之后增加局部结构优化阶段,能够显著增强簇的内部结构完整性,减少模块外部依赖,并更好地贴合领域语义边界。同时,这一步生成的启发式分解结果还被进一步用于构造图神经网络的训练标签。
3.5. Evaluation of the Graph Neural Network-Based Decomposition Model
在图神经网络训练阶段,研究人员采用了 Spring PetClinic、Broadleaf Commerce、OpenMRS Core 与 Apache OFBiz 等开源 Java 项目作为训练集,覆盖不同规模和体系结构风格。模型训练目标并非简单记忆簇标签,而是学习能够反映软件结构与功能上下文的节点嵌入(embeddings)。在测试阶段,模型应用于工业项目,先构建体系结构依赖图与节点初始特征,再由神经网络直接计算类级嵌入,并输入后续聚类流程。结果表明,与启发式方法相比,GNN 方法显著改善了分解质量:semantic consistency 从 0.4883 提升至 0.6358,说明同一簇内的领域语义同质性增强;平均 cohesion 从 0.0752 提升至 0.0890,增幅为 18.3%,说明簇内连接更紧密;平均 coupling 从 4.20 降至 3.36,总簇间连接从 88.2 降至 67.2,降幅达 23.8%,说明服务间依赖进一步减弱。该部分结果直接支持了研究主张,即图神经网络能够识别传统启发式方法难以捕捉的隐含关系,从而形成更优质的服务边界。
3.6. Comparative Analysis with Existing Approaches
研究人员将所提方法与 CoGCN、DEEPLY、HyDEC、GDC-DVF 和 Mono2Micro 等方法进行比较,并采用 Structural Modularity(SM)与 Inter-Call Percentage(ICP)作为评价指标。在工业项目上,所提方法达到 SM = 0.1295,高于 CoGCN 的 0.027、DEEPLY 的 0.040、GDC-DVF 的 0.041、Mono2Micro 的 0.030,也高于 HyDEC 的 0.080;同时,ICP = 0.2950,为所有比较方法中最低。该结果说明,研究方法在提升结构模块化和降低跨服务调用比例方面均具有明显优势,体现出更平衡、更合理的微服务划分效果。
3.7. Complexity and Scalability Analysis
研究还分析了方法的复杂度与可扩展性。依赖图构建、依赖过滤以及多数预处理与图分析步骤,复杂度相对于节点数 V 和边数 E 为线性或准线性。图存储采用稀疏表示,内存开销主要由图结构和节点特征矩阵决定。SimpleGCN 每层卷积的计算复杂度与边数及隐藏层维度 h 成正比,总训练复杂度可写为 O(Eh)。由于软件依赖图通常较稀疏,计算成本随依赖数增长基本呈线性上升,因此该方法具备面向大型企业级软件系统的应用潜力。
讨论部分表明,实验结果总体支持研究的初始工作假设:将图分析、动态聚类选择、簇结构改进与图神经网络联合使用,能够提高单体软件系统向微服务的分解质量。启发式图方法能够形成有效初始分解,但结构和语义质量仍有较大提升空间;簇优化步骤则在此基础上增强了模块内部完整性与语义对齐程度;图神经网络进一步整合结构与语义特征,提升了内聚性并降低了簇间依赖。相较于仅依赖固定聚类策略或单一结构相似性的已有方法,本文所提自适应多阶段框架更适于处理真实软件系统中复杂、隐式且异质的依赖模式。论文同时指出了若干限制:尚需在拥有数千类的大规模企业单体系统上进一步测试;SM 与 ICP 等结构指标无法覆盖组织与运维层面的迁移因素;图神经模型在异构代码库中仍可能需要额外算力与参数调优。
研究结论部分可译为:本研究提出了一种单体软件系统分解方法,该方法结合了初始簇的启发式构建、基于图结构特征的进一步优化,以及用于自动化聚类过程的图神经网络。所提出方法综合考虑了软件构件之间的结构依赖、类的语义特征以及依赖图的拓扑属性,从而能够形成质量更高的软件系统分解结果。经训练的图神经模型不仅能够复现启发式算法在运行中识别出的模式,而且能够在内聚性、耦合性和语义一致性方面进一步改进结果,这一点已通过工业软件系统实验得到验证。与现有方法的比较分析表明,该方法具有较强竞争力,并且适用于复杂软件系统的分解。所得结果显示出较高的结构模块化水平与较低的簇间依赖水平,从而证明了该方法用于从单体软件系统中自动提取微服务的可行性。未来研究方向包括引入程序执行动态分析、在特征向量中纳入文档与 API 接口信息以增强语义模型,以及探索利用神经网络模型实现数据库结构在服务间的自动分配。