什么是“纯英文”的SOA?

有人可以用简单的英文解释什么是SOA ? 我听到SOA在这里,SOA在那里,但我不能清楚地了解它是什么和用于什么。 这是一些简单的概念,后来演变成一些巨大或什么?

所有的文件,包括维基都有点抽象,也许我是白痴,不明白。 有没有一个白痴的指导呢?

这三封信背后究竟是什么?

您可能会发现这篇文章(什么是SOA? – SOA和Web服务解释)有帮助。

有点戏弄

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

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

SOA是一些非常古老的想法的新徽章:

  • 把你的代码分成可重用的模块。

  • 封装在模块中的任何可能改变的devise决定。

  • devise你的模块的方式,可以用不同的有用的方式(有时称为“家庭”或“产品线”)进行组合。

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

SOA中有什么新东西是

  • 你正在networking上做。

  • 模块通过在networking上相互发送消息进行通信,而不是像程序调用那样使用更传统的编程语言机制。 特别是在面向服务的体系结构中,各部分通常不会共享可变状态(传统程序中的全局variables)。 或者如果他们共享状态,那么这个状态会被仔细地locking在一个本身就是一个代理的数据库中,并且可以很容易地pipe理多个并发的客户端。

我看到很多解释使用更高级的词汇和技术术语的面向服务架构(SOA)的答案。 我想用简单的英语来打个比方来为外行解释

但首先是一个SOA的描述
SOA可以用三层来描述,如下图所示。 一方面我们有供应商 ,另一方面我们有消费者 ,由双方沟通的桥梁隔开。

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


在这里输入图像说明


比喻
想象一下,在乡村的一个房子,在许多方面是一个更大的社区的一部分,像一个城市或城镇。 这个城市有自己复杂的供水系统,处理卫生设施,提供交通和其他设施。 众议院是这种模式的消费者, 城市 (或社区)是提供者,pipe道,下水道,电力线,光纤等是他们交stream的基础设施

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

我希望这给了至less一个更好的SOA的图像。

假设你有四个厨师。 在SOA中,你认为他们互相仇恨,所以你尽量让他们互相交stream。

你是怎样做的? 那么,你将首先定义angular色和界面 – 厨师1将做沙拉,厨师2将做汤,厨师3将做牛排等等。然后,你将把菜放在桌子上很好组织(所以这些是接口),并说:“每个人都应该把你的作品放在你指定的菜肴中,不要在乎任何人。”

这样,四位厨师就必须尽可能less地互相交stream,这在软件开发方面是非常好的 – 不一定是因为他们讨厌彼此,而是由于其他原因,如地理位置,决策效率等。

这也意味着你可以重新组合菜肴(服务),只要你喜欢。 例如,您可以使用甜点服务一家咖啡厅,或者只是把汤和其他公司的面包结合起来,提供一个更便宜的菜单,或让其他餐馆使用您的沙拉结合他们的菜肴等。

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

*这只是SOA的一个方面。

SOA是一种架构风格,同时也是如何开发和集成异构应用程序的愿景 。 SOA的主要目的是从单一的应用程序转移,而不是一组可重用的服务 ,可以构build应用程序。

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

在许多企业中,每个部门都有自己的一套企业应用程序暗示

  1. 类似的function多次实施

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

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

对于SOA来说,这个想法是在整个企业范围内提供可重用的服务,这样应用程序就可以被构build出来。 SOA的承诺是

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

  2. 便于将应用程序集成在一起,并访问常用数据或function

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

SOA愿景需要技术转变以及组织转变。 而它解决了一些问题,还介绍了其他的,比如用单片应用的SOA安全性就更难了。 因此,SOA是否受到讨论是否有效。

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

SOA是Service Oriented Architecture的缩写。

SOA正在devise和编写软件应用程序,使得独特的软件模块可以无缝地集成在高度的可重用性中。

大多数人将SOA限制为编写客户机/服务器软件 – networking服务。 但是这是SOA的背景太小了。 SOA远远大于过去几年,networking服务已经成为通信的主要媒介,这可能是人们把SOA看作是一般的Web服务的原因,限制了SOA的边界和意义。

你可以考虑编写一个独立的数据库访问模块,它可以在没有任何依赖的情况下自行工作。 这个模块可以暴露任何需要数据库访问的主机软件可以使用的类。 主机应用程序中没有启动configuration。 通过数据库访问模块的类暴露来传递任何需要或需要的东西。 我们可以将这些类作为服务调用,并将该模块视为启用服务。

实践SOA通过强制DRY [不要重复自己]产生高度可重用性,从而导致高度可维护的软件。 可维护性是任何软件架构首先想到的 – SOA为您提供了这一点。

