什么是SOA“简而言之”?[关闭]


112

有人可以用简单的英语解释SOA的全部含义吗?我在这里听到过SOA,在那儿听到过SOA,但我无法完全理解它的含义和用途。它是一个简单的概念,后来演变成巨大的东西吗?

包括wiki在内的所有文档都有些抽象,或者也许我是个白痴,却听不懂。有白痴的指南吗?

这三个字母后面到底是什么?


7
我认为如果人们不再以只有已经了解SOA的人才能理解并显示“ Hello,world”编码示例的方式抽象地解释SOA,那也将很好。演示代码说得更响亮。
Phil

@Phil-检查我的答案。我试图用一个比喻。
Niklas 2012年


3
实际上,亚马逊就是一个很好的例子。在某些时候,贝佐斯坚持认为,亚马逊代码库的每个部分都必须是一个API,并且必须响应Web请求。此处的文章:apievangelist.com/2012/01/12/…。登录时可以看到此内容-Amazon将OpenID用作自己的登录系统!大多数网站使用内置系统进行登录。一个优点是,我认为他们可以对所有站点和服务使用相同的登录名。
Jordan Reiter

Answers:


49

您可能会发现本文(什么是SOA?-SOA和Web服务说明)很有帮助。

一点预告片:

  • SOA是一种架构应用程序的方式,它们由离散的软件代理组成,这些代理具有简单,定义明确的界面,并通过松散的耦合进行编排以执行所需的功能。

  • SOA中有两个角色-服务提供者和服务使用者。软件代理可以扮演两个角色。SOA并不是一个全新的概念–但是,本文主要关注通过Web服务实现的SOA。


6
嗯... CORBA,IDL,客户端-服务器...听起来很像1980年代,真是太痛了!;-D
CesarGon

64

SOA是一些非常古老的想法的新标志:

  • 将您的代码分成可重用的模块。

  • 将可能更改的任何设计决策封装在模块中。

  • 设计模块的方式应使它们可以以不同的有用方式组合在一起(有时称为“系列”或“产品系列”)。

这些都是基本的软件开发原则,其中许多首先由David Parnas阐明。

SOA的新功能是

  • 您正在网络上进行操作。

  • 模块通过在网络上相互发送消息进行通信,而不是通过过程调用之类的更传统的编程语言机制进行通信。特别是在面向服务的体系结构中,这些部分通常不共享可变状态(传统程序中的全局变量)。或者,如果他们确实共享状态,则该状态会被小心地锁定在数据库中,该数据库本身就是代理,可以轻松管理多个并发客户端。


43

我看到了许多答案,这些答案甚至使用更高级的词和技术术语来解释面向服务的体系结构(SOA)。我想用通俗易懂的英语比喻为外行解释一下

但是首先,
可以从三层描述SOA SOA,如下图所示。一方面,我们有提供者,而另一方面,我们有消费者,这是消费者,两者之间是一座桥梁,双方进行沟通。

消费者使用其业务所需的许多应用程序,而提供商使用向这些应用程序提供信息的组件。它们使用通用架构通过一组服务进行通信。


在此处输入图片说明


打个比方,
想象一下乡间的一所房屋,从许多方面来看,它是一个较大的社区(如城市或城镇)的一部分。该市拥有自己的复杂系统,用于供水和供电,处理卫生设施,提供运输和其他公用事业。该房子是在这个模型中的消费者来说,(或社区)是从运营商与管道,下水道,电力线,光纤等是基础设施中,他们交流。

可以将该模型粗略地与SOA进行比较。房屋中的人使用许多不同的“应用程序”,例如散热器,计算机,卫生间,灯,地板采暖,浴缸等。这些应用程序不在乎城市如何产生水,发电或处理废物工作正常。城市的组成部分是发电机,水泵和卫生区。它满足了房屋的所有这些需求,但取决于房屋是否以其认为合适的方式使用它。

我希望这至少可以使人们更好地了解SOA。


27

假设您有四个厨师。在SOA中,您假定他们彼此讨厌,因此您努力让他们彼此之间尽可能少地交谈。

你是怎样做的?好吧,您首先定义角色和界面-厨师1将做沙拉,厨师2将做汤,厨师3将做牛排,等等。然后您将碗碟安排得井井有条(这些就是接口),然后说:“每个人都请将您的创造物放入分配的菜肴中。不要在意别人。”。

这样一来,四位厨师必须尽量少说话,这在软件开发中非常好-不一定是因为彼此讨厌,而是因为其他原因,例如地理位置,决策效率等。

这也意味着您可以根据需要重新组合菜肴(服务)。例如,您可能只是使用甜点来为咖啡馆服务,或者只是将汤汁与您从另一家公司购买的面包相结合以提供更便宜的菜单,或者让其他餐厅使用您的沙拉来与他们的菜肴相结合,等等。 。

SOA最成功的实现之一是在亚马逊上。由于其设计,他们可以重新打包其整个基础架构,并将其作为Amazon Web Service出售。

*这只是SOA的一方面。


