爱思维尔

系统与软件杂志

第157卷,2019年11月,110380
系统与软件杂志

从单片应用程序中识别微服务的数据流驱动方法

https://doi.org/10.1016/j.jss.2019.07.008获取权限和内容

摘要

微服务体系结构强调采用多个小规模和独立部署微服务,而不是将所有功能功能封装到一个整体中。相应地,面向微服务的分解是一项极具挑战性的任务,在开发基于微服务的系统中起着至关重要的前提作用。为了解决这种任务中的挑战,我们提出了一种数据流驱动的半自动分解方法。具体来说,定义了一个四步分解过程:(1)进行业务需求分析,生成用例和业务逻辑规范;(2) 构造细粒度数据流图(DFD)和DFD的过程数据存储版本(DFD公司PS公司)代表业务逻辑;(3) 将过程和数据存储之间的依赖关系提取成可分解的句子集;(4)从可分解的句子集合中,将过程及其密切相关的数据存储聚类到各个模块中,识别候选微服务。为了验证这种面向微服务的分解方法,我们以一个典型的应用其它微服务识别方法(服务切割机和API分析)分解的货物跟踪系统为例,对具体的耦合度和内聚度进行了比较。结果表明,所提出的数据流驱动分解方法能够通过严格且易于操作的半自动支持实现,推荐具有良好耦合性和内聚性的微服务候选。

介绍

单片体系结构(MLA)(Richardson,2018b)是构建软件的传统高层结构,过去被大多数互联网服务商(包括Netflix、Amazon和eBay等互联网巨头)广泛接受和采用的软件架构,它提倡将所有功能封装在一个应用程序中。不太复杂的单片应用程序有自己的优势,例如,易于开发、测试和部署。然而,随着时间的推移,一个成功的应用程序总是在不断扩大,并最终在几年后变成一个庞然大物。一旦这种情况发生,单片体系结构的缺点可能会超过它的优点,例如,庞大的复杂和不可理解的代码库可能会阻碍缺陷修复和特性添加;由于启动时间较长,单体的巨大尺寸会减慢开发速度,并成为持续部署的障碍。

微服务架构(MSA)是从敏捷开发人员社区中产生的,近年来已经成为一种替代方法,它可以有效地解决单一体系结构的挑战,方法是将整体结构分解为一组小服务,并使它们通过轻量级机制相互通信,例如:。,RESTful API(Fowler和Lewis,2014年)。

微服务的优势在学术界和工业界都被普遍接受,例如可维护性、可重用性、可扩展性、可用性和自动化部署(Francesco,Malavolta,Lago,2017,Alshuqayran,Ali,Evans,2016,Zimmermann,2017,Richardson)。Netflix、Amazon和eBay都将其应用程序从单一体系结构迁移到了微服务体系结构,以从其诸多优势中获益。

然而,微服务架构并不是灵丹妙药,它也带来了许多需要解决的问题(Jamshidi、Pahl、Mendonça、Lewis、Tilkov,2018、Soldani、Tamburri、Van Den Heuvel,2018)。最重要的一个问题是如何有效地将一个单片应用程序分解为一组小型微服务,因为分解过程通常是手动实现的(Kecskemeti等人,2016)。分解过程中的一个关键挑战是确定单片系统的适当分区,因为不同粒度的微服务架构会显著影响系统的许多质量属性,例如性能和可测试性(Heinrich et al.,2017)。然而,对于通过严格的方法来确定和推荐微服务边界,缺乏一种系统的方法。因此,面向微服务的设计通常以一种直观的方式进行,并且很大程度上基于架构师的经验。不恰当的服务划分可能代价高昂(Newman,2015)。此外,缺乏可靠的评估方法加剧了面向微服务的分解的挑战。

为了解决上述问题,我们提出了一种数据流驱动的方法,该方法实现了一个系统的、易于理解的面向微服务的分解。相应地,这项工作做出了四方面的贡献:第一,这种数据流驱动的方法本质上为面向微服务的分解提供了一种系统化的方法;其次,与手动实现(Kecskemeti et al.,2016)相比,算法支持的半自动化过程有效地管理了分解实践中的不确定性和工作量;第三,以货物跟踪系统的典型案例为例,说明了面向微服务分解方法的应用和效果;最后,评估所提出方法的基本指标和工具提出了基于工具支持的面向微服务分解的评估解决方案。

本文是2017年亚太软件工程会议(APSEC)上发表的会议论文(Chen et al.,2017)的扩展版本,与会议版本相比,本文在以下几个方面进行了扩展和更新:1)引入了不同粒度的DFD(0级DFD和1级DFD)的构造,提高了生成的DFD的质量,特别是对于复杂系统;2) 与会议版本中评估的两个业务逻辑场景相比,本版本采用了一个更为典型和复杂的案例:货物跟踪系统来评估改进的分解方法;3) 我们使用本质耦合和内聚度量来评估分解方法的结果,并与其他相关研究进行比较。

