什么是面向服务的架构(SOA)?

60
如果你想把我叫做喷子,那也没关系,但我是认真的:新的SOA趋势到底与15年前我所构建的客户-服务体系结构有何不同?我一直听说SOA,但我不知道它与我们一直在做的有什么不同。
10年前,我公司有多个客户端(使用多种语言),这些客户端连接到同一个服务。虽然不是XML(我们使用了名为Microsoft DCOM的二进制协议),也没有通过WSDL进行自动发现,但这没关系,因为阅读文档同样容易。我们的系统甚至“开放”,即我们记录了足够的信息以允许第三方与我们的服务通信。我们并不是先驱者--10年前我知道的每家公司都在做同样的事情。
我唯一看到的区别是,现在在互联网上只有一个单一的服务可用,而10年前,每个客户都会托管他自己的服务实例。但这不是架构问题--服务物理位置对于使用服务的任何人来说都是透明的。
那么,SOA到底与我们多年来一直在做的有何不同呢?SOA只是一个代表最佳实践的营销术语,而这实际上早已成为常见的做法吗?还是我错过了一些SOA的微妙之处,这些微妙之处与我们一直以来所做的不同?

3
这是一个重复的问题,与 https://dev59.com/c0fSa4cB1Zd3GeqPBPDW 和其他类似。但我倾向于将其保留在这里,因为它有最好的主题行。 - John Saunders
5
你不是个巨魔,15年前,甚至30年前你所做的客户端-服务端架构与现在并没有什么区别。SOA只是应用计算机软件基础知识的一个流行词汇。它使得架构师和项目经理晚上睡觉时能够感到更好一些,我想。 - D3vtr0n
12个回答

88

忘记XML。忘记WSDL。SOA不是可以购买的技术,尽管通常会以此进行市场营销。

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

对于大型公司来说,这是一个严重的问题 - 他们拥有成百上千个不足够集成的单独应用程序。各处都有重复和不一致的数据,结果是客户感到恼火,因为计费部门仍然在发送已取消订单的发票,而客户服务代表甚至找不到该订单,因为它已被订单跟踪系统取消,但未在计费系统中取消。

SOA应该通过从基础开始设计每个应用程序,以标准化的跨平台方式发布其服务,以便其他应用程序可以访问数据并避免重复。

从商业角度来看,这非常值得。流行词和首字母缩写只是IT公司试图充分利用这种可取性。不幸的是,这误导了许多人,包括CEO,认为SOA是可以购买的产品,并且它会神奇地使您的IT更有效率,而不意识到只有在您也重新组织整个IT(可能还包括业务单元)以符合SOA兼容性的情况下才会发生这种情况。


11
我可以总结一下!“SOA不是一个技术...它本应该解决的问题...从商业角度来看...到处都是重复和不一致的数据...令人恼火,真正的钱财也会流失。” - Fire Crow
正确。它根本不是一种技术,尽管我面试过的许多雇主似乎认为它是。它只是一个流行词,用来整合自计算机软件开发以来一直存在的基础和实践。能否证明我错了? - D3vtr0n
SOA(面向服务的架构)旨在通过从头开始设计每个应用程序,以标准化、跨平台的方式发布其服务,以便其他应用程序可以访问数据并不必复制它。"——>什么样的服务?您暗示购买SOA的所有人都使用标准的服务集?哪些服务使您符合SOA标准?定义一下。你不能!! 我敢打赌。 - D3vtr0n
@Devtron:我敢打赌你误解了我的写作意图。我的意思是,SOA的重点在于设计应用程序,使它们将其功能作为服务提供给彼此。这就是为什么它被称为面向服务的架构。你似乎在考虑供应商提供的特定外部服务。虽然这确实可以成为更容易访问这些服务的有益副作用,但这是不同的事情。 - Michael Borgwardt
面向服务的架构与其他软件架构有何不同?在应用程序中,任何东西都可以被视为“服务”。请定义“服务”?你做不到。这一切都涉及基本的计算机设计和编程,是所有相关软件的基础。SOA只是一个炒作和重新定义“轮子”的流行词。除非有人定义了SOA中的“服务”,否则对我来说它只是一种炒作。 - D3vtr0n
22
@Devtron:为什么这么激进?当然,我能够在SOA的语境中定义“服务”:它意味着应用程序的功能可以通过网络使用,通过明确定义、文档化的接口提供,并且没有依赖关系。如果这不是一个根本性的新概念又怎样呢?SOA并没有重新定义任何东西,它只是将应用程序设计的重点放在了这个过去经常被忽视的方面。它被用作噱头并因炒作而扭曲并不意味着其基本思想没有价值。 - Michael Borgwardt

14

让我来举一个集成地狱的著名案例:电信公司。

回溯到90年代,我的社区里充斥着无数的手机公司,几乎和当时因通信行业管制取消而兴起的长途电话转售公司一样多。时间过去了,贝尔大西洋(Bell Atlantic)成为了强大的威瑞森(Verizon),并吞并了一个又一个公司(至少有一个Baby Bell)。每个被吞并的公司都拥有完全不相容的技术,如塔、交换设备和计费系统。

于是这家公司说,“好的,我们有这些经营业务的模式,让我们通过WSDL/SOAP/XSD把我们所有的技术统一起来,以一个友好而一致的面貌呈现出来!今天我们拥有的每种语言和系统都可以与之通信!” 这家公司正在慢慢使我们所有的系统都能够报告其功能、被询问其负载和计费目的,并能暴露给未来的愿景者以利用尚未考虑到的方式。

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

这就是过去客户/服务器架构与现在截然不同的地方。我刚刚还和某个人谈到将Cobol和Smalltalk系统接口化为SOA体系结构。那是一个很容易解决的问题。告诉我你对DCOM系统也能做到同样。