据我所知,基本的概念是,你创build了一些小的“服务”,为其他系统提供了一些有用的东西,避免了构build大系统,而这些系统往往是系统内部的一切

所以你定义了一个你将用于交互的协议(比如,它可能是SOAP Web服务),让你的“做一些业务的系统”与小型服务交互来实现你的“大目标” 。

我build议你阅读Thomas Erl和Roger Sessions的文章,这将会给你一个关于SOA是什么的坚定的把握。 这些也是很好的资源,看看SOA为你的老板解释一个外行解释

build立一个SOA

SOAdevise模式

在SOA中实现完整性

为什么你的SOA应该像大众甲壳虫

SOA为你的老板解释

WCF服务性能

在大型组织中往往会发生的事情是,随着时间的推移,一切事物都是单一的,或者是各处不同的系统,或者两者都有。 有人最终进来说,我们已经一塌糊涂。 现在,你想重新devise(金钱给某人),所有的东西都是单向的,取决于你付出的是什么样的范例,但同时又能够独立于大师/巨人而增加零件和零件。

所以你买了甲骨文的SOA和甲骨文成为你所有部分的老板。 所有其他参与者都必须通过服务(Web服务或任何其他服务)来使用SOA。Oracle统一pipe理器负责pipe理所有内容(Monolith并不意味着贬义)。 哦,是的,你有前面的ASP.NET MVC或其他东西。

主要的一点是在没有影响的情况下,将系统移入和移出系统,并将供应商Oracle SOA,Microsoft WCF作为其中的大脑。 一切都是好的,stream动的东西,进出的东西几乎没有影响,甚至人的服务,而不仅仅是电脑。

对我来说,这只是一堆Web服务(或者我们以后称之为的任何一种Web服务),而且前端很好。 如果你拥有数据库,只需要打开数据库,不要担心stream行语。 没关系。

只有一个build议:

阅读Thomas Erl的SOA概念,技术和devise 。

它用非常简单的英语和案例研究给出了SOA的细节。

嗯,你看.. SOA代表面向服务的架构….用最简单的话来说,你写了一个非常通用的代码,即它可以在很多应用程序中使用一些东西…可能是类似的东西一个地址簿或可能是一个计算器。 并在IIS上启动此代码。 所以你通过你的代码提供服务。 所以你是一个服务提供者。 现在有人想使用类似的代码,那么他不必再次写代码。 他只是简单地使用你的代码,也许通过Web服务。 因此,他成为服务消费者。 因此,使用这种服务的程序被称为SOA。 而且,即使使用不同的编程语言,服务提供者和消费者也可能正在进行交互,这种松散的耦合是存在的。 希望你能理解。

从ittoolbox博客。

以下概述了过去devise技术的异同:

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

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

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

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

阅读上面的回答,听起来SOA是第一天开发者(至less是好的)所做的。

它也可以代表“数组的结构”(而不是“结构数组”),这是一个并行(特别是SIMD)编程中常见的主题,但我猜这不是你的意思!

SOA是技术供应商发明的一个stream行词,旨在帮助销售他们的企业服务总线相关技术。 这个想法是,你在企业(例如:会计系统,股票控制系统等)中做小岛应用程序都会公开服务,以便它们可以灵活地编排成“应用程序”,或者成为企业范围内的总体业务逻辑。

基本上是一些老式的笨蛋,几乎从来没有工作,因为它错过了技术是在组织中的方式的原因是文化,进化,企业的历史和locking是如此之高试图重组技术势必会失败。

听听本周发布的关于SOA的“ Floss Weekly podcast”版本。 这些描述是非常高的层次,并没有深入研究太多的技术细节(虽然SOA项目更具体和可识别的例子会有帮助。

传统的应用程序架构是:

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

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

SOA在我看来是一个专注于暴露机器可读数据和/或API的体系结构,而不是暴露UI。

SOA或面向服务的体系结构是一种软件体系结构模式,其中应用程序或系统由底层(通常是分布式)软件服务构build而成,这些服务符合一组特定的特性,即:

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

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

服务通常(但决不是专门)作为Web服务来实现,也就是说,它们通过无处不在的Web HTTP协议进行操作,并且使用基于XML的SOAP或轻量级(和更受欢迎)的REST范例来实现。

取决于你是谁!

如果您是企业所有者,则SOA是增加您的收入和业务敏捷性的解决scheme。 如果你是一个企业架构师,SOA是一个在空白的canvas上绘制漂亮和干净的软件的方法。 如果你是架构师,SOA是通过集成平台devise松散耦合服务的解决scheme,只需将服务插入网点即可。 如果您是开发人员,那么SOA就是一个编程范例,其中服务是devise和代码的中心。

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

干杯

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