SOA 中的事务管理

Posted

技术标签:

【中文标题】SOA 中的事务管理【英文标题】:Transaction Management in SOA 【发布时间】:2012-04-28 13:32:24 【问题描述】:

SOA 服务应该是自包含的服务,但实际上我们需要编排这些服务来执行某些业务/流程。

现在,为了使流程和数据保持一致,我们需要确保所有服务都已执行或没有执行。

一种实现方式是为每个服务实现“补偿”逻辑,并在进程/之前的服务出现问题时调用它。

有没有更好的方法或一些标准来做同样的事情,例如,取出事务上下文并实现类似 2 阶段提交的东西?

【问题讨论】:

【参考方案1】:

它确实取决于您正在访问的服务。在某些情况下,您将无法进行补偿,而在另一些情况下,您将无法控制交易,而在其他情况下,您将别无选择。

补偿处理程序和 2 阶段提交(XA 事务)都是管理事务的有效机制。

考虑您要连接的服务,以及它们提供的支持类型。例如,如果您有大量 Web 服务,您可能没有 XA 提供给您的事务控制,但它们可能具有反转操作的机制。

在一个完美的世界中,您将有 2 阶段提交,这将减少所需的补偿,但接口就是接口,就像人与人之间的沟通一样,沟通会有所不同,没有一个完美的解决方案。

在设计界面时,将事务控制和补偿恢复作为界面设计的一部分加以考虑,您会因创建有用的界面而受到表扬(或至少不会受到批评)。

【讨论】:

【参考方案2】:

您可以使用 WS-BPEL 2.0 规范中定义的故障处理程序和补偿处理程序(该标准提供了一种描述和协调 Web 服务之间交互的方法),因此它以标准方式将业务逻辑与补偿逻辑分开.

Link BPEL 规范中的错误处理 Blog post 关于如何在 BPEL 中编写补偿处理程序

【讨论】:

以上是关于SOA 中的事务管理的主要内容,如果未能解决你的问题,请参考以下文章

如何为 SOA 有效管理/托管许多 WCF 服务

工作流业务流程管理和SOA

简述我的SOA服务治理

起始授权机构(SOA)

视频管理软件技术分析报告--基于SOA的VMS软件架构设计

[转]SOA架构设计经验分享—架构职责数据一致性