2010-04-01 99 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),事務一致性非常重要。在一些庫存系統中(檢查庫存,減少庫存,向顧客出售),庫存水平大致準確可能是可以接受的,而不是保證。在這種情況下,忽略失敗(減少庫存,銷售未能完成)可以通過稍後協調來處理。