1
嗯。自70年代以来,我们就有了Unix、TCP和ASCII。那种程度的集成并不新鲜。 - Stephan Eggermont
1
XML是臃肿的垃圾。你知道使用CSV/平面文件可以节省多少带宽吗? - D3vtr0n
XML为什么需要模式信息?你是在告诉我你通过XML公开了你的模式吗?显然,我反对使用XML,但一想到在数据文件中提供模式信息,我就感到不安。模式永远不应该直接暴露,这就是为什么XML很烂的原因。 - D3vtr0n
1
@D3vtr0n:七年后,我很好奇:你为什么认为“模式永远不应该直接暴露”?也许你误解了,实际的模式并没有包含在数据文件中,除非有时作为URL。关键是有一种标准化、灵活的方式来定义详细的模式,这种方式被所有解析器理解,并可以用于验证文档,这绝对具有很大的价值。 - Michael Borgwardt
1
@D3vtr0n:至于膨胀问题,那真的不是问题;在几乎所有情况下,带宽根本不稀缺,相对于其他有效载荷,XML文档仍然很小,或者可以通过传输级别压缩来中和膨胀。当然,如果您需要通过BLE与低功耗微控制器通信,XML确实不适合,但这不是大多数人正在做的事情。 - Michael Borgwardt
显示剩余3条评论

12

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

服务是执行单个、原子业务操作的操作。这种原子性使其高度可重用于许多模块。因此,复杂的业务操作只是特定顺序中许多这些服务的调用编排。

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


simple and precise - Milind

7

斯图加特大学教授Frank LeymannSOA作为其服务导向计算(SOC)研究工作的关键概念。他被问及SOA的定义,随后的对话可能是一篇不错的阅读材料。

请注意,我们的路线图涉及“服务导向计算(SoC)”,即面向服务的计算范例。服务导向架构(SOA)是此计算范例的架构实现。您可以将其与“客户端/服务器计算”作为范例以及“浏览器/ Web服务器”或“DB-client/stored procedure”作为该范例的两种(众多其他)架构实现进行比较。

...

SOA并非完全新颖。 SOA的某些单个方面在实践中已经使用了很长时间。例如,看看“松散耦合”:企业自几十年来一直在使用可靠的消息传递技术来集成应用程序,即使它们之间松散耦合。不要误解,SOA中有新的概念,例如由SOA中组合的概念组合而成的概念,即它们是由出现导致的。

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

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

还有一个SoC paper reference,日期为2006年4月。


通过谷歌搜索可以找到弗兰克·莱曼教授他的作品


3
尊敬的弗兰克·莱曼教授,他是谁?我们为什么要关心他? - John Saunders
3
我不知道他是谁,但他在揭露这个欺诈性流行语(SOA)时确实说得一针见血。 - D3vtr0n

4

+1 非常棒的系列思考,也感谢你带我发现了以 Chuck Norris 为灵感的 SOA Facts! - 8bitjunkie

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

1
"word"是一个“包装器”词,用于旋转古老的技术。 - D3vtr0n

0

这里的大部分答案似乎表达了SOA(面向服务的架构)是关于以标准化的方式构建应用程序,以便其他应用程序可以以独立于平台的方式与之交互。

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

当然,当您设计应用程序时,无法保证它将跨平台兼容。以股票交易系统为例。它们使用Fix协议传输消息。您现在期望它以XML格式返回数据,以便被称为SOA兼容吗?绝对不! SOA是一种架构方法,可以帮助您解耦应用程序/服务并让它们相互交互。 SOA的骨干是ESB(企业服务总线),用于将数据从一个服务传输到另一个服务。 SOA架构应该负责格式转换。例如 -

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

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

SOA和ESB之间的区别

当然,SOA这个词被夸大了营销目的。从技术上讲,它只是将数据进行反序列化和序列化,以便服务可以解耦并且平台无关,但其背后的思想是具体的。

同样,请参考维基页面


0

面向服务的架构(SOA)是一种软件设计模式,其中软件被设计为构建块。即模块化开发,使得灵活性可以按照我们想要的方式进行组装。如果您想启动新项目而不是从头开始,我们可以重用服务,如果您想要新服务,我们可以轻松地集成现有服务以创建新项目。因此,我们可以节省大量时间和金钱。面向服务的架构的基本原则与供应商、产品和技术无关。

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

Lego toys build using Lego bricks


0

对我来说,面向服务的架构是指当企业希望将涉及共同领域的不同应用程序集成到一组可互操作的服务中,并针对单个数据源运行这些服务时,所采取的一种架构。

对于一个有软件/软件套件想法的新创公司而言,我无法看到公司如何从一开始就采用面向服务的架构。首先,每个解决方案(可能会逐渐演变为可互操作的服务),都应该在隔离环境中解决其问题空间。

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

在现有软件岛屿变成面向服务的架构中的可互操作服务的情况下,该方法允许软件条目 - 可能分布在不同语言中编写 - 通过公开的 API 和/或通用协议(例如 Web Service 的某种风格)和通用数据格式(例如 XML)进行通信。

SOA是一种方法或理念,而不是框架或工具。当提到WDSL和EJB时,人们经常会忘记这一点......同样被忽略的是,SOA的理念并不新鲜。


0
事实上,SOA也利用了客户端-服务器架构。此外,SOA是一种设计软件的方式。假设您的应用程序可以分解为简单且独立的任务,例如搜索书籍、添加新书籍、根据用户喜好推荐书籍等等。如果您考虑为每个任务提供一个服务(API),那么实际上您正在使用SOA。这种架构的优点在于,无论您构建Web应用程序还是移动应用程序,您只需要开发上述服务(API)即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接