什么是SOA“用简单的英语”?

时间:2010-01-08 09:17:26

标签: soa

有人可以用简单的英语解释 SOA是什么?我在这里听到SOA,那里有SOA,但我无法理解它是什么以及用于什么。这是一个简单的概念,后来演变成巨大的东西或什么?

包括维基在内的所有文件都有点抽象,或者我可能是个白痴而且没有得到它。这是一个白痴的指南吗?

这三个字母背后究竟是什么?

20 个答案:

答案 0 :(得分:64)

SOA是一些旧概念的新徽章:

  • 将您的代码划分为可重复使用的模块。

  • 在模块中封装任何可能发生变化的设计决策。

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

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

SOA中的新功能

  • 你是在网络上做的。

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

答案 1 :(得分:49)

您可能会发现this article (What is SOA? - SOA and Web Services Explained )有帮助。

一个小小的预告片:

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

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

答案 2 :(得分:43)

我看到许多答案使用更高级的单词和技术术语来解释面向服务的体系结构(SOA)。我想用普通英语中的类比来为外行人解释一下。

但首先是SOA的描述
SOA可以分为三层来描述,如下图所示。一方面我们有 Provider ,另一方面我们有 Consumer ,由 Bridge 分隔,双方进行通信。

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

<小时/> enter image description here


类比
想象一下乡村的房子,它在很多方面都是一个更大的社区的一部分,如城市或城镇。该市拥有自己的复杂系统,用于提供水和电,处理卫生设施,提供交通和其他公用设施。 House 是此模型中的消费者, City (或社区)是提供者,管道,下水道,电力线,光纤等是基础设施他们在哪里交流。

这个模型可以与SOA进行比较。房子里的人们使用了许多不同的“应用”,如散热器,电脑,厕所,灯具,地板采暖,浴缸等。这些应用并不关心城市如何产生水,创造电力或处理废物的时间长因为它有效。该市的组成部分是发电机,水泵和卫生区。它为房子提供了所有这些需求,但它可以由房子以它认为合适的方式使用它。

我希望这至少能让人更好地了解SOA。

答案 3 :(得分:27)

我们假设你有四个厨师。在SOA中,你认为他们彼此讨厌,所以你努力让他们尽可能少地相互交谈。

你是怎么做到的?那么,你将首先定义角色和界面 - 厨师1将制作沙拉,厨师2将制作汤,烹饪3将制作牛排等。然后你将把餐桌放在桌子上(所以这些是接口)并说:“每个人都请把你的创作放在你指定的菜肴中。别关心别人。”

这样,四位厨师必须尽可能少地相互交谈,这在软件开发方面非常好 - 不一定是因为他们互相讨厌,而是出于其他原因,如物理位置,决策效率等。

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

最成功的SOA实施之一是在亚马逊。由于他们的设计,他们可以重新打包整个基础设施并将其作为亚马逊网络服务出售。

*这只是SOA的一个方面。

答案 4 :(得分:17)

SOA是一种架构风格,但也是关于如何开发和集成异构应用程序的愿景。 SOA的主要目的是脱离单一应用程序,而是使用可重用服务集来构建应用程序。

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

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

  1. 类似的功能已多次实施

  2. 需要在两者之间共享数据(例如客户或员工数据) 几个申请

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

  4. 使用SOA,我们的想法是让企业范围内的可重用服务可用,以便可以使用它们构建和组合应用程序。 SOA的承诺是

    1. 无需反复重复实现类似功能(例如 提供客户或员工服务)

    2. 促进应用程序的集成和访问 共同的数据或功能

    3. 以企业为中心的发展     努力。
    4. SOA愿景需要技术转变以及组织转变。虽然它解决了一些问题,但它也引入了其他问题,例如,使用单一应用程序的SOA,安全性要难得多。因此SOA需要讨论它是否有效。

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

答案 5 :(得分:10)

SOA是面向服务架构的首字母缩写。

  

SOA正在以这种方式设计和编写软件应用程序   不同的软件模块可以   高度无缝集成   可重用性。

     

大多数人   将SOA限制为编写客户端/服务器   软件的Web服务。但它也是   SOA的小环境。 SOA很多   比这更大,过去几个   多年来,网络服务一直是主要的   通讯的媒介   可能是人们思考的原因   SOA作为一般的Web服务   限制边界和意义   SOA。

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

  

实践SOA给予高度的支持   通过强制执行DRY来重新使用[不要   重复你的自我]结果   高度可维护的软件。   可维护性是第一件事   软件架构思考 - SOA   给你那个。

答案 6 :(得分:6)

据我了解,基本概念是您创建小型“服务”,为其他系统提供有用的东西,并避免构建大型系统,这些系统往往会在系统内部进行所有

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

