2010-04-01 63 views
5

分布式事务何时在面向服务的体系结构中有意义?SOA和分布式事务

+1

本文指出SOA和分布式事务是一种反模式 - http://arnon.me/2010/09/soa-antipattern-transactional-integration/。它的底部有一个“已知例外”部分,其中谈到了“封闭系统”,但随后表明这可能是一个坏主意。 – Bermo 2010-10-08 09:29:28

回答

2

分布式事务在SOA环境中经常使用。如果您有一个组合服务调用多个服务,则应将底层服务调用作为单个事务处理。业务流程应该允许他们的步骤回滚。如果底层资源允许,您可以使用两阶段提交,但在很多情况下这是不可能的。在这些情况下,补偿操作应该在失败步骤之前调用的服务/资源上完成。换句话说,以相反的顺序撤销成功的步骤。
虚例如:电信公司规定与6个服务客户一个新的VoIP产品来电:

  1. 查询库存查询客户有合适的设备
  2. 配置客户设备通过中介
  3. 更新库存与新配置
  4. 设置等级引擎来为客户计数CDR's
  5. 设置计费软件以向客​​户收取正确的价格计划
  6. 更新CRM系统与配置过程的结果

以上6个步骤应该是一个事务的部分。例如。如果清单更新失败,您(可能)需要撤消客户设备配置。

1

当它们有意义时,不是真的。交易(无论是否分发)是为了保证一致性,而不是随意选择而实施。另一种方法是实施一个核对流程,以确保最终的一致性。

在典型的银行示例中(账户A的资金不计入账户B),事务一致性非常重要。在一些库存系统中(检查库存,减少库存,向顾客出售),库存水平大致准确可能是可以接受的,而不是保证。在这种情况下,忽略失败(减少库存,销售未能完成)可以通过稍后协调来处理。