爱思维尔

系统与软件杂志

第182卷,2021年12月,111061年
系统与软件杂志

微服务系统的设计、监控和测试:从业者的视角

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

摘要

上下文:

微服务体系结构(MSA)在软件行业得到了广泛的关注。然而,在设计、监测和测试微服务系统。

目标:

本研究旨在深入了解微服务系统在业界是如何设计、监控和测试的。

方法:

一项混合方法研究进行了106个调查回答和6个来自微服务从业人员的访谈。

结果:

主要发现:(1)领域驱动设计与业务能力相结合是将应用分解为微服务的最常用策略;(2)超过半数的参与者在设计微服务系统时使用了架构评估和架构实现,(3)前端模式的API网关和后端是最常用的MSA模式,(4)资源使用和负载平衡作为监控指标,日志管理和异常跟踪作为监控实践被广泛使用,(5)单元和端到端测试是最常用的测试策略,微服务系统的复杂性给其设计、监控和测试带来了挑战,目前还没有专门的解决方案。

结论:

我们的研究结果表明,需要更多的研究来(1)在设计层面处理微服务的复杂性,(2)处理微服务系统中的安全问题,(3)通过专用解决方案解决监控和测试难题。

介绍

微服务体系结构(MSA)1受面向服务架构(SOA)的启发,在过去几年里获得了极大的普及(Dragoni等人,2017b)。国际数据公司(IDC)预测,到2021年底,80%的云软件将采用MSA风格开发(Balalaie等人,2016)。在MSA风格下,应用程序被设计为一组业务驱动的微服务,可以独立开发、部署和测试(Taibi等人,2021)。MSA遵循“尽可能少地共享”的架构方法,并通过API层彼此通信(Tulie,2020,Richards,2015)。相比之下,SOA采用“尽可能共享”的架构方法,并且通常使用企业服务总线进行通信(Tulie,2020,Richards,2015)。MSA和SOA之间的另一个关键区别是,MSA提倡每个微服务使用一个数据存储,而SOA对整个系统使用一个数据存储(Tulie,2020)。此外,采用MSA风格的系统(即微服务系统)比基于SOA的系统具有更好的容错性(Rajput,2018)。MSA风格的优势是巨大的,与其他架构风格(例如SOA)相比,采用MSA的关键驱动因素是更快的交付、改进的可伸缩性和更大的自主性(Jamshidi等人,2018)。

越来越多的文献研究了MSA的不同方面(Waseem et al.,2020b,Waseem et al.,2020a,Di Francesco et al.,2019,Alshuqayran et al.,2016,Soldani et al.,2018,Pahl and Jamshidi,2016,Li et al.,2020)研究MSA的不同方面。一个值得注意的研究领域是如何将单片系统迁移到MSA(例如,Balalaie et al.,2016,Fan and Ma,2017,Taibi et al.,2017,Di Francesco et al.,2018)。其他人提出了保护微服务系统的解决方案(例如,Dragoni等人,2017b,Pereira Vale等人,2019年)。研究人员最近对了解微服务系统在行业中是如何开发和迁移的越来越感兴趣(例如,Pahl等人,2018年,Kang等人,2016年,Taibi等人,2018b)。Knoche和Hasselbringa进行了一项调查研究,以调查采用MSA的驱动因素、障碍和目标(Knoche和Hasselbring,2019年)。Ghofrani和Lübke报告了用于设计和开发微服务系统的服务边界识别技术(例如,域驱动设计(DDD))和符号(Ghofrani和Lübke,2018)。Viggiato等人进行的调查研究。报告了微服务系统中流行的编程语言、技术、优势和挑战(Viggiato等人,2018)。Haselbock等人。调查MSA专家,以确定微服务系统的基本设计领域(例如基础设施设计)和设计挑战(Haselböck等人,2018年)。

在另一项研究中,Baškarada等人。实证研究了从业者对MSA相对于单片体系结构的优势的看法,以及MSA从业者在开发微服务系统时面临的挑战(Baškarada et al.,2018)。Zhang等人。研究了MSA在实践中的特点、效益和成本(Zhang等人,2019年)。周等。通过行业调查,调查微服务的故障分析和调试(Zhou et al.,2021)。在同一条线上,Wang等人。与从业人员进行混合方法研究(即访谈和调查),收集微服务系统成功开发的最佳实践、挑战和解决方案(Wang等人,2021年)。Taibi等人。进行混合方法研究(即访谈和调查),调查微服务架构的动机(如可维护性、可扩展性)、问题(如整体分离、数据库迁移和数据拆分)和好处(如可维护性改进、可扩展性改进)(Taibi等人,2017)。他们还开发了一个迁移过程框架,该框架由三个部分组成(即系统结构分析、系统架构定义和特征开发优先级划分)(Taibi等人,2017)。difrancesco等人的混合方法研究。专注于从业者迁移到MSA时所面临的活动(如域分解、服务识别)和挑战(例如,遗留系统各部分之间的高耦合、每个服务边界的识别)(Di Francesco等人,2018)。