本文的其余部分安排如下。第二节简要总结了相关工作。第3节介绍面向微服务分解的数据流驱动方法的理论基础,包括定义、分解规则和过程。在第4节中,我们详细介绍了我们的案例研究,通过使用数据流驱动的方法来实现面向微服务的分解。第5节和第6节分别讨论了所提出的分解方法的评估和一些局限性。在第7节中,我们得出结论并提出未来可能的工作方向。

节代码段

面向微服务的分解

面向微服务的分解是迁移到微服务体系结构的前提。在实现可伸缩性的三个维度(Abbott和Fisher,2009年)中是的-可伸缩立方体的轴代表分解过程,即将应用程序分成小块以获得更高的可伸缩性。除了理论上的可伸缩性之外,将单片应用程序分解为微服务可能会带来其他几个质量属性的好处。但是,通常的手册

数据流驱动的分解方法

为了解决面向微服务分解的挑战和降低复杂性,我们开发了一种基于数据流图分解的半自动业务逻辑分解方法。很明显,DFD在我们面向微服务的分解工作中起着基础性的作用。通过图形化地显示信息系统中的数据流,DFD已被广泛地用作软件需求分析的初步工具之一

案例研究

为了演示和验证我们的面向微服务的分解方法,我们进行了一个案例研究,在这个案例中,通过我们的数据流驱动方法分解了一个单一应用的货物跟踪系统。货物跟踪系统是Evans(2004)用来说明领域驱动设计(DDD)和Github上开源的一个典型案例1。因为将企业级的单一应用程序分解和重构为微服务

评价

高内聚性和松耦合性是面向微服务的分解中最为关注的问题。作为单个微服务的原则,高内聚性要求每个微服务实现一个相对独立的业务逻辑。相反,松耦合是涉及多个微服务的一个关键原则,这要求所涉及的微服务彼此几乎不相互依赖(Newman,2015)。回想一下“进程和相关数据存储”模块可以

讨论

与其他方法相比,我们提出的数据流驱动方法显示了一系列优势(参见第5节)。然而,这种方法并不完美,而且还存在一些潜在的局限性,可能会威胁到服务的分解。本节讨论了现阶段我们工作的一些局限性。

由于我们的方法严重依赖于不同层次的详细dfd,因此确保dfd的质量对于分解结果至关重要。为了克服这一威胁,分析师必须

结论

为了解决从整体到微服务架构迁移的挑战,我们提出了一种由业务逻辑数据流驱动的自顶向下的分解方法。我们将我们的分解定义为三个阶段:首先,基于需求分析用例规范和业务逻辑;第二,详细介绍了不同层次的dfd及其对应关系DFD公司PS公司在需求分析的基础上,从业务逻辑构造;第三,我们设计了一个算法

承认

这项工作得到了国家自然科学基金(批准号。61572251).

李珊珊是中国南京大学软件学院的博士生。她于2016年获得中国石油大学(华东分校)的研究硕士学位。她是多个国际期刊和会议出版物的作者或合著者。她的研究兴趣包括经验软件工程、软件体系结构、DevOps和微服务。

