Wcf 何时使用SOA(面向服务的体系结构)

Wcf 何时使用SOA(面向服务的体系结构),wcf,web-services,architecture,soap,soa,Wcf,Web Services,Architecture,Soap,Soa,我最近与我们的一位架构师进行了一次对话,他总结了他对SOA的使用:“我们使用服务的唯一时间是在我们需要异步操作时,否则我们将使用go direct to data store” 我考虑过这句话,它看起来很符合逻辑,因为服务在发布-订阅模型中工作得很好,但我想知道您应该考虑使用SOA的其他场景是什么?另一个场景可能是集成场景,您需要许多独立的组件或系统,我们向客户公开服务,因为他们不应该直接连接到数据源 我们向自己公开服务,因为使用WCF可以更容易地在不同的技术上传播它们 我们公开服务是因为同一数

我最近与我们的一位架构师进行了一次对话,他总结了他对SOA的使用:“我们使用服务的唯一时间是在我们需要异步操作时,否则我们将使用go direct to data store”


我考虑过这句话,它看起来很符合逻辑,因为服务在发布-订阅模型中工作得很好,但我想知道您应该考虑使用SOA的其他场景是什么?

另一个场景可能是集成场景,您需要许多独立的组件或系统,我们向客户公开服务,因为他们不应该直接连接到数据源

我们向自己公开服务,因为使用WCF可以更容易地在不同的技术上传播它们

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


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

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

集成访问相同资源的不同技术;通过这些不同的技术实现一定程度的事务隔离;将一个业务逻辑写在一个地方(这样在更改此逻辑时就不会有太多麻烦了)

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

换句话说,如果你的数据库是PergRes,但是你有java、perl、python和C++的代码,你可以编写存储过程并让每个编程语言调用这些程序。如果您使用的是一个没有存储过程的数据库,或者您希望具有切换这些过程的功能——或者您只想在端口80上运行,那么您可以将SQL调用封装在一个面向服务的层(比如websphere)中,现在任何人都可以调用它——此外,您还可以放置身份验证和授权逻辑(连接到LDAP,无论什么)在SOA层中

您还可以使用该SOA层,比如说,构建一个逻辑例程,以“填充”角落中的旧COBOL框,该框用于管理发票或为客户创建报表

因此,如果您有许多希望互连的遗留系统,比如销售系统、仓储系统和订单预测系统,那么SOA可能是实现这一目标的一种方法。(您还可以使用“服务总线”创建事件驱动系统,作为协调更改的更好方法。)


有许多场景可以让您从使用服务中受益。其中一些场景已经由行业大师(如SOA fame的Thomas Erl)编写

我想说的是,你想要寻找:

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

您的同事保持谨慎是正确的。随着web服务的采用,引入了许多部署和支持变量。

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

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


WSDL最终是可以工作的Corba。

WSDL和SOAP通常会遇到Corba和DCOM所遇到的相同问题:合同版本控制是一场噩梦。在完全控制所有客户机和服务器的Degenerate案例中,这并不是一个大问题,但当您开始联合系统时,它会变得丑陋,当您进入inter-enterpri时更是如此嗯

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

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

答案是有的,但从来都不简单。讨论了其中的几个


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

我将在一个系统中使用SOA,该系统将在组织内部以及其他组织中扩展

对于那些可以改变的产品,你也可以更换它的一小部分


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

还有另一个相关思想流派,称为SOAD(面向服务的应用程序设计),因为系统的每个组件都是一个服务。这是为了利用它们所构建的环境(EJB、WCF)提供的好处也就是说,你可以得到很多免费的管道

更多的理由