尽管做出了这些努力,软件行业如何设计、监控和测试微服务系统,却鲜为人知。这三个方面对微服务系统的成功起着重要作用(Rajput,2018,Newman,2015)。微服务系统的设计(即MSA设计)为利益相关者之间交流架构决策、公开系统结构、实现用例以及满足功能和质量需求提供了基础(Richardson和Smith,2016)。然而,为了保持微服务系统的优势(例如灵活性和关注点分离),必须在设计级别降低复杂性。监视和测试有助于更好地理解系统,并在整个开发过程中提高质量。然而,微服务系统越来越复杂,需要比其他类型的系统(例如SOA、monolith)更密集的监控和测试(Rajput,2018)。这源于微服务系统的独特特性:更高的复杂性、多语言编程语言、异构和独立的微服务、运行时的通信行为、部署基础设施模型(例如,应用服务器与容器)、频繁变化以及其他一些特性(Arijs,2020年,Swersky,2020年)。因此,软件开发组织需要开发新的监控和测试策略,或者发展传统的策略来匹配微服务系统的独特特性。

本研究旨在通过全面了解微服务系统在实践中是如何设计、监控和测试的,从而弥合上述差距。为此,我们进行了一个混合方法研究,包括一个相对大规模的调查,106个回答和6个来自微服务从业人员的访谈。总的来说,我们的结果表明,DDD和业务能力的结合是将应用程序分解为微服务的最有效策略,解决安全性和可用性是MSA从业者关注的一个重要问题。我们发现,“API网关”和“前端后端”模式是提供微服务系统客户端请求入口点的最常用的MSA模式。我们注意到,MSA从业者认为在设计微服务系统时,“明确定义微服务的边界”是最关键的挑战。关于监控微服务系统,大多数受访者收集支持监控质量方面的指标,例如性能(例如,资源使用率)、可用性(例如,系统可用时间与总工作时间的比率)、可伸缩性(例如,负载平衡)和可靠性(例如,服务级别协议)。关于测试微服务系统,我们发现端到端(E2E)测试和合同相关(例如,消费者驱动)测试正在行业中获得发展空间。我们的发现还表明,微服务系统的复杂性对其设计、监控和测试提出了挑战。

本研究主要贡献如下三点:

1

它为从业者如何设计、监控和测试微服务系统带来了定量和定性的证据。

2

它确定了从业者在设计、监视和测试微服务系统时所面临的挑战以及他们所采用的解决方案。

三。

它从微服务从业者的角度对研究结果进行了深入讨论,并对研究人员和实践者产生了启示。

本文的其余部分结构如下:第二部分介绍了调查的背景。第三部分详细介绍了研究方法。第四节报告调查结果。第5节和第6节分别讨论调查结果和对调查有效性的威胁。第七节总结了相关工作。第8节总结了本次调查,并提出了今后的研究方向。

节代码段

背景

微服务是一种体系结构样式,其中应用程序被构建为一组独立的服务。MSA风格的主要特点是(一)小的也就是说,一个服务完成单一的业务能力;和(ii)自主的也就是说,单个可部署单元包含所有需要独立执行的数据(Newman,2015)。相比之下,单片系统将功能作为一个单元来实现,并作为一个整体进行部署(Newman,2020)。近年来,微服务已经成为

研究方法

我们的研究旨在全面了解微服务系统在实践中是如何设计、监控和测试的。鉴于这一目标,并受到软件工程研究经验方法选择指南(Easterbrook et al.,2008)的启发,我们决定采用混合方法研究,从调查和访谈中收集数据。我们首先进行了一项调查,以接触到广泛的从业者,以获得关于微服务系统如何进行的广泛概述

结果

在本节中,我们根据收集到的回答提供我们的混合方法研究结果,并回答第3.1节中定义的RQ。

讨论

