面向服务的体系结构
在软件工程,面向服务的体系结构(SOA)是一种建筑风格,专注于离散服务而不是整体设计。[1]因此,它也应用于软件设计在哪里向其他组件提供服务的位置应用程序组件,通过通信协议通过网络。服务是一个离散的功能单元,可以远程访问并独立采取行动和更新,例如在线检索信用卡声明。SOA还旨在独立于供应商,产品和技术。[2]
服务取向是一种在基于服务和基于服务的开发和服务结果方面思考的方式。[1]
根据SOA的许多定义之一,服务具有四个属性:[3]
可以将不同的服务结合用作服务网格提供大的功能软件应用,[5]SOA的原则与模块化编程。面向服务的体系结构集成了分布式,分别维护和部署的软件组件。它是通过促进组件通过网络(尤其是在IP网络)上的组件的通信与合作的技术和标准来启用的。
SOA与API的想法有关(应用程序接口),旨在简化软件的实现和维护的计算机程序不同部分之间的接口或通信协议。可以将API视为服务,而SOA则可以将服务运行。
概述
在SOA中,服务使用协议来描述他们的方式经过和使用描述解析消息元数据。该元数据描述了服务的功能特征和服务质量特征。面向服务的体系结构旨在允许用户组合大量功能,以形成纯粹由现有服务构建并以临时方式组合的应用程序。服务向请求者提供了一个简单的接口,该界面将起作用的基本复杂性抽象为黑匣子。进一步的用户也可以访问这些独立服务,而无需任何内部实施。[6]
定义概念
相关的流行语服务取向促销是松散的耦合服务之间。SOA将功能分为不同的单位或服务,[7]开发人员可以通过网络访问,以允许用户在应用程序的生产中组合和重复使用它们。这些服务及其相应的消费者通过以明确的,共享格式或通过两个或多个服务之间的活动进行协调通过数据来互相交流。[8]
2009年10月,为面向服务的体系结构发布了一份宣言。这提出了六个核心价值观,如下所示:[9]
- 商业价值比技术策略更重要。
- 战略目标比特定于项目的收益更重要。
- 固有的互操作性比自定义集成更重要。
- 共享服务比特定用途实现更重要。
- 灵活性比优化更重要。
- 进化改进比追求最初的完美更重要。
SOA可以看作是连续体的一部分,范围从较旧的概念分布式计算[7][10]和模块化编程,通过SOA,然后混搭,SaaS, 和云计算(有些人将其视为SOA的后代)。[11]
原则
尽管许多行业消息来源已经发布了自己的原则,但没有与服务导向建筑的确切组成有关的行业标准。其中一些[12][13][14]包括以下这些:
- 标准化服务合同[15]
- 服务遵守标准通信协议,如一组服务中的一个或多个服务描述文件所定义。
- 服务参考自治(松散耦合的一个方面)
- 服务之间的关系被最小化至他们只知道其存在的水平。
- 服务位置透明度(松散耦合的一个方面)
- 无论存在何处,都可以从网络中的任何地方调用服务。
- 服务寿命
- 服务应设计为长期生活。在可能的情况下,如果服务不需要新功能,应避免强迫消费者更改,如果您今天致电服务,您明天应该可以致电同一服务。
- 服务抽象
- 该服务充当黑匣子,那就是他们的内在逻辑对消费者隐藏。
- 服务自治
- 服务是独立的,并从设计时间和运行时的角度控制它们封装的功能。
- 服务无状态
- 服务是无状态的,即返回请求的值或给出异常,因此最大程度地减少了资源使用。
- 服务粒度
- 确保服务具有足够尺寸和范围的原则。服务为用户提供的功能必须相关。
- 服务归一化
- 服务分解或合并(标准化)以最大程度地减少冗余。在某些情况下,这可能不做。在这些情况下,需要优化性能,访问和聚合。[16]
- 服务组合性
- 服务可用于撰写其他服务。
- 服务发现
- 服务补充了交流元数据,可以有效地发现和解释它们。
- 服务可重复使用
- 逻辑分为各种服务,以促进代码的重复使用。
- 服务封装
- 许多最初未根据SOA计划的服务可能被封装或成为SOA的一部分。
图案
每个SOA构建块都可以扮演三个角色中的任何一个:
- 服务提供者
- 它创建了Web服务,并将其信息提供给服务注册表。每个提供商都会辩论很多如何公开的服务,这更重要的是:安全性或轻松可用性,提供服务的价格以及更多的价格.提供商还必须确定给定经纪人服务应列出该服务的类别[17]以及使用该服务需要哪种交易合作伙伴协议。
- 服务经纪,服务注册表或服务存储库
- 它的主要功能是将有关Web服务的信息提供给任何潜在的请求者。任何实施经纪人的人都决定经纪人的范围。公共经纪人在任何地方和任何地方都可以使用,但是私人经纪人仅适用于有限的公众。Uddi是早期,不再积极支持提供的尝试Web服务发现.
- 服务请求者/消费者
- 它使用各种查找操作在经纪人注册表中找到条目,然后绑定到服务提供商以调用其Web服务之一。无论服务 - 消费者需要哪种服务,他们都必须将其带入经纪人,将其束缚在相应的服务中,然后使用它。如果服务提供多个服务,他们可以访问多个服务。
服务消费者 - 管理的关系受标准化服务合同,[18]它具有业务部分,功能部分和技术部分。
服务组成模式具有两种广泛的高级建筑风格:编舞和编排。与特定建筑风格无束缚的较低企业集成模式在SOA设计中仍然具有相关性和符合条件。[19][20][21]
实施方法
可以使用面向服务的体系结构网页服务或者微服务.[22]这样做是为了使功能性建筑块可通过独立于平台和编程语言的标准Internet协议访问。这些服务可以代表新的应用程序,也可以代表现有旧系统的包装器,以使其启用网络。[23]
实施者通常使用Web服务标准构建SOA。一个例子是肥皂在W3C的1.2版1.2版后,它获得了广泛的行业接受[24](万维网联盟)在2003年。这些标准(也称为Web服务规范)还提供了更大的互操作性和从锁定到专有供应商软件的一些保护。但是,可以使用任何其他基于服务的技术,例如吉尼,科尔巴,互联网通信引擎,休息, 或者grpc.
体系结构可以独立于特定的技术运行,因此可以使用广泛的技术来实施,包括:
- 网页服务基于WSDL和肥皂
- 消息传递,例如,使用ActiveMQ,JMS,RabbitMQ
- 宁静的http,代表性国家转移(休息)构成自己的基于约束的建筑风格
- OPC-UA
- 互联网通信引擎
- WCF(微软的Web服务实施,形成WCF的一部分)
- Apache节俭
- grpc
- 巫师
实现可以使用这些协议中的一个或多个,例如,可以使用文件系统机制在符合SOA概念的过程之间定义的接口规范后传达数据。关键是具有定义接口的独立服务,可以打电话给标准方式执行其任务,而无需提供通话应用程序的服务,并且没有应用程序具有或不需要了解该服务实际执行其任务的知识。SOA可以通过将松散耦合和可互操作服务。
这些服务基于与基础平台和编程语言无关的正式定义(或合同,例如WSDL)进行互操作。接口定义隐藏实施特定语言的服务。因此,基于SOA的系统可以独立于开发技术和平台(例如Java,.Net等)发挥作用。用C#运行的.NET平台和服务以Java运行的服务编写的服务Java EE例如,平台都可以通过通用复合应用程序(或客户端)消费。在任一平台上运行的应用程序还可以消费在另一个平台上运行的服务作为促进重用的Web服务。托管环境还可以包装COBOL遗产系统并将其作为软件服务呈现。.[25]
高级编程语言如BPEL和规格,例如WS-CDL和WS协调通过提供一种将精细服务的编排定义和支持编排的方法扩展到更粗糙的业务服务,扩展了服务概念,建筑师可以将其纳入实施的工作流程和业务流程中复合应用或者门户.
面向服务的建模是一个SOA框架,识别指导SOA从业者概念化,分析,设计和架构其面向服务的资产的各种学科。这面向服务的建模框架(SOMF)提供建模语言和工作结构或“地图”,描绘了有助于成功面向服务的建模方法的各种组件。它说明了确定服务开发计划的“做什么”方面的主要要素。该模型使从业者能够制作项目计划并确定面向服务的计划的里程碑。SOMF还提供了一个通用的建模表示法,以解决业务与IT组织之间的一致性。


