面向服务架构中的事务管理

4

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

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

一种实现方法是为每个服务实现“补偿”逻辑,并在流程/上一个服务中出现问题时调用它。

是否有更好的方法或标准来完成相同的工作,例如将事务上下文取出并实现类似于两阶段提交的东西?

2个回答

2
这取决于您所访问的服务。在某些服务中,您将无法执行补偿操作,而在其他服务中,您将无法控制事务,在另一些服务中则完全没有替代方案。
补偿处理程序和2阶段提交(XA事务)都是管理事务的有效机制。
考虑您正在接口化的服务以及它们提供的支持类型。例如,如果您有大量的Web服务,则可能没有XA所提供的事务控制,但它们可能具有撤消操作的机制。
在完美的世界中,您将拥有2阶段提交,这将减少所需的补偿,但接口就像人与人之间的交流一样,会因情况而异,因此并不存在一个完美的解决方案。
在设计接口时,请考虑事务控制和补偿恢复作为接口设计的一部分,这将使您成为一个有用的接口的创造者并受到赞扬(或至少不会受到批评)。

0

您可以使用在WS-BPEL 2.0规范中定义的故障处理程序和补偿处理程序(这是一种描述和编排Web服务之间交互的标准方式),以标准化的方式将业务逻辑与补偿逻辑分离。

  • 链接到BPEL规范中的错误处理
  • 博客文章介绍如何编写BPEL中的补偿处理程序

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接