我们的实证研究试图揭示设计、测试和监控微服务系统的实践状态。特别是,我们对来自29个国家的106名从业人员进行了在线调查,并采访了来自4个国家的6名从业人员。下文第5.1节讨论了研究人员的主要发现和启示。第5.2节将我们的调查结果与在非基于MSA的系统中进行的其他调查进行了比较,第5.3节讨论了

有效性威胁

本节通过遵循Easterbrook et al.(2008)描述的指南,概述了对我们调查有效性的威胁。

内部有效性指可能对数据收集和分析过程产生负面影响的因素。我们考虑了以下对本调查内部有效性的威胁:

参与者选择:当调查邀请通过电子邮件发送时,回复者可能缺乏参与我们调查所需的专业知识。我们尽量减少这一点

相关工作

在本节中,我们报告了从不同角度调查微服务系统的调查研究,以及我们的调查与现有调查之间的差异。Knoche和Hasselbring调查了使用微服务实现遗留系统现代化的驱动因素、障碍和目标,以及微服务对运行时性能和事务性的影响(Knoche和Hasselbring,2019)。在这项调查中,来自德国的参与者有71人。钥匙

结论

通过这项混合方法的研究,我们深入了解了微服务系统的从业人员是如何设计、监控和测试微服务系统的。研究结果对研究者和实践者都有意义:(1)团队结构、应用分解和实现策略、MSA架构活动、MSA设计描述方法、微服务系统的QAs、MSA模式以及设计和实现所需的技能

信贷作者出资声明

穆罕默德·瓦西姆:概念化,调查,写作-原稿,可视化。彭亮:概念化,调查,资源,写作-审查和编辑,监督,项目管理,资金获取。莫吉塔巴·沙欣:概念化,调查,写作-评论和编辑,可视化,监督。Amleto Di Salle公司:调查,写作-评论和编辑,可视化。加斯顿·马奎斯:调查,写作-评论和编辑,可视化。

竞合利益声明

作者声明,他们没有已知的竞争性的经济利益或个人关系,可能会影响本文报告的工作。

致谢

这项工作部分由国家重点研发项目批准号。2018年YFB1402800以及国家自然科学基金批准号。62172311,的意大利经济和财政部,Cipe第135/2012号决议(项目INCIPIT——通过信息和通信技术创新城市规划),以及联邦圣马里亚技术大学电子信息学系(智利康塞普西翁)国家研究计划米尔在弹簧下

穆罕默德·瓦西姆武汉大学计算机科学学院博士研究生。在攻读博士学位之前,他曾在巴基斯坦国际伊斯兰大学计算机科学和软件工程系担任讲师和教学研究助理。他在巴基斯坦国际伊斯兰大学获得软件工程硕士学位。他目前的研究兴趣包括软件架构、微服务架构和DevOps。