17

SOA是一种体系结构样式,同时也是关于如何开发和集成异构应用程序的愿景。SOA的主要目的是摆脱单片应用程序,而是拥有一组可组合使用的可重用服务,以构建应用程序。

恕我直言,SOA仅在企业级别有意义,而对于单个应用程序则毫无意义。

在许多企业中,每个部门都有自己的一套企业应用程序,这意味着

  1. 类似功能已实施多次

  2. 数据(例如客户或员工数据)需要在多个应用程序之间共享

  3. 应用程序以部门为中心。

使用SOA,其想法是使可重用服务在整个企业范围内可用,以便可以从中构建和组合应用程序。SOA的承诺是

  1. 无需一遍又一遍地重新实现类似的功能(例如,提供客户或员工服务)

  2. 促进应用程序集成在一起以及对通用数据或功能的访问

  3. 以企业为中心的开发工作。

SOA愿景需要技术上的转变以及组织上的转变。它解决了一些问题,但同时也引入了其他问题,例如,与单片应用程序相比,使用SOA的安全性要困难得多。因此,SOA尚需讨论其是否有效。

这是SOA的1000英尺视图。但是,它并不仅限于此。还有其他补充SOA的概念,例如业务流程编排(BPM),企业服务总线(ESB),复杂事件处理(CEP)等。它们都解决了IT /业务一致性问题,即如何拥有IT能够有效地支持业务。


1
是的,但是其他人希望您购买或使用其整体来控制诸如Oracle SOA之类的一切,或使用Microsoft WCF。难道总不会有一块巨石吗?
约翰尼2010年

WCF和Oracle SOA是与SOA解决方案无关的技术依赖关系。该概念基于独立的易于维护的服务而不是某些特定技术。
BentOnCoding 2012年

4
+1表示SOA的组织级“大”含义。其他许多答案都集中在软件组件方面,严格来说,这并不是整体情况(即使这是人们经常使用的意思)。
occulus 2012年

10

SOA是面向服务的体系结构的首字母缩写。

SOA正在设计和编写软件应用程序,以使不同的软件模块可以无缝集成并具有高度的可重用性。

大多数人在编写客户端/服务器软件-网络服务时会限制SOA。但是,SOA的上下文太小。SOA远远大于SOA,并且在过去的几年中,Web服务已成为通信的主要媒介,这可能是人们将SOA视为Web服务的总体原因,从而限制了SOA的范围和含义。

您可以考虑编写一个数据库访问模块,该模块是如此独立以至于它可以独立工作而没有任何依赖关系。该模块可以公开可由需要数据库访问的任何主机软件使用的类。主机应用程序中没有启动配置。无论需要什么,都通过数据库访问模块公开的类进行通信。我们可以将这些类称为服务,并将模块视为支持服务的。

实施SOA通过执行DRY [不要重复自己的工作]可以提供高度可重用的结果,而DRY可以成为高度可维护的软件。可维护性是任何软件体系结构都要考虑的第一件事-SOA为您提供了这一点。


6

据我了解,基本概念是创建小型“服务”,为其他系统提供有用的信息,并避免构建大型系统,而大型系统往往会在系统内部做任何事情

因此,您定义了一个将用于交互的协议(例如,它可能是SOAP Web服务),然后让您的“做某事的系统”与小型服务进行交互以实现“大目标” 。


2
请不要猜测架构问题。Stackoverflow是一个获得专家解答的地方,而不是您去年浏览的文章中的随机猜测。令人遗憾的是,这个答案得不到任何票。
BentOnCoding 2012年


4

大型组织中往往会发生的事情是,随着时间的流逝,所有事物要么都是单片的,要么是分散的系统,或者两者都很少。最终有人进来,说我们一团糟。现在,您想重新设计(钱给某人)要以一种整体形式进行定位的所有内容,取决于您向谁付款,但同时又能够独立于母版/整体来添加零件。

因此,您购买了Oracle的SOA,Oracle成为了您所有部门的老板。所有其他参与进来的参与者都必须通过服务(Web服务或它具有的任何服务)与SOA一起使用。Oracle巨石负责所有事务(巨石并不意味着贬义)。哦,是的,您在前面有ASP.NET MVC或其他东西。

最主要的是在不影响的情况下将事物移入和移出系统,并使供应商Oracle SOA,Microsoft WCF成为一切事物的大脑。一切都是无限的,流动的东西进出几乎没有影响,甚至是人类服务,而不仅仅是计算机。

对我来说,这仅意味着一堆具有良好前端的Web服务(或以后称为的服务)。而且,如果您拥有该数据库,则只需单击该数据库,然后就不必担心流行词。没关系。



3

好吧,您知道。SOA代表面向服务的体系结构。...简单来说,您编写了一段非常通用的代码,即它做了可以在许多应用程序中使用的某些事情……可能类似于地址簿,也可以是计算器。然后在IIS上启动此代码。因此,您可以通过代码提供服务。因此,您是服务提供商。现在有人想使用类似的代码,那么他不必再次编写该代码。他只是通过网络服务来使用您的代码。因此,他成为服务消费者。因此,使用此类服务​​编写程序称为SOA。而且,由于服务提供者和使用者即使使用diff编程语言也可能进行交互,因此存在松散耦合。希望你能理解。


