什么是SOA(面向服务的体系结构)?

时间:2009-07-07 15:57:06

标签: web-services soa architecture

如果你愿意,可以叫我一个巨魔,但我是认真的:新的SOA趋势究竟与我15年前建立的客户服务架构有什么不同?我一直听到SOA但我不知道它与我们一直以来的不同之处。

回到10年前,我的公司有多个客户(多种语言)与同一服务进行交谈。它不是XML(它是一个名为Microsoft DCOM的二进制协议),并且没有通过WSDL进行自动发现,但这是正常的,因为阅读文档同样容易。我们的系统甚至是“开放的”,因为我们记录它足以让第三方与我们的服务交谈。我们不是先锋 - 我10年前所知道的其他公司都在做同样的事情。

我在当时和现在之间看到的唯一区别是现在互联网上有一项服务,而10年前,每个客户都会托管他自己的服务实例。但这不是架构问题 - 物理上的服务对使用该服务的任何人都是透明的。

那么SOA究竟与我们多年来所做的不同? SOA只是一个代表最佳实践的营销术语,这个实践在很久以前就已经变得普遍了吗?或者我错过了一些与我们一直在做的不同的SOA?

12 个答案:

答案 0 :(得分:85)

忘记XML。忘了WSDL。 SOA不是您可以购买的技术,尽管它通常以这种方式进行营销。

SOA的真正意义在于IT 组织。 SOA的重点是避免拥有大量具有隔离数据池的“应用程序”,或者根本不相互通信(因此通常会重复数据),或者只是通过适配器层以低效,错误的方式进行交互或EAI系统。

对于大公司来说,这是一个严重的问题 - 他们实际上有数百个单独的应用程序集成不足。到处都有重复和不一致的数据,结果是客户生气,真钱丢失,因为计费部门不断发送已取消订单的发票,而客户服务代表甚至找不到订单,因为它在订单跟踪中被取消系统,但不是计费系统。

SOA应该通过从头开始设计每个应用程序以标准化,跨平台方式发布其服务来解决这个问题,以便其他应用程序可以访问数据而不必复制它。

从商业角度来看,这是非常可取的。流行语炒作和首字母缩略词汤只是IT公司试图在这种可取性上获利的尝试。不幸的是,这导致许多人(包括首席执行官)相信SOA是您可以购买的产品,它会神奇地使您的IT更有效率,而不会意识到这只会在您重组整个IT时才会发生(并且相当可能是您的业务部门)与SOA兼容。

答案 1 :(得分:13)

让我使用Integration Hell的着名鞭打男孩:Telco。

回到90年代,手机公司在我家附近很多,几乎和90年代中期通信放松管制所带来的长途经销商一样充足。好吧,时间继续,贝尔大西洋成为Verizon的强国,并且一家又一家地吞并了公司(至少有一个Baby Bell)。这些公司中的每一家都有技术,塔楼,交换设备,完全不兼容的计费系统。

所以该公司说,好吧,我们有这些模型用于我们的业务,让我们以WSDL / SOAP / XSD的形式对我们的所有技术进行友好,一致的表述 - 我们的每一种语言和系统今天可以与这个接口!缓慢但肯定地,该公司正在制作所有能够报告功能的系统,为负载和计费目的进行查询,并为未来的梦想家提供利用尚未解决的方式。

任何人都可以构建SOA客户端。任何有wget和文本编辑器的人。任何人都可以解析结果(XML)。

这与过去的客户端/服务器架构有根本的不同。前几天,我只是在谈论有关将Cobol和基于Smalltalk的系统连接到SOA架构的人。这是一个容易解决的问题。告诉我你可以对你的DCOM系统说同样的话。

答案 2 :(得分:9)

SOA 只是一种设计方式,其中模块通过“服务”相互通信。就是这样,现在接下来的问题是:什么是“服务”,它与常规“方法”的区别是什么?

服务是执行单个原子业务操作的操作。这种原子性使其从许多模块中高度可重用。然后,复杂的业务操作就是以特定顺序调用许多这些服务的工作流程。

SOA与特定技术无关,只是一种特定的设计方式。

答案 3 :(得分:7)

斯图加特大学的Frank Leymann教授将SOA作为他Service oriented Computing (SOC) research work as he speaks about SOA的关键概念。他被看作被问及SOA的定义,随后的对话可能是一个很好的阅读。

  

请注意,我们的路线图是关于“面向服务的计算(SoC)”,即面向服务的计算范例。面向服务的体系结构(SOA)是此计算范例的体系结构实现。您可以将此与“客户端/服务器计算”作为范例和“浏览器/ Web服务器”或“DB客户端/存储过程”进行比较,作为此范例的两个(各种其他)体系结构实现。

...

  

SOA并不是全新的。 SOA的某些方面在实践中使用了很长时间。例如,看看“松散耦合”:几十年来,企业正在使用可靠的消息传递技术来集成应用程序,即松散地耦合应用程序。不要误解我的意思,SOA中有新概念,例如: SOA中存在的概念组合产生的概念,即它们是由出现产生的。

     

Web服务规范使相应的技术跨平台可用。即相应的规范并没有从根本上发明新概念,而是定义了这些概念和相应的实现如何在异构环境中工作。由此产生的互操作性是开创性的,使SOA成为现实。

     

