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

What is SOA (Service Oriented Architecture)?

如果你愿意,可以叫我巨魔,但我是认真的:新的SOA趋势与我15年前构建的客户服务体系结构有什么不同?我一直在听SOA,但我看不出它与我们一直做的有什么不同。

10年前,我的公司有多个客户(使用多种语言),他们使用同一个服务。它不是XML(它是一个名为Microsoft DCOM的二进制协议),也没有通过WSDL自动发现,但这没关系,因为读取文档也很容易。我们的系统甚至在某种意义上是"开放的",我们记录的足够多,允许第三方与我们的服务交谈。我们不是先驱者——我10年前认识的其他公司都在做同样的事情。

我在那时和现在看到的唯一区别是,现在互联网上只有一个服务可用,而10年前,每个客户都会托管自己的服务实例。但这不是一个体系结构问题——服务的物理生命对任何使用服务的人都是透明的。

那么,SOA到底有什么不同于我们多年来所做的呢?SOA仅仅是一个市场营销术语,代表了一个在很久以前就已经很普遍的最佳实践吗?或者,我是否遗漏了一些与我们一直以来所做的不同的SOA的微妙之处?


忘记XML。忘记WSDL。SOA不是一种你可以购买的技术,尽管它通常是以这种方式销售的。

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

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

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

从商业的角度来看,这是非常可取的。流行词炒作和首字母缩略词soup只是IT公司试图从这种需求中获利。不幸的是,这让很多人(包括CEO)相信SOA是一种你可以购买的产品,它会神奇地提高你的效率,而没有意识到只有当你重新组织你的整个IT(很可能还有你的业务部门)以与SOA兼容时,这才会发生。


让我用集成地狱的著名替罪羊:电信。

早在90年代,手机公司在我的社区是完全自主的,几乎和90年代中期通信放松管制所可能的长途经销商一样多。时间在流逝,贝尔大西洋成为威瑞森的发电站,一个接一个地吞并公司(至少还有一个婴儿钟)。这些公司中的每一家都拥有技术,在塔内,在交换设备中,在相互完全不兼容的计费系统中。

所以公司开始说,好吧,我们有这些模型来说明我们如何做生意,让我们以wsdl/soap/xsd的形式在我们的所有技术上展现一个友好、一致的面孔-我们现在拥有的每种语言和系统都可以与之连接!慢慢地,但可以肯定的是,该公司正在使所有的IT系统都能够报告功能,为负载和计费目的而接受询问,并让未来的远见者以尚未说明的方式利用这些功能。

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

这与以前的客户机/服务器体系结构有着根本的不同。前几天我刚刚和某人讨论了如何将基于COBOL和Smalltalk的系统与SOA体系结构连接起来。这是一个很容易解决的问题。告诉我你可以对你的DCOM系统说同样的话。


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

服务是执行单个原子业务操作的操作。这种原子性使得它可以从许多模块中高度重用。那么,一个复杂的业务操作仅仅是以特定顺序调用其中许多服务的协调。

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


斯图加特大学的FrankLeymann教授在谈到SOA时,将SOA作为其面向服务计算(ServiceOrientedComputing,SOC)研究工作的一个关键概念。人们看到他被问及SOA的定义,接下来的对话可能是一个很好的读物。

Please note that our roadmap is about"service oriented computing (SoC)", i.e. the compute paradigm behind service-orientation. Service Oriented Architecture (SOA) is an architectural realization of this compute paradigm. You may compare this with"client/server computing" as paradigm and"browser/web server" or"DB-client/stored procedure" as two (of various other) architectural realizations of this paradigm.

SOA is not completely new. Some individual aspects of SOA are used in practice for a long time. For example, take a look at"loose coupling": Enterprises are using reliable messaging technology since decades to integrate applications, i.e. to loosely couple them. Don't get me wrong, there are new concepts in SOA, e.g. concepts resulting from the combination of concepts put together in SOA, i.e. they result from emergence.

Web Service specifications make the corresponding technologies available cross platform. I.e. the corresponding specifications do not invent fundamentally new concepts but define how these concepts and corresponding implementations work in heterogeneous environments. The resulting interoperability is groundbreaking, making SOA real.

In summary, SOA is a mixture of mature things and new emerging things.

还有一份2006年4月的SOC文件参考。

谷歌搜索可以识别弗兰克·莱曼教授和他的作品。


尼尔·福特对SOA有很多强烈的看法。你可能会发现他的观点很有趣。

策略与策略(SOA与不相关的障碍)

基于标准与标准化(SOA与不相关的问题)

工具和反行为(SOA和无关的障碍)

Rubick的隔间(SOA和无关的泥潭)

希望战胜理性(SOA和与理性无关的泥潭)

游击队SOA(SOA和无关的泥潭)


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


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


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

类比:玩具是用乐高积木建造的。

Lego toys build using Lego bricks


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

我不确定从那以后意义是否发生了变化,但我有机会与一家提供SOA套件的公司合作,下面是我对它的看法。

当然,当您设计一个应用程序时,您不能保证它是跨平台兼容的。以stock Trading systems为例。他们使用Fix protocol来传输消息。您是否希望它现在以XML格式返回数据,这样就可以称为SOA兼容?绝对不是!SOA是一种体系结构方法,可以帮助您decouple your application/services,并让它们彼此交互。SOA的主干是一个用于将数据从一个服务传输到另一个服务的ESB (Enterprise Service Bus)。SOA架构应该负责格式转换。例如:

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

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

SOA和ESB的区别

当然,"SOA"这个词被炒作是为了营销。从技术上讲,它与数据的反序列化和序列化一样简单,这样服务就可以分离,并且独立于平台,但其背后的思想是具体的。

同样,请参阅wiki页面。


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

对于一家新成立的公司来说,我不知道如何从一开始就采用面向服务的体系结构。首先,每个解决方案(很可能演变成一个服务,从而使其成为可互操作的)都应该寻求孤立地解决其问题空间。

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

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

SOA是一种方法或想法。它不是框架或工具。当wdsls和ejb名称被删除时,这常常被忘记…因为SOA的概念一点也不新鲜。