3

来自ittoolbox博客。

下面概述了与过去的设计技术的异同:

SOA与结构化编程的相似性:与子例程调用最相似,在子例程调用中传递参数,并从调用者中抽象函数的操作-例如CICS链接和执行以及COBOL CALL保留字。习字簿用于定义数据结构,通常将其定义为服务的XML模式。o差异:SOA是松散耦合的,这意味着对服务的更改对用户(“呼叫”程序)的影响较小,并且服务可跨语言和平台进行互操作。

•SOA与OOA / OOD的相似性:封装,抽象和定义的接口o差异:SOA松散耦合,没有类层次结构或继承,低层抽象-类层与业务服务

•SOA与传统的基于组件的开发(CBD)-例如CORBA,DCOM,EJB o相似:通过组装组件,接口,远程调用进行重用o差异:广泛采用标准,XML模式与封送对象,服务编排,为重用而设计更容易,服务以业务为中心而IT则为中心,业务服务的过程是粒度化的(范围广泛)

•SOA(用于集成)与企业应用程序集成(EAI)o相似之处:最佳实践(定义明确的接口,标准化方案,事件驱动的体系结构),可重用接口,通用方案o差异:标准,采用和改进的工具


3

阅读上面的回答,听起来对我来说,SOA是开发人员(至少是优秀的开发人员)从第一天开始所做的事情。


2

它也可以代表“数组结构”(与“结构数组”相对),这是并行(尤其是SIMD)编程中的常见主题,但我想这不是您的意思!


一点点苛刻的无投票权!
汤姆(Tom)2010年

2
@Downvoters:这个问题并没有给出足够的背景来证明汤姆斯的回答是不足的。仅仅因为在服务体系结构的上下文中其他人都被术语SOA瘫痪了,这并没有使这个错误。
塞巴斯蒂安·马赫2012年

1
@phresnel标签是soa,如果您可以将鼠标悬停在它上面几秒钟,您会看到对请求上下文的清晰描述。
BentOnCoding

4
@Robotsushi:而且,如果您可以快速研究标签,则可以看到说明是在Toms回答一年多之后添加的。
塞巴斯蒂安·马赫2012年

我认为,如果您不确定问题的背景,那么您将无法提供专家的答案。评论中有关问题性质的一个简单问题将很快解决这个谜团。
BentOnCoding

2

SOA是由技术供应商发明的流行语,用于帮助销售与企业服务总线相关的技术。这个想法是让您在企业中的小岛应用程序(例如会计系统,库存控制系统等)全部公开服务,以便可以将它们灵活地编排为“应用程序”,或者成为企业范围内总业务的一部分。逻辑。

基本上,一堆老掉牙几乎无法工作,因为它忽略了以下观点:技术成为组织中的方式的原因在于文化,演变,公司的历史,而且锁定是如此之高,以至于任何尝试重组技术注定会失败。


1

收听本周的Floss Weekly播客,其中涵盖了SOA。这些描述是相当高级的,并且不会涉及太多技术细节(尽管SOA项目的更具体和可识别的示例会有所帮助。


1

传统的应用程序体系结构是:

  • 用户界面
  • 封装/隐藏在用户界面后面的未定义内容(实现)

如果要以编程方式访问数据,则可能需要求助于屏幕抓取。

在我看来,SOA似乎是一种专注于公开机器可读数据和/或API而不是公开UI的体系结构。


1

SOA或面向服务的体系结构是一种软件体系结构模式,其中,应用程序或系统是由符合特定特征集的基础(通常是分布式)软件服务构建的,即:

  1. 基于接口,策略和合同
  2. 位置透明
  3. 自主性
  4. 抽象
  5. 可重用
  6. 可组合
  7. 无状态
  8. 可发现的
  9. 可扩展的
  10. 松耦合

SOA的主要目标是软件开发敏捷性,即轻松,廉价地响应变更的能力,从而使企业能够快速响应不断变化的市场。

服务通常(但绝非排他地)实现为Web服务,即它们通过无处不在的Web HTTP协议进行操作,并使用基于XML的SOAP或轻量级(且更为流行的REST)范式实现。


1

取决于你是谁!

如果您是企业主,那么SOA是增加收入和业务敏捷性的解决方案。如果您是企业架构师,SOA是一种在空白画布上绘制漂亮干净的软件的方法。如果您是架构师,那么SOA是在集成平台上设计松耦合服务的解决方案,只需将服务插入插座即可。如果您是开发人员,那么SOA是一种编程范例,其中服务位于设计和代码的中心。

您应该阅读100个SOA问题[pdf]

干杯


1

面向服务的体系结构(SOA)是一种软件体系结构样式,可将应用程序构建为可插拔部件的集合,每个部件均可被其他应用程序重用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.