总之,SOA是成熟事物和新兴事物的混合体。

2006年4月还有一个SoC paper reference


Google搜索会识别教授Frank Leymannhis works

答案 4 :(得分:4)

答案 5 :(得分:2)

我认为SOA既是营销术语,也是现有解决方案的集成,而不是销售整个软件或机器,我们销售服务。

答案 6 :(得分:0)

对我来说,当企业希望将一系列涉及共同域的不同应用程序集成到一组可以对单个数据源进行操作的可互操作服务时,就会出现面向服务的体系结构。

如果是一家新创业公司想要一个软件/软件套件,我无法看到公司如何从关闭开始使用面向服务的架构。首先,每个解决方案(可能很好地演变成可以互操作的服务)应该寻求孤立地解决其问题空间。

可能会在企业功能或套件的路线图中为每个解决方案成为可互操作的服务,因为解决方案已完成并进入服务。为此,开发团队可能会采用模块化/组件导向的方法来构建解决方案(最终服务),以便更容易将解决方案作为服务包含在面向服务的体系结构中。

如果现有的软件孤岛要成为面向服务的体系结构中的可互操作服务,则该方法允许软件项(可以分发并可以用不同语言编写)通过公开的API进行通信和/或通用协议(例如Web服务的风格)和通用数据格式(例如XML)。

SOA是一种方法或想法。它不是框架或工具。当WDSL和EJB被删除名称时,通常会忘记这一点......因为SOA的概念根本不是新的。

答案 7 :(得分:0)

这里的大多数答案似乎都表明SOA (Service Oriented architecture)是以标准化的方式构建应用程序,以便其他应用程序可以以独立于平台的方式与其进行交互。

我不确定自那以后意义是否有所改变,但我有机会与提供SOA套件的公司合作,以下是我的想法。

当然,当您设计应用程序时,您无法保证它将符合跨平台要求。以stock Trading systems为例。他们使用Fix protocol来传输邮件。您是否希望它现在以XML格式返回数据,以便它可以称为SOA兼容?当然不! SOA是一种架构方法,可以帮助您decouple your application/services并让它们相互交互。 SOA的骨干是ESB (Enterprise Service Bus),用于将数据从一个服务传输到另一个服务。 SOA架构应该处理格式转换。例如 -

FIX(Service 1) -> (XML ---ESB---> XML) -> JSON (Service 2)

这些转换模块通常称为adapters,通常是SOA套件的一部分。有关更多信息,请参阅另一个答案 -

Difference between SOA and ESB

当然,SOA是一个被宣传用于营销目的的词。从技术上讲,它就像反序列化和序列化数据一样简单,以便服务可以解耦并与平台无关,但其背后的想法是具体的。

同样请参考Wiki page

答案 8 :(得分:0)

面向服务的体系结构(SOA)是一种体系结构模式,其中软件被设计为构建块。即模块化开发,可灵活地以任何方式组装。如果您想开始新项目而不是从头开始,我们可以重用这些服务,如果您想要新服务,我们可以轻松地与现有服务集成以创建新项目。因此,我们可以节省大量的时间和金钱。面向服务的体系结构的基本原则是独立于供应商,产品和技术。

类比:玩具使用乐高积木构建。

Lego toys build using Lego bricks

答案 9 :(得分:0)

实际上,SOA是定义明确的服务的集合。基本上,SOA使用松散耦合的服务来轻松获得期望结果。服务的实现细节对客户端/消费者是隐藏的,因此实现中的任何更改都不会影响服务,直到它们之间的合同发生更改。服务提供者是基于预定输入和输出执行某些业务逻辑的组件,并通过SOA实现公开此功能。这使得基于SOA的系统能够更快,更经济地响应业务。组件与SOA之间的主要区别在于,SOA提供了一种开放标准消息,该消息并非特定于任何编程语言或平台。因此,您可以跨平台和技术实现高度松耦合和互操作性。在传统的客户端 - 服务器世界中,提供者将是服务器,消费者将是客户端。您可以在此处阅读有关SOA的更多信息:Service Oriented architecture (SOA)

答案 10 :(得分:0)

实际上,SOA还利用了客户服务体系结构。另外,SOA是一种设计软件的方法。假设您的应用程序可以分为简单而独立的任务,例如搜索书籍,添加新书籍,根据用户偏好推荐书籍等等。实际上,如果考虑为每个任务提供服务(API),那么您正在使用SOA。这种体系结构的优点在于,无论您要构建Web应用程序还是移动应用程序,都只需要开发上述服务(API)。

答案 11 :(得分:0)

面向服务的体系结构(SOA)是一种设计方法,其中多个服务 协作以提供一些最终功能。这里的服务通常意味着 完全独立的操作系统进程。这些服务之间的通信 通过网络上的调用而不是过程边界内的方法调用发生。 SOA作为一种应对大型单片式挑战的方法而出现 应用程序。它是一种旨在促进软件的可重用性的方法。两个或 例如,更多的最终用户应用程序都可以使用相同的服务。它旨在 从理论上讲,我们可以替换一项服务,从而使维护或重写软件更加容易 与另一个人不知道,只要服务的语义不 变化太多。