工具书类(133个)

  • 巴赫曼F。等等。

    记录软件体系结构:视图和其他

    (2010年)
  • 巴拉莱A。等等。

    微服务架构支持devops:迁移到云本地架构

    IEEE软件。

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

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

  • 巴斯卡拉达美国。等等。

    构建微服务:实践机遇与挑战

    J、 计算机。信息系统。

    (2018年)
  • 低音的L。等等。

    实践中的软件体系结构

    (2012年)
  • 伯特伦A。

    改用微服务的七个原因和五个可能失败的原因

    (2020年)
  • 布里马克A。

    A/B测试中常见的五个问题及克服方法

    (2020年)
  • 棕色K。

    领域驱动设计在微服务体系结构中的应用

    (2021年)
  • 卡斯滕森N。

    什么是日志管理?完整的日志记录指南

    (2020年)
  • 卡萨尔一。等等。

    运行时监控检测技术综述

  • 塞尔尼T。等等。

    微服务体系结构的语境理解:当前和未来的方向

    ACM SIGAPP应用程序。计算机。版次。

    (2018年)
  • 切利亚P、 R。等等。

    架构模式:发现企业架构中最不可或缺的领域中的基本模式

    (2017年)
  • 克莱姆森T。

    微服务体系结构中的测试策略

    (2020年)
  • 科若卡鲁M、 -D.公司。等等。

    评估从单片应用程序自动分解的微服务质量的属性

  • 吉图分析2018

    (2020年)
  • 戴夫A。等等。

    监控微服务的五大原则

    (2020年)
  • 达维德A。

    QA专家眼中的微服务——测试微服务

    (2020年)
  • 迪弗朗西斯科P。等等。

    向微服务架构迁移:一项产业调查

  • 迪亚斯·内托A、 C。等等。

    南美软件测试实践的特征化:以巴西和乌拉圭为例

    软。资格。J。

    (2017年)
  • 德拉戈尼N。等等。

    微服务:昨天、今天和明天

  • 德拉戈尼N。等等。

    微服务:如何使你的应用程序扩展

  • 伊斯特布鲁克美国。等等。

    软件工程研究的经验方法选择

  • 调查协议模板

    (2019年)
  • 埃斯波西托C。等等。

    以微服务的形式在云中交付软件的挑战

    IEEE云计算。

    (2016年)
  • 风扇C、 是的。等等。

    将单片移动应用迁移到微服务架构的实验报告

  • 福勒M。

    UML蒸馏:标准对象建模语言的简要指南

    (2004年)
  • 福勒S、 J。

    面向生产的微服务:在工程组织中构建标准化系统

    (2016年)
  • 福勒S、 J。

    准备生产的微服务

    (2017年)
  • 伽马射线E。等等。

    设计模式:可重用面向对象软件的元素

    (1994年)
  • 加鲁西五。等等。

    业界希望学术界在软件测试方面得到什么听取从业人员意见

  • 加鲁西五。等等。

    软件测试行业面临的挑战:一项实证研究

    J、 软件:进化。过程

    (2020年)
  • 格伯A。等等。

    动态微服务

  • 戈夫拉尼J。等等。

    微服务体系结构的挑战:实践现状调查

  • 格拉泽B、 G。等等。

    扎根理论的发现:定性研究的策略

    (2017年)
  • 抓取者A。

    用dynatrace优化atlassian JIRA和汇流生产力

    (2021年)
  • 古普塔N。

    微服务、微服务和宏服务

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

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

  • 哈塞尔博克美国。等等。

    微服务设计领域的专家访谈研究

  • 哈塞尔布林W。

    可伸缩性的微服务:主题演讲摘要

  • 哈塞尔布林W。等等。

    电子商务中可扩展性、灵活性和可靠性的微服务体系结构

  • 引用人(15)

    查看Scopus上所有引用的文章

    穆罕默德·瓦西姆武汉大学计算机科学学院博士研究生。在攻读博士学位之前,他曾在巴基斯坦国际伊斯兰大学计算机科学和软件工程系担任讲师和教学研究助理。他在巴基斯坦国际伊斯兰大学获得软件工程硕士学位。他目前的研究兴趣包括软件架构、微服务架构和DevOps。

    彭亮武汉大学计算机科学学院软件工程教授。他的研究兴趣涉及软件架构和需求工程领域。他是《计算机科学前沿》的年轻副主编。他在同行评议的国际期刊、会议和研讨会论文集以及书籍上发表了100多篇文章。

    莫吉塔巴·沙欣是澳大利亚莫纳什大学的研究员。他于2018年在澳大利亚阿德莱德大学完成计算机科学博士学位。此前,他曾是伊朗伊斯兰阿扎德大学尼利兹分校计算机工程系讲师和研究员。他目前的研究主要集中在软件架构、经验软件工程、DevOps、持续交付和部署以及软件工程中的人为因素。他在EMSE、JSS、IJIM、ESEM、WICSA、ECSA和EASE等软件工程领域的科学期刊和会议上撰写/合著了25篇同行评审文章。更多详情请访问https://mojtabashahin.wordpress.com.

    Amleto Di Salle公司是意大利拉奎拉大学信息工程、计算机科学和数学系的研究员。他的研究重点是基于模型的软件工程方法的应用,以及(微)面向服务的分布式系统的分析、建模和自动生成的方法、形式。他获得了拉奎拉大学计算机科学博士学位,讨论了题为“自动合成服务编排”的论文。他曾参与多个欧洲和国家的研究项目,如舞蹈、舞蹈进化、INCIPIT、Territori Aperti。

    加斯特蒙马奎斯是智利联邦圣马里亚技术大学电子与信息学系研究员。他的研究集中在架构策略、架构模式、微服务架构、临床软件和远程医疗系统上。他曾在多个国际会议、期刊上发表文章,并参加过国际软件架构学校。他还作为研究访问人参加了美国纽约州罗切斯特罗切斯特理工学院(RIT)和法国康普涅的联合技术大学(UTC)。在成为研究员之前,他在金融公司工作了五年。

    编辑:法比奥·帕隆巴。

    查看全文