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

Posted

技术标签:

【中文标题】什么是 SOA(面向服务的架构)?【英文标题】:What is SOA (Service Oriented Architecture)? 【发布时间】:2010-11-08 18:09:08 【问题描述】:

如果你愿意,可以称我为巨魔,但我是认真的:新 SOA 趋势与我 15 年前构建的客户端服务架构有何不同?我一直听到SOA,但我看不出它与我们一直所做的有什么不同。

早在 10 年前,我的公司有多个客户(使用多种语言)使用相同的服务。它不是 XML(它是一种称为 Microsoft DCOM 的二进制协议),也没有通过 WSDL 进行自动发现,但这没关系,因为阅读文档同样容易。我们的系统甚至是“开放的”,因为我们记录了它足以让第 3 方与我们的服务对话。我们不是先驱——我 10 年前认识的所有其他公司都在做同样的事情。

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

那么,与我们多年来一直在做的事情不同的 SOA 到底是什么? SOA 是否只是一个营销术语,代表了很久以前实际上变得普遍的最佳实践?或者我是否遗漏了一些与我们一直在做的不同的 SOA?

【问题讨论】:

这是***.com/questions/973673/… 和许多其他人的副本,但我倾向于将其留在这里,因为它有最好的主题行。 您不是巨魔,您在 15 年前所做的客户端服务架构没有什么不同。甚至30年前。 SOA 只是应用计算机软件基础的流行语。我想这会让建筑师和项目经理在晚上睡觉时感觉更好。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

这里的大多数答案似乎都表明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。

【讨论】:

【参考方案6】:

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

对于一家新成立的公司来说,它有一个软件项目/软件套件的想法,我看不出一家公司如何从一开始就采用面向服务的架构。首先,每个解决方案(很可能会演变成一种服务,从而可以互操作)应该寻求孤立地解决其问题空间。

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

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

SOA 是一种方法或想法。它不是一个框架或工具。当 WDSL 和 EJB 被取消名称时,这通常会被遗忘……因为 SOA 的想法根本不是新的。

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

简单而精确【参考方案8】:

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

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

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

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

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

【讨论】:

我可以总结一下! “SOA 不是一项技术……应该解决……从业务角度来看……到处都是重复和不一致的数据……很生气,真金白银损失了” ^ 正确。这根本不是一种技术,尽管我采访过的许多雇主似乎都认为它是。将自计算机软件开发之初就一直在发生的软件开发基础和实践结合起来是一个流行语。证明我错了吗? "SOA 应该通过从头开始设计每个应用程序来解决这个问题,以标准化的跨平台方式发布其服务,以便其他应用程序可以访问数据而不必复制它。” -----> 什么服务?您是在暗示购买 SOA 的每个人都在使用一套标准的服务?哪些服务使您符合 SOA?定义那个。你不能!!我会和你赌几美元。 @Devtron:我敢打赌你误解了我写的东西。我是说 SOA 的重点是设计您的应用程序,以便它们将功能作为服务提供给彼此。这就是为什么它被称为面向服务的架构。您似乎正在考虑供应商提供的特定外部服务。不同的事情,尽管让那些更容易获得肯定是一个有益的副作用。 @Devtron:为什么这么激进? 当然 我可以在 SOA 的上下文中定义“服务”:这意味着应用程序的功能可以通过网络、通过定义良好、文档化的接口获得,并且没有依赖关系。那么,如果这不是一个全新的概念呢? SOA 没有重新定义任何东西,它只是将应用程序设计的重点放在了这个迄今为止经常被忽视的方面。它被用作流行语并通过炒作而被扭曲的事实并不意味着潜在的想法没有价值。【参考方案9】:

让我用集成地狱著名的鞭打男孩:电信。

早在 90 年代,手机公司就在我家附近,几乎与 90 年代中期放松通信管制所带来的长途经销商数量一样多。好吧,随着时间的推移,Bell Atlantic 成为了 Verizon 的强者,并吞并了一家又一家公司(以及至少一个 Baby Bell)。这些公司中的每一家都拥有彼此完全不兼容的技术,在信号塔、交换设备和计费系统中。

所以公司说,好吧,我们有这些模型来说明我们如何开展业务,让我们以 WSDL/SOAP/XSD 的形式对我们所有的技术进行友好、一致的处理——我们的每一种语言和系统有今天可以接口到这个!该公司正在缓慢但肯定地让其所有系统能够报告功能,为负载和计费目的而进行询问,并以尚未被考虑的方式向未来的有远见的人展示。

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

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

【讨论】:

嗯。自 70 年代以来,我们就有了 unix、tcp 和 ascii。这种集成水平并不是什么新鲜事。 哦,你是对的。我们已经从随机专有 ASCII 到标准化 EDI,再到定制 EDI,再到标准化 XML,再到定制 XML。至少 XML 带来了架构集成。 ^ XML 是臃肿的废话。您知道使用 CSV/平面文件可以节省多少带宽吗? @D3vtr0n:7 年后,但我很好奇:为什么你认为“架构不应该直接暴露”?也许你误解了,实际的模式不包含在数据文件中,除了有时作为 URL。关键是有一种标准化、灵活的方式来定义所有解析器都可以理解的详细架构,并且可以用来验证文档,这绝对有很大的价值。 @D3vtr0n:至于臃肿,这真的不是问题;在几乎所有情况下,带宽都不是稀缺的,XML 文档相对于其他有效负载仍然很小,或者可以通过传输级压缩来消除膨胀。当然,如果您需要通过 BLE 与低功耗微控制器通信,XML 确实不太适合,但这不是大多数人正在做的事情。【参考方案10】:

Neal Ford 对 SOA 有很多强烈的看法。你可能会觉得他的观点很有趣。

Tactics vs. Strategy (SOA & The Tarpit of Irrelevancy)

Standards Based vs. Standardized (SOA & the Tarpit of Irrelevancy)

Tools & Anti-Behavior (SOA & the Tarpit of Irrelevancy)

Rubick's Cubicle (SOA & the Tarpit of Irrelevancy)

The Triumph of Hope over Reason (SOA & The Tarpit of Irrelevancy)

Guerrilla SOA (SOA & The Tarpit of Irrelevancy)

【讨论】:

+1 获得了一系列精彩的思考,并带领我了解受 Chuck Norris 启发的 SOA 事实!【参考方案11】:

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

【讨论】:

字。它只是一个“包装”词,用来旋转古老的技术。【参考方案12】:

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

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

...

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

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

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

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


Google 搜索识别出教授Frank Leymann 和his works。

【讨论】:

向 Frank Leymann 教授致以崇高的敬意,他是谁,我们为什么要关心? ^ 我不知道他是谁,但他确实一针见血地揭露了这个欺诈性流行语 (SOA)。

以上是关于什么是 SOA(面向服务的架构)?的主要内容,如果未能解决你的问题,请参考以下文章

面向服务的架构SOA

面向服务架构(SOA)在自动驾驶领域的应用(待写)

面向服务架构(SOA)在自动驾驶领域的应用(待写)

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

面向服务soa的理解

SOA面向服务架构