什么是XA 事務


 

XA(eXtended Architecture)是指由X/Open 組織提出的分布式交易處理的規范。XA 是一個分布式事務協議,由Tuxedo 提出,所以分布式事務也稱為XA 事務XA 協議主要定義了事務管理器TM(Transaction Manager,協調者)和資源管理器RM(Resource Manager,參與者)之間的接口。其中,資源管理器往往由數據庫實現,如Oracle、DB2、MySQL,這些商業數據庫都實現了XA 接口,而事務管理器作為全局的調度者,負責各個本地資源的提交和回滾。XA 事務是基於兩階段提交(Two-phaseCommit,2PC)協議實現的,可以保證數據的強一致性,許多分布式關系型數據管理系統都采用此協議來完成分布式。階段一為准備階段,即所有的參與者准備執行事務並鎖住需要的資源。當參與者Ready時,向TM 匯報自己已經准備好。階段二為提交階段。當TM 確認所有參與者都Ready 后,向所有參與者發送COMMIT 命令。

XA 事務允許不同數據庫的分布式事務,只要參與在全局事務中的每個結點都支持XA 事務。Oracle、MySQL 和SQL Server 都支持XA 事務。

XA 事務由一個或多個資源管理器(RM)、一個事務管理器(TM)和一個應用程序(ApplicationProgram)組成。

資源管理器:提供訪問事務資源的方法。通常一個數據庫就是一個資源管理器。

事務管理器:協調參與全局事務中的各個事務。需要和參與全局事務的所有資源管理器進行通信。

應用程序:定義事務的邊界。

XA 事務的缺點是性能不好且無法滿足高並發場景。一個數據庫的事務和多個數據庫間的XA 事務性能會相差很多。因此,要盡量避免XA 事務,如可以將數據寫入本地,用高性能的消息系統分發數據,或使用數據庫復制等技術。只有在其他辦法都無法實現業務需求,且性能不是瓶頸時才使用XA。

 

 

 

mysql 單機

可以顯示執行一個xa事務

xa start 'xxxa';

sql ...

xa end;

上面語句完成xa事務定義

xa prepare 'xxxa'; --執行xa事務prepare 階段

xa recover; 可以顯示的所有xa prepare完成的xa事務。

xa commit 'xxxa'; --執行xa事務的commit階段。

xa prepare完成,代表所有修改操作已完成 包括buffer pool,redo,binary log都已寫完成。

xa commit階段會進行真正的提交,可以理解為給日志打上完成標記。

可以根據binlog解析來分析。 mysqlbinlog --binlogname |tail -500

單機的顯示xa事務可以理解為可以保證redo與binlog的原子性。

單機中的普通事務,在用戶發起commit之前,對事務中的語句會寫buffer pool與redo,但是不會寫binlog,是在用戶發出commit之后才會寫binlog。

單機中的普通事務,會使用引擎層內置的兩階段提交。

 

分布式集群中xa事務

可以理解為是根據單機顯示xa事務的來實現的。

xa prepare 做好所有的准備工作,commit之前會去驗證所有節點都已完成prepare,才會進入commit階段。這樣是為了保證事務節點間的原子性,在每個節點上要么都成功,要么都失敗。

 


免責聲明!

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



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