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

如果你愿意的话,可以叫我一个巨魔,但我很认真 – 新的SOA趋势究竟与15年前build立的客户服务架构有什么不同呢? 我一直听到SOA,但是我没有看到它和我们一直做的不一样。 早在10年前,y公司就有多个客户(以多种语言)与同一个服务交谈。 这不是XML(这是一个名为Microsoft DCOM的二进制协议),并没有通过WSDL自动发现,但是这样做是可以的,因为阅读文档同样简单。 我们的系统甚至是“开放”的,因为我们logging的数据足以让第三方与我们的服务进行交stream。 我们不是开路先锋 – 十年前我所认识的其他任何一家公司都在做同样的事情。 现在和现在看到的唯一区别是,现在互联网上有一种单一的服务,而10年前,每个客户都将托pipe他自己的服务实例。 但是,这不是一个架构问题 – 服务的实际生活对于使用该服务的任何人来说都是透明的。

那么SOA究竟是什么与我们多年来所做的不同呢? SOA是否仅仅是一个营销术语,代表了很久以前实际上已经很普遍的最佳实践? 还是我错过了一些SOA的东西,跟我们一直在做的不一样?

忘记XML。 忘记WSDL。 SOA并不是你可以购买的技术,虽然它经常以这种方式销售。

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

对于大公司来说,这是一个严重的问题 – 他们有几百个单独的应用程序,这些应用程序的集成不充分。 在所有地方都有重复的和不一致的数据,结果是客户因此而生气,因为计费部门不断发送取消订单的发票,客户服务代表甚至找不到订单,因为在订单跟踪中取消系统,而不是计费系统。

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

从商业angular度来看,这是非常可取的。 stream行的炒作和首字母缩略词汤只是IT公司试图在这个愿望上兑现。 不幸的是,这导致了许多人的失误,其中包括CEO认为SOA是一种你可以购买的产品,它会神奇地使你的IT更有效率,而不会意识到这只会在你重组整个IT时才会发生也可能是您的业务部门)与SOA兼容。

让我使用整合地狱的着名鞭打男孩:电信公司。

早在上个世纪90年代,手机公司在我所在的地区就变得exception激烈,几乎与90年代中期通信放松pipe制所带来的长途经销商一样丰富。 那么,时间还会继续,贝尔大西洋公司成为威瑞森的强者,并且在公司之后吞并公司(至less有一个贝尔贝尔)。 这些公司中的每一个都拥有技术,塔,交换设备,完全不兼容的计费系统。

所以公司说,好的,我们有这些业务模式,让我们以WSDL / SOAP / XSD的forms在我们所有的技术上build立一个友好,一致的面孔 – 我们今天的每一种语言和系统都可以被接口到这个! 这个公司正在慢慢地但是可以肯定的是,它的所有系统都能够报告能力,被加载和计费的目的被审问,并且暴露给未来的远见者以未被考虑的方式利用。

任何人都可以构buildSOA客户端。 任何人与wget和文本编辑器。 任何人都可以parsing结果(XML)。

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

斯图加特大学的Frank Leymann教授在谈到SOA时 ,将SOA作为其面向服务的计算(SOC)研究工作的关键概念。 他被问到有关SOA的定义,随后的谈话可能是一个很好的解读。

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

SOA并不是全新的。 SOA的一些个别方面在实践中被使用了很长一段时间。 例如,看看“松耦合”:企业几十年来一直在使用可靠的消息传递技术来整合应用程序,即松散地耦合它们。 不要误会我的意思,SOA中有一些新的概念,例如,将概念组合在一起的概念,也就是说,它们是由于出现而产生的概念。

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

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

还有一个2006年4月的SoC文件参考 。


谷歌search确定弗兰克莱曼教授和他的 作品 。

SOA 只不过是一种devise方式,模块之间通过“服务”相互交stream。 就是这样,现在下一个问题是:什么是“服务”,它与常规的“方法”有何区别?

服务是执行单一的primefaces商业操作的操作。 这种primefaces性使得它可以从很多模块中高度重用 。 那么一个复杂的业务操作就是以特定的顺序来调用这些服务中的许多。

SOA与具体技术无关,只是一种具体的devise方式。

Neal Ford对SOA有很多强烈的意见。 你可能会发现他的观点很有趣。

战术与战略(SOA与无关的对象)

基于标准与标准化(SOA和无关的对象)

工具和反行为(SOA和无关的对象)

拉比克小屋(SOA和无关的对象)

理性胜利的胜利(SOA与无关的对象)

游击战SOA(SOA与无关的目标)

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

对于我来说,面向服务的体系结构是指当企业希望将涉及公共领域的不同应用程序集成到一组针对单一数据源的可互操作服务时。

对于一个有一个软件/套件软件的想法的新创业公司来说,我看不出一个公司如何从一个面向服务的体系结构开始。 起初,每个解决scheme(可能演变成一种可以互操作的服务)应该设法孤立地解决问题空间。

也许在解决scheme完成并投入使用后,每个解决scheme的企业能力或套件将成为一个可互操作服务的路线图。 为此,也许开发团队将采取模块化/面向组件的方法来构build解决scheme(最终服务),以便更容易地将解决scheme作为服务包含在面向服务的体系结构中。

在现有的软件孤岛要在面向服务的体系结构中成为可互操作的服务的情况下,该方法允许软件项目(可以被分发并且可以用不同的语言编写)通过暴露的API和/或公共协议(例如Web服务的味道)和通用数据格式(例如XML)。

SOA是一种方法或想法。 这不是一个框架或工具。 当WDSL和EJB取消名称时,通常会忘记这一点……因为SOA的概念并不新鲜。

这里的大部分答案似乎都表明SOA (Service Oriented architecture)是关于以标准化的方式构build应用程序,以便其他应用程序可以与平台无关的方式与其交互。

我不确定意义是否已经改变,但是我有机会与一个提供SOA套件的公司合作,以下是我的想法。

当然,当你devise一个应用程序,你不能保证它将跨平台兼容。 以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套件的一部分。 有关更多信息请参阅另一个答案 –

SOA和ESB的区别

当然SOA是一个词是炒作的营销目的。 从技术上来说,就像解序列化和序列化数据一样简单,这样服务就可以分离和平台独立,但其背后的想法是具体的。

另请参阅Wiki页面 。

实际上,SOA是定义良好的服务的集合。 基本上,SOA使用松散耦合的服务来轻松获得期望的结果。 服务的实现细节对于客户端/消费者是隐藏的,所以实现的任何改变都不会影响服务,直到它们之间的契约发生改变。 服务提供者是基于预定的input和输出执行一些业务逻辑的组件,并且通过SOA实现公开这个function。 这使得基于SOA的系统能够更快,更经济地响应业务。 组件和SOA之间的主要区别在于,SOA提供了一个开放标准的消息,它不是特定于任何编程语言或平台的。 因此,您可以跨平台和技术实现高度的松耦合和互操作性。 在传统的客户端 – 服务器环境中,提供者将成为服务器,客户将成为客户端。您可以在这里阅读更多有关SOA的信息: 面向服务的体系结构(Service Oriented Architecture,SOA)

面向服务的架构(SOA)是一种架构模式,其中软件被devise为构build模块。 即模块化开发,可以灵活地组装我们想要的任何方式。 如果你想开始新的项目,而不是从头开始,我们可以重新使用这些服务,如果你想要新的服务,我们可以很容易地与现有的服务集成,以build立新的项目。 所以我们可以节省大量的时间和金钱。面向服务架构的基本原理是独立于厂商,产品和技术的。

比喻:玩具使用乐高积木build立。

乐高积木玩具使用乐高积木