有人可以用简单的英语解释SOA的全部含义吗?我在这里听到过SOA,在那儿听到过SOA,但我无法完全理解它的含义和用途。它是一个简单的概念,后来演变成巨大的东西吗?
包括wiki在内的所有文档都有些抽象,或者也许我是个白痴,却听不懂。有白痴的指南吗?
这三个字母后面到底是什么?
有人可以用简单的英语解释SOA的全部含义吗?我在这里听到过SOA,在那儿听到过SOA,但我无法完全理解它的含义和用途。它是一个简单的概念,后来演变成巨大的东西吗?
包括wiki在内的所有文档都有些抽象,或者也许我是个白痴,却听不懂。有白痴的指南吗?
这三个字母后面到底是什么?
Answers:
您可能会发现本文(什么是SOA?-SOA和Web服务说明)很有帮助。
一点预告片:
SOA是一种架构应用程序的方式,它们由离散的软件代理组成,这些代理具有简单,定义明确的界面,并通过松散的耦合进行编排以执行所需的功能。
SOA中有两个角色-服务提供者和服务使用者。软件代理可以扮演两个角色。SOA并不是一个全新的概念–但是,本文主要关注通过Web服务实现的SOA。
SOA是一些非常古老的想法的新标志:
将您的代码分成可重用的模块。
将可能更改的任何设计决策封装在模块中。
设计模块的方式应使它们可以以不同的有用方式组合在一起(有时称为“系列”或“产品系列”)。
这些都是基本的软件开发原则,其中许多首先由David Parnas阐明。
SOA的新功能是
您正在网络上进行操作。
模块通过在网络上相互发送消息进行通信,而不是通过过程调用之类的更传统的编程语言机制进行通信。特别是在面向服务的体系结构中,这些部分通常不共享可变状态(传统程序中的全局变量)。或者,如果他们确实共享状态,则该状态会被小心地锁定在数据库中,该数据库本身就是代理,可以轻松管理多个并发客户端。
我看到了许多答案,这些答案甚至使用更高级的词和技术术语来解释面向服务的体系结构(SOA)。我想用通俗易懂的英语比喻为外行解释一下。
但是首先,
可以从三层描述SOA SOA,如下图所示。一方面,我们有提供者,而另一方面,我们有消费者,这是消费者,两者之间是一座桥梁,双方进行沟通。
消费者使用其业务所需的许多应用程序,而提供商使用向这些应用程序提供信息的组件。它们使用通用架构通过一组服务进行通信。
打个比方,
想象一下乡间的一所房屋,从许多方面来看,它是一个较大的社区(如城市或城镇)的一部分。该市拥有自己的复杂系统,用于供水和供电,处理卫生设施,提供运输和其他公用事业。该房子是在这个模型中的消费者来说,市(或社区)是从运营商与管道,下水道,电力线,光纤等是基础设施中,他们交流。
可以将该模型粗略地与SOA进行比较。房屋中的人使用许多不同的“应用程序”,例如散热器,计算机,卫生间,灯,地板采暖,浴缸等。这些应用程序不在乎城市如何产生水,发电或处理废物工作正常。城市的组成部分是发电机,水泵和卫生区。它满足了房屋的所有这些需求,但取决于房屋是否以其认为合适的方式使用它。
我希望这至少可以使人们更好地了解SOA。
假设您有四个厨师。在SOA中,您假定他们彼此讨厌,因此您努力让他们彼此之间尽可能少地交谈。
你是怎样做的?好吧,您首先定义角色和界面-厨师1将做沙拉,厨师2将做汤,厨师3将做牛排,等等。然后您将碗碟安排得井井有条(这些就是接口),然后说:“每个人都请将您的创造物放入分配的菜肴中。不要在意别人。”。
这样一来,四位厨师必须尽量少说话,这在软件开发中非常好-不一定是因为彼此讨厌,而是因为其他原因,例如地理位置,决策效率等。
这也意味着您可以根据需要重新组合菜肴(服务)。例如,您可能只是使用甜点来为咖啡馆服务,或者只是将汤汁与您从另一家公司购买的面包相结合以提供更便宜的菜单,或者让其他餐厅使用您的沙拉来与他们的菜肴相结合,等等。 。
SOA最成功的实现之一是在亚马逊上。由于其设计,他们可以重新打包其整个基础架构,并将其作为Amazon Web Service出售。
*这只是SOA的一方面。
SOA是一种体系结构样式,同时也是关于如何开发和集成异构应用程序的愿景。SOA的主要目的是摆脱单片应用程序,而是拥有一组可组合使用的可重用服务,以构建应用程序。
恕我直言,SOA仅在企业级别有意义,而对于单个应用程序则毫无意义。
在许多企业中,每个部门都有自己的一套企业应用程序,这意味着
类似功能已实施多次
数据(例如客户或员工数据)需要在多个应用程序之间共享
应用程序以部门为中心。
使用SOA,其想法是使可重用服务在整个企业范围内可用,以便可以从中构建和组合应用程序。SOA的承诺是
无需一遍又一遍地重新实现类似的功能(例如,提供客户或员工服务)
促进应用程序集成在一起以及对通用数据或功能的访问
SOA愿景需要技术上的转变以及组织上的转变。它解决了一些问题,但同时也引入了其他问题,例如,与单片应用程序相比,使用SOA的安全性要困难得多。因此,SOA尚需讨论其是否有效。
这是SOA的1000英尺视图。但是,它并不仅限于此。还有其他补充SOA的概念,例如业务流程编排(BPM),企业服务总线(ESB),复杂事件处理(CEP)等。它们都解决了IT /业务一致性问题,即如何拥有IT能够有效地支持业务。
SOA是面向服务的体系结构的首字母缩写。
SOA正在设计和编写软件应用程序,以使不同的软件模块可以无缝集成并具有高度的可重用性。
大多数人在编写客户端/服务器软件-网络服务时会限制SOA。但是,SOA的上下文太小。SOA远远大于SOA,并且在过去的几年中,Web服务已成为通信的主要媒介,这可能是人们将SOA视为Web服务的总体原因,从而限制了SOA的范围和含义。
您可以考虑编写一个数据库访问模块,该模块是如此独立以至于它可以独立工作而没有任何依赖关系。该模块可以公开可由需要数据库访问的任何主机软件使用的类。主机应用程序中没有启动配置。无论需要什么,都通过数据库访问模块公开的类进行通信。我们可以将这些类称为服务,并将模块视为支持服务的。
实施SOA通过执行DRY [不要重复自己的工作]可以提供高度可重用的结果,而DRY可以成为高度可维护的软件。可维护性是任何软件体系结构都要考虑的第一件事-SOA为您提供了这一点。
据我了解,基本概念是创建小型“服务”,为其他系统提供有用的信息,并避免构建大型系统,而大型系统往往会在系统内部做任何事情。
因此,您定义了一个将用于交互的协议(例如,它可能是SOAP Web服务),然后让您的“做某事的系统”与小型服务进行交互以实现“大目标” 。
我建议您阅读Thomas Erl和Roger Sessions的文章,这将使您对SOA的所有内容有一个坚定的把握。这些也是很好的资源,请看为您的老板解释的SOA,为外行解释
大型组织中往往会发生的事情是,随着时间的流逝,所有事物要么都是单片的,要么是分散的系统,或者两者都很少。最终有人进来,说我们一团糟。现在,您想重新设计(钱给某人)要以一种整体形式进行定位的所有内容,取决于您向谁付款,但同时又能够独立于母版/整体来添加零件。
因此,您购买了Oracle的SOA,Oracle成为了您所有部门的老板。所有其他参与进来的参与者都必须通过服务(Web服务或它具有的任何服务)与SOA一起使用。Oracle巨石负责所有事务(巨石并不意味着贬义)。哦,是的,您在前面有ASP.NET MVC或其他东西。
最主要的是在不影响的情况下将事物移入和移出系统,并使供应商Oracle SOA,Microsoft WCF成为一切事物的大脑。一切都是无限的,流动的东西进出几乎没有影响,甚至是人类服务,而不仅仅是计算机。
对我来说,这仅意味着一堆具有良好前端的Web服务(或以后称为的服务)。而且,如果您拥有该数据库,则只需单击该数据库,然后就不必担心流行词。没关系。
来自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差异:标准,采用和改进的工具
它也可以代表“数组结构”(与“结构数组”相对),这是并行(尤其是SIMD)编程中的常见主题,但我想这不是您的意思!
收听本周的Floss Weekly播客,其中涵盖了SOA。这些描述是相当高级的,并且不会涉及太多技术细节(尽管SOA项目的更具体和可识别的示例会有所帮助。
取决于你是谁!
如果您是企业主,那么SOA是增加收入和业务敏捷性的解决方案。如果您是企业架构师,SOA是一种在空白画布上绘制漂亮干净的软件的方法。如果您是架构师,那么SOA是在集成平台上设计松耦合服务的解决方案,只需将服务插入插座即可。如果您是开发人员,那么SOA是一种编程范例,其中服务位于设计和代码的中心。
您应该阅读100个SOA问题[pdf]
干杯