工具书类(三十八)

  • S、 十。太阳等等。

    一种基于分解的全局QoS服务组合方法

    信息科学。

    (2012年)
  • J。索尔达尼等等。

    微服务的痛苦与收获:灰色系统文献综述

    J、 系统。软。

    (2018年)
  • F。马尔杜基等等。

    基于遗传算法的服务组合QoS分解

    申请。软计算。

    (2013年)
  • M、 L。雅培等等。

    可伸缩性的艺术:现代企业的可伸缩web架构、过程和组织

    (2009年)
  • M。阿德勒

    数据流图过程分解的代数

    IEEE传输。软。工程。

    (1988年)
  • N。阿尔舒卡兰等等。

    微服务体系结构中的系统映射研究

    2016年IEEE第九届面向服务计算与应用国际会议论文集(SOCA)

    (2016年)
  • T。阿恩特等等。

    数据流图的分解

    第四届软件工程与知识工程国际会议论文集

    (1992年)
  • L。巴雷西等等。

    基于接口分析的微服务识别

    面向服务和云计算欧洲会议

    (2017年)
  • R。等等。

    从整体到微服务:一种数据流驱动的方法

  • 五十、 L。君士坦丁等等。

    结构化设计:计算机程序和系统设计学科的基础

    (1979年)
  • E。埃文斯

    结构化设计:计算机程序和系统设计学科的基础

    (2002年)
  • E。埃文斯

    领域驱动设计:解决软件核心的复杂性

    (2004年)
  • J、 一。费尔南德斯·维拉莫等等。

    微服务.REST体系结构风格的轻量级服务描述

    第二届国际代理人与人工智能会议论文集

    (2010年)
  • Fowler,M.,Lewis,J.,2014.微服务。。。。
  • P、 D。弗朗西斯科等等。

    微服务架构研究:趋势、焦点和工业应用的潜力

    2017年IEEE软件体系结构国际会议论文集(ICSA)

    (2017年)
  • J。弗里奇

    从单片应用到微服务:重构技术和结果评估指南

    (2018年)
  • C。甘恩

    结构化系统分析:工具和技术,恩格尔伍德悬崖

    (1978年)
  • M。吉塞尔等等。

    服务切割机:服务分解的系统方法

    面向服务与云计算欧洲会议论文集

    (2016年)
  • 美国。哈桑等等。

    微服务环境:一种面向微服务粒度的体系结构元建模方法

    2017年IEEE软件体系结构国际会议论文集(ICSA)

    (2017年)
  • 引用人(42)

    • Astraea:面向qos感知和资源效率的多级GPU服务

      2022年,编程语言和操作系统架构支持国际会议-ASPLOS
    向右上箭头查看Scopus上所有引用的文章

    李珊珊是中国南京大学软件学院的博士生。她于2016年获得中国石油大学(华东分校)的研究硕士学位。她是多个国际期刊和会议出版物的作者或合著者。她的研究兴趣包括经验软件工程、软件体系结构、DevOps和微服务。

    何章是中国南京大学软件学院软件工程教授。他在工业界工作七年后加入学术界,在航空航天和复杂数据管理领域开发软件系统。张博士在新南威尔士大学获得计算机科学博士学位,并在高质量的国际期刊、会议和研讨会上发表了100多篇同行评审的研究论文。他从事软件工程方面的研究,特别是软件过程(建模、仿真、分析和改进)、软件质量、经验和基于证据的软件工程以及面向服务的计算。张博士是IEEE计算机学会和ACM(SIGSOFT)的成员,在软件工程界的一些重要国际会议中担任指导委员会、程序委员会和组织委员会的成员。

    子佳佳是中国南京大学软件学院的硕士研究生。2018年获得东北大学软件工程学士学位,研究方向包括软件体系结构、DevOps和微服务。

    郑莉是智利康塞普金大学计算机科学系的助理教授。他分别在澳大利亚国立大学(ANU)和新南威尔士大学(UNSW)获得博士学位和硕士学位。同时,他还是澳大利亚国家信息通信技术公司(NICTA)软件系统研究小组(SSRG)的研究生研究员。在移居国外之前,他在北京化工大学获得了硕士学位,在郑州大学获得了学士学位后,在中国有大约四年的工业经验。他的研究兴趣包括云计算、性能工程、经验软件工程、软件成本/工作量估算和Web服务组合。

    张成章安徽大学计算机科学与技术学院副教授。现任学校软件工程系副主任。中国计算机联合会软件工程技术委员会委员。2011年获得英国达勒姆大学博士学位,2012年加入安徽大学人才引进计划,主要研究方向包括实证软件工程研究、循证软件工程技术应用、微服务和云工作流。他的研究已经发表在《IEEE软件工程学报》上。先后获得国家自然科学基金、教育部、安徽省自然科学基金资助。

    李佳琪是中国南京大学软件学院工科硕士生。2018年获得合肥工业大学软件工程学士学位,研究方向包括软件体系结构和微服务。

    秋娅高是中国南京大学软件学院工科硕士生。2016年获得南京大学金陵学院软件工程学士学位,研究方向包括软件架构和微服务。

    冀东葛是中国南京大学软件学院副教授。2007年获得南京大学计算机科学博士学位,目前主要研究领域包括云计算、工作流调度、软件工程、工作流建模、过程挖掘等。他的研究成果在国际期刊和会议记录上发表了60多篇论文,包括IEEE TSC、JASE、COMNET、JPDC FGCS、JSS、Inf.Sci。,JNCA、JSEP、ESA、ICSE、IWQoS等。

    志浩山(Mark Shan)是腾讯技术委员会和腾讯开源办公室的成员。他在大型互联网系统的研发、运营和管理方面拥有近15年的经验。他曾在百度、新浪和腾讯工作过。他在腾讯的职责包括管理操作系统、应用安全、全球负载平衡平台、消息中间件、公共登录、流程系统、操作平台、运营规划、资源预算管理等,致力于开源生态系统建设,推动腾讯十年微服务开发支撑系统TARS在Linux基础上实现开源。作为TARS的经理,Shan正在致力于TARS开源技术的开发及其社区的运营。他致力于将TARS开发成一个多语言支持框架,用于高性能的微服务开发,例如C++、Java、Go、Node。js、PHP、Python和.netcore。他还是中国CloudNative、微服务和DevOps标准的专家,参与了微服务和DevOps标准在行业中的开发和应用。

    查看全文