分布式事務(2)---強一致性分布式事務解決方案


 分布式事務(1)-理論基礎

分布式事務(3)---強一致性分布式事務Atomikos實戰

分布式事務(4)---最終一致性方案之TCC

 

強一致事務要求在任意時刻各節點數據在任意時刻都是一致的。強一致事務的解決方案主要有DTP模型(全局事務模型)、2PC3PC

強一致性數據一致性較高,但是存在性能問題,在分布式事務未完全提交和回滾之前,查詢不到新的數據,犧牲了可用性,實現也比較復雜,不適合高並發場景。

基於DTP模型典型的解決方案是分布式通信協議的XA規范。Mysql Connector5.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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM