论文部分内容阅读
传统的软件系统往往基于单体式架构开发,所有的组件、模块和资源等都集中在同一个软件实体中。然而,随着业务复杂度的不断攀升,单体式软件系统的整体复杂度和系统各个组件之间的耦合度变得越来越高,代码也由此变得更加不可控且难以理解。微服务架构作为一个灵活的软件架构体系,能很好地解决单体式架构高复杂度和高耦合度等问题。但是将一个庞大的单体式遗留软件系统迁移至微服务架构是一项代价极高的任务,开发人员不仅要理清业务逻辑,更要理解程序的运行方式。在这个过程中,如何将遗留软件系统有效划分为可组合的微服务是将其迁移至微服务架构系统的关键步骤之一。为此,本文从RESTfulAPI和类依赖关系两个方向出发,分别提出了两种从单体式遗留软件系统中识别微服务的方法,以期望降低技术人员在微服务迁移时的工作复杂度。
1)根据RESTfulAPI以资源为核心的设计原则,本文提出一种基于RESTfulAPI相似度的微服务识别方法。首先,该方法基于RESTfulAPI的资源可寻址、基于HTTP请求方法和无状态化三个核心原则,设计了API候选主题相似度和响应消息相似度,并通过加权算法综合候选主题相似度和响应消息相似度得到API整体相似度;然后,构建以API为节点、整体相似度为权重的API相似关系图模型;最后,使用图聚类算法从API相似关系图模型中识别候选微服务。
2)根据存在依赖关系的两个类所操作的资源数据之间存在着一定相关性的原则,本文提出一种资源约束下基于类依赖关系的微服务识别方法。首先,该方法根据软件程序中的类依赖关系构建类依赖关系图模型;其次,通过构建AST提取程序中类的源码,并根据实体类型设置每个类的实体标签;然后,设计了基于实体标签的类依赖关系图划分算法,用以划分原软件系统和得到候选微服务;最后,通过微服务对外依赖指标来合并依赖频次较高的候选微服务,从而得到最终的微服务集合。
本文使用5个开源微服务项目来验证上述两个方法的有效性。我们提出了微服务有效性类别及评价指标,并根据两个方法的特征分别设计了API划分准确率和类划分准确率两个衡量指标,此外还设置了一个对照方法来比较本文方法识别得到的微服务的合理性。实验结果表明,本文提出的两种方法对所有测试的微服务项目都具有较高的划分准确度,并表现出了良好的识别效果。
1)根据RESTfulAPI以资源为核心的设计原则,本文提出一种基于RESTfulAPI相似度的微服务识别方法。首先,该方法基于RESTfulAPI的资源可寻址、基于HTTP请求方法和无状态化三个核心原则,设计了API候选主题相似度和响应消息相似度,并通过加权算法综合候选主题相似度和响应消息相似度得到API整体相似度;然后,构建以API为节点、整体相似度为权重的API相似关系图模型;最后,使用图聚类算法从API相似关系图模型中识别候选微服务。
2)根据存在依赖关系的两个类所操作的资源数据之间存在着一定相关性的原则,本文提出一种资源约束下基于类依赖关系的微服务识别方法。首先,该方法根据软件程序中的类依赖关系构建类依赖关系图模型;其次,通过构建AST提取程序中类的源码,并根据实体类型设置每个类的实体标签;然后,设计了基于实体标签的类依赖关系图划分算法,用以划分原软件系统和得到候选微服务;最后,通过微服务对外依赖指标来合并依赖频次较高的候选微服务,从而得到最终的微服务集合。
本文使用5个开源微服务项目来验证上述两个方法的有效性。我们提出了微服务有效性类别及评价指标,并根据两个方法的特征分别设计了API划分准确率和类划分准确率两个衡量指标,此外还设置了一个对照方法来比较本文方法识别得到的微服务的合理性。实验结果表明,本文提出的两种方法对所有测试的微服务项目都具有较高的划分准确度,并表现出了良好的识别效果。