2009-06-09 48 views
16

我最近与我们的一位架构师进行了对话,他总结了他对SOA的使用:“我们将使用服务的唯一时间是当我们需要异步操作时,否则我们将使用去直接访问数据存储“何时使用SOA(面向服务的体系结构)

我想到了这个声明,它看起来很合理,因为服务在发布订阅模型中运行良好,但我想知道您应该在哪些其他场景中使用SOA?

回答

23

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

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

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

这绝不仅仅是因为异步行为。

+0

在同一个数据源的不同用户界面的情况下,是否有任何理由不能发布一个用于所有UI组件的DLL? – lomaxx 2009-06-09 13:17:27

+2

有一种情况是可能的。我们主要有网络用户界面和桌面用户界面。哪一个不能用于dll。 – albertjan 2009-06-09 13:22:48

+5

如果你有一个异构的web ui环境,Java,.Net,PHP,RoR,那么运送DLLs并不是那么有用。使用服务来克服异构环境也是SOA的常见用法。 – 2009-06-09 13:32:54

3

另一种情况可能是一种集成方案,您希望许多单独的组件或系统彼此进行通信。

+1

我会同意。如果您需要各种不同的系统进行相互通信,我期待SOA解决集成问题,特别是在公司内部的问题。 – Daryl 2012-01-12 20:08:05

2

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

1

集成不同的技术访问相同的资源;在这些不同的技术上实现一定程度的交易隔离;保持一个业务逻辑写在一个地方(所以当这个逻辑被改变时不会有nigthtmares)...

9

使用服务的另一种情况是当你想要集成一个异构的技术堆栈。换句话说,如果你的数据库是postgres,但你有Java,Perl,Python和C++的代码,你可以编写存储过程并让每种编程语言调用这些存储过程。如果您正在使用没有存储特效的数据库,或者希望具有切换功能 - 或者您只想运行端口80,则可以将SQL调用包装在面向服务的层中(思考websphere),现在可以被任何人调用 - 此外,您可以将身份验证和授权逻辑(连接到LDAP,无论)放在SOA层中。

您也可以使用该SOA层来建立一个逻辑例程,以便在管理发票或为客户创建语句的角落使用旧的COBOL框执行“填充”。因此,如果你有一些你想要互连的遗留系统 - 比如销售系统到仓储系统到订单预测系统 - SOA可能是实现这一目标的一种方法。 (您也可以使用“服务巴士”来创建事件驱动系统,作为更好地协调变化的方式。)

只要我说说'。

6

在许多情况下,您将从使用服务中受益。其中的一些场景已经被行业权威(如SOA的托马斯埃尔的名人)所编纂。

SOAPatterns

我说你想寻找:

  • 遗留应用程序的重用
  • 业务流程重复使用(多个用例相同的过程)
  • 实现抽象(平台,语言,持久性抽象)

Your collea gue是谨慎的。随着Web服务的采用,引入了很多部署和支持变量。

2

SOA(电信)(IMHO)似乎被认为是一条生命线,SOA支持的系统允许您采用传统和根深蒂固的技术,并将它们呈现为一致的受控API,可让您的业务用户不需要重新构建公司中的所有内容就可以开发新的和以前未曾想过的创意。

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

WSDL最终是Corba-that-works。

2

WSDL和SOAP通常遭受CORBA和DCOM所犯的同样的问题:契约版本化是一场噩梦。在完全控制所有客户端和服务器的加速情况下,这并不是一个问题,但是当您开始联合系统时会变得很难看,而当您进入企业间时更是如此。

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

即使依靠SOAP作为交通工具也变得很难看。您不仅需要使用相反的Web服务来适应双向交互,您仍然需要解决版本控制问题。通常,SOAP方法会对围绕“blob”定义的琐碎包装进行反驳(例如,单独的XML模式)。

有答案,但他们从来没有简单。 Best practices for Web services versioning讨论了其中的几个。

但SOA并不意味着任何异步。这只是实施SOA的智能方式。 SOA是关于松耦合的。 SOA的EDA子集是关于解耦的,这更进一步。

0

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

对于可能改变的产品也不错,您可以更换它的一小部分。

最后,你会有很多乐高积木,你会加入到一起。