分布式事務(2)---強一致性分布式事務解決方案
分布式事務(3)---強一致性分布式事務Atomikos實戰
分布式事務(4)---最終一致性方案之TCC
強一致事務要求在任意時刻各節點數據在任意時刻都是一致的。強一致事務的解決方案主要有DTP模型(全局事務模型)、2PC、3PC。
強一致性數據一致性較高,但是存在性能問題,在分布式事務未完全提交和回滾之前,查詢不到新的數據,犧牲了可用性,實現也比較復雜,不適合高并發場景。
基于DTP模型典型的解決方案是分布式通信協議的XA規范。Mysql Connector在5.x開始提供對XA規范的支持。XA事務支持不同的數據庫,但是需要其都支持XA規范。
1.DTP模型
DTP中幾個重要的概念,全局事務,分支事務
全局事務:由事務管理器管理的事務,能夠一次操作多個資源管理器
分支事務:每個資源管理器中的獨立事務

AP:應用程序
RM:資源管理器,可以理解為數據庫
TM:事務管理器,負責協調和管理DTP模型中的事務,提供應用程序編程接口,同時管理資源管理器
2.2PC
2PC模型是指兩階段提交模型,它將事務流程分為prepare階段和commit階段。
prepare階段:事務管理器給參與全局事務的資源管理器發送prepare消息,資源管理器要么返回失敗,要么在本地執行本地事務,將事務寫入本地的redolog文件和undolog文件,此時事務并沒有真正提交。
commit階段:事務管理器收到所有參與事務的資源管理器返回的消息來決定是進行全局事務提交或者回滾

2PC存在的問題
1.同步阻塞:事務執行過程,參與事務的節點都會對其占用的公共資源枷鎖,導致其他訪問受阻
2.單點故障:事務管理器發生故障,會導致資源一致阻塞
3.數據不一致:如果在commit階段由于網絡或部分資源管理器發生故障,會導致部分資源管理器未收到commit消息,導致數據不一致
4.無法解決的問題:如果如果commit階段,事務管理器發出commit消息后宕機,并且唯一收到commit消息的資源管理器也宕機了,則無法確認事務是否已經提交
3.3PC
3PC是三階段提交是2PC的改進版本,它將prepare分成了兩個階段多出了一個canCommit階段,是否可以提交,再執行doCommit/doRollback。
3PC模型中資源管理器無法收到來自事務管理器發出的消息,資源管理會自己執行事務的提交,不會一致持有造成阻塞,但是這也會導致數據的不一致。
以上主要的問題還是會存在數據的不一致,如果解決這個問題。我們可以記錄日志,每個分支事務執行流程中的狀態信息。以供發生異常情況之后可以恢復事務。比如Atomikos框架。
4.JTA規范
JTA(java transaction API)將XA規范中的DTP模型交互的抽象出來定義的接口。主要有:
javax.transaction.TransactionManager 事務管理器
javax.transaction.UserTransaction 聲明一個分布式事務
javax.transaction.TransactionSynchronizationRegistry 事務注冊
javax.transaction.xa.XAResource 資源管理器提供給事務管理器操作
javax.transaction.xa.Xid 事務ID

浙公網安備 33010602011771號