组织福利
一些企业建筑师相信SOA可以帮助企业对不断变化的市场状况的更快,更具成本效益的反应。[27]这种风格建筑学促进宏(服务)级别的重复使用,而不是微(类)级别。它还可以简化与存在(遗产)资产的互连和使用。
有了SOA,想法是组织可以整体研究问题。企业具有更多的整体控制。从理论上讲,不会使用任何工具集可能取悦它们的开发人员。但是,他们将编码为业务内设定的标准。他们还可以开发整个企业的SOA,以封装面向业务的基础架构。SOA还被说明为高速公路系统,为汽车驾驶员提供效率。关键是,如果每个人都有汽车,但是任何地方都没有高速公路,那么任何试图快速或有效地到达任何地方的事情都会有限和混乱。IBM Web服务副总裁Michael Liebow说,SOA“建造高速公路”。[28]
在某些方面,SOA可以被视为建筑进化,而不是革命。它捕获了许多最佳实践以前的软件体系结构。例如,在通信系统中,很少开发使用真正静态绑定来与网络中其他设备交谈的解决方案。通过采用SOA方法,此类系统可以将自己定位为强调定义明确,高度可互操作的接口的重要性。SOA的其他前身包括基于组件的软件工程以及远程对象的面向对象的分析和设计(OOAD),例如科尔巴.
服务包括仅通过正式定义的接口可用的独立功能单元。服务可能是易于生产和改进的某种“纳米企业”。另外,服务可以是构建的“大型公司”,作为下属服务的协调工作。
将服务的实施视为与较大项目的单独项目的原因包括:
- 分离将这一概念推广到业务,即服务可以与组织中常见的较大和较慢的项目独立于迅速而独立于交付。企业开始了解系统和简化服务的用户界面。这个拥护者敏捷。也就是说,它促进了业务创新,并加快了上市时间的速度。[29]
- 分离可以促进服务与消费项目的脱钩。这在服务的设计不知道其消费者是谁的情况下鼓励了良好的设计。
- 该服务的文档和测试工件并未嵌入较大项目的细节中。当需要以后重复使用服务时,这一点很重要。
SOA有望间接简化测试。服务是自主的,无状态的,具有充分记录的界面,并与实施的交叉切割问题分开。如果组织拥有适当定义的测试数据,则建立一个相应的存根,该存根在构建服务时会对测试数据做出反应。该服务还捕获了一组完整的回归测试,脚本,数据和响应。可以使用与其调用的服务相对应的现有存根来测试该服务作为“黑匣子”。可以在原始和范围外服务为存根的情况下构建测试环境,而其余的网格为完整服务的测试部署。由于每个界面都使用其自己的完整回归测试文档进行了充分的记录,因此识别测试服务中的问题变得很容易。测试的发展是为了仅验证测试服务根据其文档运行,并在环境中所有服务的文档和测试案例中找到差距。管理数据状态愿意服务是唯一的复杂性。
示例可能被证明有助于记录其有用的水平的服务。Java社区流程中某些API的文档提供了很好的例子。由于这些都是详尽的,因此员工通常只使用重要的子集。“ ossjsa.pdf”文件中的“ ossjsa.pdf”文件JSR-89例证了这样的文件。[30]
批评
SOA已与网页服务;[31]但是,Web服务只是实现构成SOA样式的模式的一个选项。在没有本地或二进制形式的远程程序调用(RPC)的情况下,应用程序可能会更慢,需要更多的处理能力,增加成本。大多数实现确实会产生这些间接费用,但是可以使用技术实施SOA(例如,Java业务集成(JBI),Windows Communication Foundation(WCF)和数据分配服务(DDS))不取决于远程过程调用或通过XML或JSON翻译。同时,新兴的开源XML解析技术(例如VTD-XML)和各种与XML兼容的二进制格式有望显著提高SOA性能。[32][33][34]
国家服务要求消费者和提供商共享相同的特定于消费者的上下文,该环境包括在提供商和消费者之间交换的消息中或引用。该约束的缺点是它可以减少总体可伸缩性服务提供商如果服务提供商需要为每个消费者保留共享上下文。它还增加了服务提供商和消费者之间的耦合,并使切换服务提供商更加困难。[35]最终,一些批评家认为SOA服务仍然受其代表的应用程序的限制。[36]
面向服务的建筑面临的主要挑战是元数据管理。基于SOA的环境包括许多服务,这些服务相互交流以执行任务。由于该设计可能涉及多种服务,因此应用程序可能会产生数百万个消息。进一步的服务可能属于不同的组织,甚至涉及竞争的公司,构成了巨大的信任问题。因此,SOA治理进入了事物的计划。[37]
SOA面临的另一个主要问题是缺乏统一的测试框架。没有工具可以提供以服务为导向的体系结构中测试这些服务的所需功能。困难的主要原因是:[38]
- 溶液的异质性和复杂性。
- 由于自治服务的整合,大量的测试组合。
- 包括来自不同和竞争供应商的服务。
- 平台由于新功能和服务的可用性,正在不断变化。
扩展和变体
事件驱动的架构
应用程序编程接口
应用程序编程接口(API)是开发人员可以与Web应用程序进行交互的框架。
Web 2.0
蒂姆·奥莱利创造了这个词 ”Web 2.0“描述一组感知的,快速增长的基于Web的应用程序。[39]经历了广泛覆盖范围的主题涉及Web 2.0和面向服务的体系结构之间的关系。[哪个?]
SOA是将应用程序逻辑封装在具有统一定义界面的服务中的哲学,并通过发现机制公开可用。复杂性隐藏和重复使用的概念,以及松散耦合服务的概念激发了研究人员详细说明两种哲学,SOA和Web 2.0及其各自的应用之间的相似之处。一些人认为Web 2.0和SOA具有显著不同的元素,因此不能被视为“平行哲学”,而另一些则认为这两个概念是互补的,并将Web 2.0视为全球SOA。[40]
Web 2.0和SOA的理念满足了不同的用户需求,从而暴露了有关设计以及现实应用程序中使用的技术的差异。但是,截至2008年[更新],用例证明了将Web 2.0和SOA的技术和原理结合起来的潜力。[40]
微服务
微服务是对用于构建的面向服务的架构的现代解释分布式软件系统。微服务体系结构中的服务[41]是过程彼此在网络为了实现目标。这些服务使用技术不可知论协议,[42]这有助于封装语言和框架的选择,使他们的选择成为服务内部的关注。微服务是一种新的实现和实施方法,自2014年以来就变得流行(以及引入之后DevOps),并且还强调了连续部署和其他敏捷实践。[43]
没有单一的对微服务的普遍定义。文献中可以找到以下特征和原则:
- 细粒接口(到独立部署服务),
- 业务驱动的开发(例如域驱动的设计),
- 理想的云应用架构,
- 多语言编程和持久性,
- 轻巧的容器部署,
- 分散的连续交付,
- 具有整体服务监控的DevOps。
交互式应用程序面向服务的体系结构
需要实时响应时间的交互式应用程序,例如低延迟交互式3D应用程序,正在使用针对此类应用程序的特定需求的特定架构。其中包括例如低延迟优化的分布式计算和通信以及资源和实例管理。[44][45][46]
也可以看看
参考
- ^一个b“ SOA来源书 - 什么是SOA?”.collagoration.opengroup.org。检索3月30日,2021.
- ^“第1章:面向服务的体系结构(SOA)”.msdn.microsoft.com。存档原本的2017年7月7日。检索9月21日,2016.
- ^“面向服务的建筑标准 - 开放组”.www.opengroup.org.
- ^“什么是SOA?”.www.opengroup.org。存档原本的2016年8月19日。检索9月21日,2016.
- ^Velte,Anthony T.(2010)。云计算:一种实用方法。麦格劳山。ISBN 978-0-07-162694-1.
- ^“迁移到面向服务的体系结构,第1部分”。2008年12月9日。2008年12月9日的原件存档。检索9月21日,2016.
{{}}
:CS1维护:机器人:原始URL状态未知(链接) - ^一个b迈克尔·贝尔(Michael Bell)(2008)。“面向服务的建模简介”。面向服务的建模:服务分析,设计和体系结构。 Wiley&Sons。 p。3.ISBN 978-0-470-14111-3.
- ^迈克尔·贝尔(Michael Bell)(2010)。SOA建模模式,用于以服务为导向的发现和分析。 Wiley&Sons。 p。390.ISBN 978-0-470-48197-4.
- ^“ SOA宣言”.www.soa-manifesto.org。检索9月21日,2016.
- ^托马斯·埃尔(Thomas Erl)(2005年6月)。关于原则。 serviceorientation.org
- ^“应用程序平台策略博客:SOA已死;长期的现场服务”。apsblog.burtongroup.com。2009年1月5日。原本的2009年1月15日。检索8月13日,2012.
- ^Yvonne Balzer改善您的SOA项目计划,IBM,2004年7月16日
- ^Microsoft Windows Communication Foundation团队(2012年)。“以服务为导向设计原则”.msdn.microsoft.com。检索9月3日,2012.
- ^原则托马斯·埃尔(Thomas Erl)SOA Systems Inc.的八个特定的服务定向原则
- ^“ 4.4使用Web服务合同技术的准则 - 网络服务合同的解剖学”.信息。 2021年6月11日。检索9月9日,2021.
- ^托尼山(2004)。建立面向服务的E银行业平台”。IEEE国际会议服务计算,2004年。(SCC 2004)。程序。2004。 pp。237–244。doi:10.1109/scc.2004.1358011.ISBN 978-0-7695-2225-8.S2CID 13156128.2004
- ^杜恩,尤康;Narendra,Nanjangud;du,Wencai;王,阳;周,Nianjun(2014)。“从界面角度探索云服务经纪”。2014 IEEE Web服务国际会议.IEEE。 pp。329–336。doi:10.1109/icws.2014.55.ISBN 978-1-4799-5054-6.S2CID 17957063.
- ^Duan,Yucong(2012)。“服务合同的调查”。2012年第13届ACIS国际软件工程,人工智能,网络和并行/分布式计算会议.IEEE。 pp。805–810。doi:10.1109/snpd.2012.22.ISBN 978-1-4673-2120-4.S2CID 1837914.
- ^Olaf Zimmermann,Cesare Pautasso,Gregor Hohpe,Bobby Woolf(2016)。“十年的企业集成模式”。IEEE软件.33(1):13–19。doi:10.1109/女士2016.11.
{{}}
:CS1维护:多个名称:作者列表(链接) - ^Rotem-Gal-Oz,Arnon(2012)。SOA模式。曼宁出版物。ISBN 978-1933988269.
- ^朱利施(Klaus);苏特,克里斯托夫;沃伊塔拉(Woitalla),托马斯(Thomas);Zimmermann,Olaf(2011)。“设计合规性 - 弥合审计师和IT架构师之间的鸿沟”(PDF).计算机和安全性.30(6–7):410–426。Citeseerx 10.1.1.390.3652.doi:10.1016/j.cose.2011.03.005.
- ^Brandner,M.,Craes,M.,Oellermann,F.,Zimmermann,O。,金融行业中面向Web服务的生产体系结构,Informatik-Spektrum 02/2004,Springer-Verlag,2004年
- ^“ www.ibm.com”。检索9月10日,2016.
- ^“ SOAP版本1.2の公开(W3C勧告)”(日语)。 W3.org。检索8月13日,2012.
- ^Okishima,Haruhiru(2006)。”。“使用COBOL资产的系统体系结构的案例研究”"(PDF).
- ^企业SOA。 Prentice Hall,2005年
- ^克里斯托弗·科赫(Christopher Koch)企业的新蓝图,CIO杂志,2005年3月1日
- ^伊丽莎白·米拉德(Elizabeth Millard)(2005年1月)。“建立更好的过程”。计算机用户。第20页。
- ^Brayan Zimmerli(2009年11月11日)SOA的业务利益,瑞士西北部应用科学大学,商学院
- ^JSR-000089 OSS服务激活API规范1.0最终版本。 sun.com
- ^乔·麦肯德里克(Joe McKendrick)。“布雷:SOA太复杂了;'只是供应商BS'"。 ZDNET。
- ^吉米张(2008年2月20日)“带有VTD-XML的索引XML文档”存档2008年7月4日,在Wayback Machine.XML期刊.
- ^吉米张(2008年8月5日)“ I-Technology观点:二进制XML的性能差”.微服务杂志.
- ^吉米张(2008年1月9日)“操纵XML内容的Ximple方式”.devx.com.
- ^“ SOA之所以没有提供可持续软件”。 jpmorgenthal.com。 2009年6月19日。检索6月27日,2009.
- ^“ SOA服务仍然受其代表的应用程序的限制”。 zdnet.com。 2009年6月27日。检索6月27日,2009.
- ^“治理层”.www.opengroup.org。检索9月22日,2016.
- ^“如何有效测试面向服务的体系结构| WSO2 INC”.wso2.com。检索9月22日,2016.
- ^“什么是Web 2.0”。蒂姆·奥莱利。 2005年9月30日。检索6月10日,2008.
- ^一个b克里斯托夫·施罗斯(Christoph Schroth);直到Janner(2007)。“ Web 2.0和SOA:融合概念可以实现服务互联网”.IT专业人士.9(3):36–41。doi:10.1109/MITP.2007.60.S2CID 2859262。检索2月23日,2008.
- ^Dragoni,尼古拉;Saverio的Giallorenzo;Alberto Lluch Lafuente;Mazzara,Manuel;蒙特西,法布里齐奥;穆斯丁,鲁斯兰;Safina,Larisa(2016)。“微服务:昨天,今天和明天”。arxiv:1606.04036v1[cs.se]。
- ^詹姆斯·刘易斯和马丁·福勒。“微服务”.
- ^Balalaie,A。;Heydarnoori,A。;Jamshidi,P。(2016年5月1日)。“微服务体系结构可启用DevOps:迁移到云本地体系结构”(PDF).IEEE软件.33(3):42–52。doi:10.1109/女士2016.64.HDL:10044/1/40557.ISSN 0740-7459.S2CID 18802650.
- ^弗兰克·格林卡(Frank Glinka); Allaithy Raed(2009)。“高度交互式分布式应用程序的面向服务的接口”.欧洲平行处理会议。计算机科学的讲义。6043:266–277。doi:10.1007/978-3-642-14122-5_31.ISBN 978-3-642-14121-8。检索2月9日,2021.
- ^Dieter Hildebrandt; Jan Klimke(2011)。“以服务为导向的交互式3D可视化稀薄客户的大型3D城市模型的可视化”.com.geo '11:第二届国际地理空间研究与应用计算国际会议论文集。 com.geo '11:1。doi:10.1145/1999320.1999326.ISBN 9781450306812.S2CID 53246415。检索2月9日,2021.
- ^Mahy Aly;迈克尔·弗兰克(Michael Franke)(2016)。“通过优化资源共享启用了面向服务的交互式媒体(SOIM)发动机”.2016 IEEE针对服务的系统工程研讨会(SOSE):231–237。doi:10.1109/sose.2016.47.HDL:1854/lu-7215326.ISBN 978-1-5090-2253-3.S2CID 9511734。检索2月9日,2021.
- 毛罗(Mauro),克里斯蒂安(Christian);Leimeister,Jan Marco;Krcmar,Helmut(2010年1月)。“面向服务的设备集成 - 对SOA设计模式的分析”(PDF).2010第43届夏威夷国际系统科学会议:1-10。doi:10.1109/hicss.2010.336.ISBN 978-1-4244-5509-6.S2CID 457705.