收益周期管理是一个复杂的过程,涉及多个步骤和大量的数据流。正在构建RCM应用程序的软件开发组织(SDO)很快就意识到这项任务的复杂性。具体来说,应用程序的圈复杂度为数千。SDO很难在不影响整个代码库的情况下扩展应用程序或添加特性。
在21世纪初,还没有明确的方法来克服这一挑战,直到SDO开始讨论如何通过将RCM步骤分离为更小的、独立的服务来简化系统。后来,这种想法被称为微服务体系结构(MSA),它最近被吹捧为有前途的软件体系结构替代品。通常,体系结构风格表示一种合理的、可重用的解决方案模式,它由经验支持,针对一组已知的编程问题。10在给定其设计目标和约束的情况下,体系结构传达了一个高度抽象的软件结构和行为的概念模型。体系结构的选择对软件的实现方式以及如何组织其开发产生影响。明智选择的架构风格有助于减少技术债务,并提高软件效率和质量。9
通常,MSA解决方案建立在“编排”软件的思想之上,包括松散耦合和独立的“服务”。13,18,22在MSA解决方案中,每个服务负责一个专用的、定义良好的和可伸缩的功能,该功能可能并且经常被期望同时服务于其他应用程序。信用卡处理、产品评级和结帐业务功能是电子商务中的微服务的例子。每个服务都是独立开发、测试和部署的,没有对服务的部署将如何影响其作为其他应用程序的一部分进行严格假设。在MSA下,一些服务是内部开发的,而其他服务是由第三方开发的,并通过服务编排通过api链接到最终的应用程序。从历史的角度来看,MSAs是软件社区开发和管理高度模块化、组织良好的软件资产的愿望的证明。3.
在过去,软件主要是围绕紧密耦合的代码库构建的,这种代码库称为整体架构。这种风格主要将软件组织为模块化的单层,或者后来将其组织为水平隔离的n-层架构(Internet堆栈)。使用整体架构构建的软件在软件持续发展时(通常是在紧张的时间压力下),会面临功能增长、可伸缩性或性能方面的重大挑战。2当新的需求出现或采用创新技术时,“遗留”代码通常无法支持此类更改的快速实现。
最近的技术进步创造了多功能的软件生态系统来开发和部署微服务。例如,Docker,一个容器平台,提供了一种操作系统级虚拟化的方法,将软件打包到Kubernetes精心策划的轻量级“容器”中。5越来越多的软件服务初创公司现在为容器部署、管理和安全性提供支持服务。这也允许小型sdo越来越多地部署以前为大型sdo(如Amazon)提供的软件资产。
然而,搬到MSA既不容易,也不没有风险。它需要一种战略性的、有纪律的方法,以避免对当前操作和软件用户体验的破坏。许多sdo仍不确定转型的好处,仍在观望。15发布的成功的过渡故事往往提供了毫无根据的、过于积极的主张,并给人一种脱钩将自动导致可伸缩性、灵活性和上市时间缩短的感觉。最广为人知的成功案例来自于大型的数字化运营公司,如亚马逊,而大多数考虑转型的sdo缺乏此类软件巨头的资源、技能和项目管理能力。因此,拥有遗留系统的公司需要仔细考虑完成转换的替代方案。
根据我们的实地研究,大多数具有重要软件资产的sdo选择增量策略来降低转换风险并确保平稳的转换。在增量式策略下,传统的整体软件和新的、模块化的基于msa的软件将在相当长的一段时间内同时出现。这需要对它们对软件资产、人员、组织和管理实践的共同影响有更深的认识。8SDO管理必须准备好在组织的多个级别上进行广泛的变更,同时评估好处和不可避免的风险的影响。接下来,我们确定了其中的一些变化和相关挑战,这些变化和挑战是在一个专注于在成功的MSA过渡期间的领先行业实践的实地研究中确定的。
实地研究数据是在2018年2月至2019年6月期间收集的。该研究依赖于半结构化的访谈,这些访谈集中在架构转换期间的变更、挑战和机会,以及转换对SDO的软件资产管理及其软件过程和组织的影响。数据来自9个在不同形式和阶段经历了增量过渡的sdo。这些sdo规模各异,分布在6个行业。该研究包括对31位软件专家的23次访谈,这些专家的头衔包括CTO、全球总监、高级/主要架构师、应用架构师和首席开发人员。数据收集通过三个迭代回合进行。在第一轮中,我们试图理解新兴技术对软件开发的影响。在这一轮中,线人一致认为MSA是一个关键的建筑趋势。在第二轮中,我们试图确定引导架构风格和转换选择的动机和决策逻辑。在第三轮,我们试图确定和理解在操作共存的巨石和MSA架构和解决方案的关键挑战。 We also validated our study findings and conclusions among a subset of informants. The transition strategies and challenges discussed here were inductively derived from the transcripts. We coded data simultaneously with the data collection to ensure higher validity and reliability of emerging themes, guide follow-up interviews, and identify saturation in data and code. Further details of data collection and analysis as well as examples of coding trees are reported in Appendix A available online athttps://dl.acm.org/doi/10.1145/3378064.
在增量架构转换过程中,微服务以零碎的方式引入,而软件资产则以迭代和先后的方式重新架构。表1提供了一个从我们的实地研究中得出的对MSA增量过渡的好处、风险和组织影响的总结。两种最常见的替代策略的优点和缺点——大爆炸和零替代,无过渡——在附录B中有报告,可以在网上找到https://dl.acm.org/doi/10.1145/3378064.在增量策略中,选择要重新构建的应用程序,以及微服务从整体代码库中分离出来的方式,主要取决于重新构建是否为业务提供了可识别的价值,并为应用程序用户提供了直接利益。业务需要驱动哪些服务将被隔离和独立开发。在增量策略下,最终目标不一定是完全解耦系统,除非它具有明确定义和可衡量的优势。总的来说,目标是持续平衡过渡风险23预期利益。1,7,12
增量过渡的四个阶段。通常,一个增量的过渡过程会经历四个阶段:确定过渡的目标;确定体系结构更改的范围和级别;做好资源准备;改变关键的开发实践。各阶段的区别如下:
这些机制是被定义的组织能力,用于制定相关的决策或实现这些决策。当开发软件资产时,sdo将在做出和执行关于转换方向的决策时部署这样的机制。伴随数字提供分离阶段的原则和它们之间的逻辑依赖关系的摘要。图中自顶向下的箭头说明了随着增量转换在各个阶段的移动,其粒度越来越大的焦点。最初,领导层必须建立一些机制,以帮助确定SDO的战略目标和当前软件开发实践与SDO战略目标相一致的程度之间的差距。这些机制有助于确定在管理协定过渡期间必须克服的限制和需要利用的机会。在增量转换中,帮助实现目标的策略通常涉及可伸缩的应用程序、增强的应用程序灵活性和改进的上市速度。根据确定的差距,SDO领导层需要为增量转换建立特定的战略目标。
在下一阶段,需要建立一些机制,以确定选择的一组应用程序和相关服务作为解耦目标。这决定了体系结构选择指南的范围,以及提议的服务分割的潜在影响。只有知识渊博的软件架构师才能评估这种影响。在下一阶段,项目经理需要重新组织软件团队来执行拆分。这就需要建立新的角色和职责来正确地开发、部署和维护微服务。这里的机制涉及到重组团队和执行相关组织变革的知识和技能。在最后阶段,软件开发人员必须学习并过渡到新的开发实践,而软件经理将获得管理服务供应商关系的新职责。这里的机制旨在改变本地软件开发原则,并提供了改变项目管理实践和相关开发指南的方法,从而产生新的软件开发实践,如DevOps。3.,9
自底向上的箭头描述了每个阶段的预期影响,也就是基于学习的反馈循环。例如,开发实践中的变化很可能对团队及其技能和行为产生影响。适当的团队结构将推动可行的服务分离,而每个分离步骤都需要根据既定的目标进行检查,以确保分离将带来业务价值。
了解所有四个阶段在过渡结果方面的作用和影响是管理支助事务成功过渡的一个重要前提。分阶段活动和相关的角色变更帮助sdo逐步准备并有效地管理增量转换。特别是,如果每个阶段都得到了适当的计划和管理,并且在进入下一个阶段之前处理了相关的任务,那么这个过渡很可能会更成功地平衡风险和收益。每个阶段涉及多个临界活动.表2提供关键活动和方面的摘要以及它们对组织的影响。
当一个微服务已经确定要分离时,要么以独立的方式在内部构建它,要么寻找第三方服务提供商是一个可行的选择。例如,如果将产品评级服务添加到商业销售站点,则可以在内部开发该服务。或者,第三方可以提供经过充分测试的、功能增强的产品评级服务,随时可以部署。在这种情况下,在做出任何最终决定之前,了解和预测未来的维护、定制选项和数据所有权的后果是很重要的。
获得关键的MSA设计和实现技能,如持续交付,代表着从过去的根本改变。必须进行DevOps技能和相关代码管理的培训。通常会邀请外部顾问来指导开发人员顺利地执行第一次拆分,并管理代码变更。培训应涵盖与参与过渡工作的外部服务提供者建立关系的技能。开发人员应该参加专业的会议,以建立开发人员的关键知识库,并创建学习网络。
MSA不是一颗银弹。它不能解决管理软件资产的所有持久问题。例如,解耦巨石和隔离关键的微服务并不能解决设计有缺陷的系统或编写低质量代码所产生的问题。但是,如果在现实的和可度量的目标的指导下,并且SDO意识到转换对整个组织的级联影响,增量转换可以实现从软件资产派生的更好的业务价值。
SDO必须有充分的理由进行MSA转换。如果可以为MSA转换建立一个现实的战略目标,那么SDO需要准备和构建它所能建立的机制,做出适当的必要决策,并适当地实现它们。过渡策略应该是渐进的,除非组织有大量的资源和深厚的软件经验,或者由于重大的操作失败或其他业务原因,将需要进行完整的过渡。
SDO需要说明服务隔离的清晰、可度量的好处,这些好处大于相关的风险和更高的组织复杂性。SDO不应该在不了解服务对更灵活的开发、可伸缩的应用程序或提高上市时间的好处的情况下对服务进行解耦。SDO还必须建立具有良好基础的标准化拆分规则的严格技术规程。它应该根据业务需求确定的既定优先级,迭代地执行服务分割。
在MSA转型中成功的关键是理解和处理组织中较软的社会弱点。MSA从根本上讲是关于SDO的结构、思想和心灵的深刻变化,这是由新的技术机遇引发的。它以整体和间断的方式塑造组织,随着时间的推移,在组织现状的深刻变革中,其结构、角色、责任、技能、激励和惯例都受到影响。SDO管理人员不应该期望这些现有的和根深蒂固的结构自动或通过命令适应MSA。SDO需要为持续的变更做好准备,并学会以有纪律的方式调整组织以适应新的体系结构制度。糟糕的执行将导致员工困惑和沮丧,不适合的应用程序,并最终失去竞争力。
1.Abbott, M.和Fisher, M.。可伸缩性规则:Web站点可伸缩性的50条原则(2nded)。addison - wesley专业。2016。
2.大软件的死亡:我们已经越过了从20个大软件过渡到20个大软件的临界点th世纪大软件架构。Commun。ACM 60, 12(2017年12月),29-32。
3.微服务架构支持devops:迁移到云原生架构。IEEE Softw。33, 3(2016) 42-52。
4.Bucchiarone, A., Dragoni, N., dusdar, S., Larsen, S.和Mazzara, M.从单片到微服务:来自银行领域的经验报告。IEEE Softw。35, 3(2018), 50-55。
5.Burns, B., Grant, B., Oppenheimer, B., Brewer, E., Wilkes, J. Borg, Omega,和Kubernetes。Commun。ACM 59, 5(2016年5月),50-57。
6.法医康威委员会是怎么发明的自动化资料处理14, 5(1968), 28-31。
7.N. Dragoni, Giallorenzo, S., Lafuente, a.l., Mazzara, M., Montesi, F., Mustafin, R.和Safina, L.微服务:昨天,今天和明天。当前和未来的软件工程.M. Mazzara和B. Meyer(编辑)。施普林格,2017年,195 - 216。
8.弗洛伊德,C。为企业成功管理技术.高尔出版有限公司,1997。
9.福斯格伦,N. DevOps报道。Commun。ACM 61, 4(2018年4月),32-33。
10.Forsgren, N.和Kersten, M. DevOps指标。Commun。ACM 61, 4(2018年4月),44-48。
11.Karimi, J., Bhattacherjee, A., Gupta, Y.P.,和Somers, T.M.管理信息系统指导委员会对信息技术管理复杂性的影响。j .管理信息。Syst.17, 2(2000) 207-230。
12.克拉利亚,t。微服务的隐性红利。Commun。ACM 59, 8(2016年8月),42-45。
13.Klock, S., van der Werf, J. m.e.m., Guelen, J. p .和Jansen, S.基于工作负载的微服务架构相干特征集聚类。在IEEE实习生论文集。软件架构设计。, 2017, 11日至20日。
14.Knoche, H.和Hasselbring, W.使用微服务进行遗留软件现代化。IEEE Softw。35, 3(2018), 44-49。
15.容器不能修复你破碎的文化(和其他残酷的事实)。Commun。ACM 61, 4(2018年4月),40-43。
16.马国强,李国强,李国强。信息技术与组织变革:理论与研究中的因果结构。管理科学34, 5(1988), 583-598。
17.纽曼,S。建筑Microservices(1圣ed)。O ' reilly。2016.塞瓦斯托波尔,CA。
18.Pahl, C.集装箱化和PaaS云。IEEE云计算2, 3(2015), 24-31。
19.关于将系统分解为模块的准则。Commun。ACM 15, 12(1972), 1053-1058。
20.微服务介绍,第4部分:依赖关系和数据共享。2015年11月9日;https://auth0.com/blog/introduction-to-microservices-part-4-dependencies/
21.Taibi, D.和Lenarduzzi, V.关于微服务的不良气味的定义。IEEE Softw。35, 3(2018), 56-62。
22.索恩,j . Microservices。IEEE软件32, 1(2015), 113-116。
23.Wiedemann, A., Forsgren, N., Wiesche, M., Gewald, H.和Krcmar, H.实践研究:DevOps现象。Commun。ACM, 62, 8(2019年8月)44-49。
24.史提夫的谷歌站台吐槽。2011年10月11日;https://plus.google.com/110981030061712822816/posts;https://gist.github.com/chitchcock/1281611
©2021 0001 - 0782/21/1 ACM
如果您不是为了盈利或商业利益而制作或分发本作品的部分或全部,并在第一页注明本通知和完整引用,则允许您免费制作本作品的部分或全部数字或纸质副本,供个人或课堂使用。本作品的组成部分必须由ACM以外的其他人享有版权。信用文摘是允许的。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或费用。请求发布的权限permissions@acm.org或传真(212)869-0481。
数字图书馆是由计算机协会出版的。版权所有©2021 ACM, Inc。
没有发现记录