答案 7 :(得分:5)

我建议你阅读Thomas Erl和Roger Sessions的文章,这将使你能够牢牢掌握SOA的全部内容。这些也是很好的资源,看看为老板解释的SOA,为外行解释

Building a SOA

SOA Design Pattern

Achieving integrity in a SOA

Why your SOA should be like a VW Beetle

SOA explained for your boss

WCF Service Performance

答案 8 :(得分:4)

只有一个建议: -

阅读Thomas Erl的SOA Concepts, Technology and Design

它以非常简洁的英语和案例研究非常精美地提供了有关SOA的详细信息。

答案 9 :(得分:4)

大型组织往往会发生的事情是,随着时间的推移,一切都是单一的或不同的系统,无论是在哪里,还是两者兼而有之。最终有人进来说我们弄得一团糟。现在,你想重新设计(钱给某人)一切都是以一种单一的方式取决于你支付范式的人,但同时能够独立于主/巨石添加零件和零件。

因此,您购买了Oracle的SOA,Oracle成为您所有部分的老大。所有其他参与者都必须通过服务(Web服务或其他任何服务)来使用SOA .Oracle monolith会处理所有事情(monolith并不意味着贬义)。哦,是的,你在前面或其他地方有ASP.NET MVC。

主要的是在没有影响的情况下将事物移入和移出系统,并将供应商Oracle SOA,Microsoft WCF作为其中的大脑。一切都像oop / ood一样流动,进出的东西很少甚至没有影响,甚至是人类服务,而不仅仅是计算机。

对我而言,它只是意味着一系列具有良好前端的Web服务(或者我们将来称之为的任何服务)。如果您拥有数据库,只需点击数据库并停止担心流行语。没关系。

答案 10 :(得分:3)

来自ittoolbox博客。

以下概述了与过去设计技术的相似之处和不同之处:

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

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

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

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

答案 11 :(得分:3)

阅读上面的回答,听起来我认为SOA是开发人员(至少是好的)从第一天开始就做的事情。

答案 12 :(得分:3)

嗯,你看.. SOA代表面向服务的体系结构....简单来说,你编写了一段非常通用的代码,即它可以在很多应用程序中使用...像地址簿或可能是计算器。并在IIS上启动此代码。因此,您通过代码提供服务。所以你是一个服务提供商。现在有人想使用类似的代码,然后他不必再次编写代码。他只是通过Web服务使用您的代码。因此他成为服务消费者。因此,使用此类服务​​制作程序称为SOA。松散的耦合就在那里,因为服务提供者和消费者可能正在进行交互,即使他们使用的是差异编程语言。 希望你明白。

答案 13 :(得分:2)

它也可以代表“阵列结构”(与“结构阵列”相对),这是并行(特别是SIMD)编程中的常见主题,但我猜这不是你的意思!

答案 14 :(得分:2)

SOA是技术供应商发明的一个流行词,用于帮助销售与企业服务总线相关的技术。这个想法是你在企业中使你的小岛应用程序(例如:会计系统,库存控制系统等)都公开服务,这样它们就可以灵活地编排成'应用程序',或者更确切地说成为聚合企业范围业务的一部分逻辑。

基本上是一堆旧的bollocks几乎从不起作用,因为它忽略了技术在组织中的方式的原因在于文化,进化,公司的历史以及锁定是如此任何重组技术的尝试都必然会失败。

答案 15 :(得分:1)

传统的应用程序架构是:

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

如果要以编程方式访问数据,可能需要使用屏幕抓取。

在我看来,SOA似乎是一种专注于暴露机器可读数据和/或API的架构,而不是暴露UI。

答案 16 :(得分:1)

听听本周的Floss Weekly播客版,其中涵盖了SOA。这些描述非常高级,并没有深入研究太多的技术细节(尽管更具体和可识别的SOA项目示例会有所帮助。

答案 17 :(得分:1)

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

  1. 基于接口,政策和合同
  2. 位置透明度
  3. 自主
  4. 摘要
  5. 可重复使用
  6. 可组合
  7. 无状态
  8. 可发现
  9. 可扩展
  10. 松散耦合
  11. SOA的主要目标是软件开发灵活性,即能够轻松,廉价地响应变更的能力,从而使企业能够快速响应不断变化的市场。

    服务通常(但绝不是唯一的)实现为Web服务,即它们在无处不在的Web HTTP协议上运行,并且使用基于XML的SOAP或轻量级(以及更流行的)REST范例来实现。

答案 18 :(得分:1)

取决于你是谁!

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

您应该阅读100-SOA-Questions [pdf]

干杯

答案 19 :(得分:1)

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