16

我最近与我们的一位架构师进行了交谈,他将他对 SOA 的使用总结为“我们将使用服务的唯一时间是当我们需要异步操作时,否则我们将使用直接访问数据存储”

我考虑过这个说法,它似乎很合乎逻辑,因为服务在发布订阅模型中运行良好,但我想知道您应该在哪些其他场景中使用 SOA?

4

10 回答 10

24

我们向客户公开服务,因为他们不应该能够直接连接到数据源。

我们向自己公开服务是因为使用 WCF 更容易将它们分布在不同的技术上。

我们公开服务是因为我们对同一个数据源有不同的用户界面。当我们使用服务时,我们节省了三分之一的工作量。

这不仅仅是因为异步操作。

于 2009-06-09T13:14:21.527 回答
9

使用服务的另一种情况是当您想要集成异构技术堆栈时。

换句话说,如果你的数据库是 postgres,但你有 Java、Perl、Python 和 C++ 的代码,你可以编写存储过程并让每种编程语言调用它们。如果您正在使用没有存储过程的数据库,或者您希望能够将它们切换出去 - 或者您只想在端口 80 上运行,您可以将 SQL 调用包装在面向服务的层中(想想 websphere),现在任何人都可以调用 - 另外,您可以将身份验证和授权逻辑(连接到 LDAP,等等)放在 SOA 层中。

您还可以使用该 SOA 层,例如建立一个逻辑例程,用角落里的旧 COBOL 框来“处理”发票或为客户创建报表。

因此,如果您有许多想要互连的遗留系统——比如销售系统到仓储系统再到订单预测系统——SOA 可能是实现该目标的一种方式。(您还可以使用“服务总线”来创建事件驱动系统,以更好地编排变更。)

只是我在说话。

于 2009-06-09T13:43:54.477 回答
6

在许多情况下,您都可以从使用服务中受益。其中一些场景已被行业专家(如 SOA 的 Thomas Erl 成名)编纂。

SOAP 模式

我会说你想寻找:

  • 遗留应用程序重用
  • 业务流程重用(同一流程的多个用例)
  • 实现抽象(平台、语言、持久化抽象)

你的同事保持谨慎是对的。随着 Web 服务的采用,引入了许多部署和支持变量。

于 2009-06-11T16:24:07.460 回答
3

另一个场景可能是集成场景,您希望许多单独的组件或系统相互通信。

于 2009-06-09T13:10:55.730 回答
2

SOA 可用作隐藏子系统实现细节的一种方式。例如,如果您的客户需要产品信息,那么将您的产品数据库或库存子系统包装到一个通用服务中并仅公开您的客户需要的功能和数据的子集可能是一个好主意。然后,如果您需要更换或升级该子系统,您将能够使这些更改对您的用户和面向客户的软件界面透明。

于 2009-06-09T13:27:50.890 回答
2

电信 (IMHO) 似乎将 SOA 视为生命线的重点是支持 SOA 的系统允许您采用传统和根深蒂固的技术,并将它们呈现为一致的、受控的 API,让您的业务用户开发新的和以前没有想到的想法,而无需重新设计公司的一切。

通过使用统一语言 (WSDL) 作为您的界面,您可以为互操作准备技术孤岛。通过现在实施 SOA,而不是直接到数据源,您可以自动使您的数据源可供您从未考虑过的各方和业务需求使用。

WSDL 终于是 Corba-that-works。

于 2009-06-11T16:36:47.367 回答
2

WSDL 和 SOAP 通常会遇到 CORBA 和 DCOM 会遇到的相同问题:合同版本控制是一场噩梦。在您可以完全控制所有客户端和服务器的退化情况下,这并不是什么大问题,但是当您开始联合系统时它会变得很难看,当您进入企业间时更是如此。

那时,您几乎被迫采用某种事件驱动的体系结构方法,而不是典型的 SOAP-as-RPC 交互模型。这并不一定意味着使用 ESB,但是将企业之间的连接视为 ESB 之间的连接非常有用。

即便如此,依赖 SOAP 作为传输方式也会变得丑陋。您不仅需要使用对立的 Web 服务来适应双向交互,而且还需要解决版本控制问题。通常,SOAP 方法会退化为围绕以其他方式定义的“blob”的琐碎包装(例如,单独的 XML 模式)。

有答案,但从不简单。 Web 服务版本控制的最佳实践讨论了其中的几个。

但是 SOA 并不意味着任何异步。这只是实现 SOA 的聪明方法。SOA 是关于松散耦合的。SOA 的 EDA 子集是关于解耦的,这更进一步。

于 2009-06-25T01:48:59.097 回答
2

存在另一种相关思想流派,称为 SOAD(面向服务的应用程序设计),系统的每个组件都是服务。这是为了利用构建它们的环境(EJB、WCF)所提供的好处,即您可以获得大量免费管道。

关于这方面的更多资源

构建 SOA

SOA 设计模式

在 SOA 中实现完整性

在 SOA 中实现灵活性/可维护性

于 2010-11-03T08:08:50.313 回答
1

整合访问相同资源的不同技术;在这些不同的技术上实现一定程度的事务隔离;将一个业务逻辑写在一个地方(所以当这个逻辑被改变时不会有噩梦)......

于 2009-06-09T13:33:11.520 回答
0

我将在一个系统中使用 SOA,该系统将在组织内部进行扩展,并可能扩展到其他组织。

对于可以改变的产品也很好,你可以更换它的一小部分。

最后,您将拥有许多乐高积木,您可以将它们连接在一起。

于 2010-02-10T11:10:23.207 回答