XA是一個分佈式事務協議,由Tuxedo提出。XA中大體分爲兩部分:事務管理器和本地資源管理器。其中本地資源管理器每每由數據庫實現,好比Oracle、DB2這些商業數據庫都實現了XA接口,而事務管理器做爲全局的調度者,負責各個本地資源的提交和回滾。XA實現分佈式事務的原理以下:java
做爲java平臺上事務規範JTA(Java Transaction API)也定義了對XA事務的支持,實際上,JTA是基於XA架構上建模的,在JTA 中,事務管理器抽象爲javax.transaction.TransactionManager接口,並經過底層事務服務(即JTS)實現。像不少其餘的java規範同樣,JTA僅僅定義了接口,具體的實現則是由供應商(如J2EE廠商)負責提供,目前JTA的實現主要由如下幾種:git
1.J2EE容器所提供的JTA實現(JBoss)
2.獨立的JTA實現:如JOTM,Atomikos.這些實現能夠應用在那些不使用J2EE應用服務器的環境裏用以提供分佈事事務保證。如Tomcat,Jetty以及普通的java應用。github
所謂的兩個階段是指:第一階段:準備階段(投票階段)和第二階段:提交階段(執行階段)。數據庫
XA通常由兩階段完成,稱爲two-phase commit(2PC)。api
階段一爲準備階段,即全部的參與者準備執行事務並鎖住須要的資源。參與者ready時,向transaction manager彙報本身已經準備好。服務器
階段二爲提交階段。當transaction manager確認全部參與者都ready後,向全部參與者發送commit命令。架構
以下圖所示:框架
XA的性能問題分佈式
XA的性能很低。一個數據庫的事務和多個數據庫間的XA事務性能對比可發現,性能差10倍左右。所以要儘可能避免XA事務,例如能夠將數據寫入本地,用高性能的消息系統分發數據。或使用數據庫複製等技術。性能
只有在這些都沒法實現,且性能不是瓶頸時才應該使用XA。
分佈式事物問題,在互聯網公司比較常見,例如「」分佈式事物解決方案 可使用全局事物2pc(兩段提交協議)、3pc(三段提交協議),消息中間件、tcc、gts、提供回滾接口、分佈式數據庫
2PC和3PC區別:https://blog.csdn.net/secretx/article/details/53322989
LCN 核心採用3PC+TCC補償機制
LCN分佈式事務框架v4.0 https://www.txlcn.org
"LCN並不生產事務,LCN只是本地事務的搬運工"
兼容SpringCloud、Dubbo
使用簡單,低依賴,代碼徹底開源
基於切面的強一致性事務框架
高可用,模塊能夠依賴Dubbo或SpringCloud的集羣方式作集羣化,TxManager也能夠作集羣化
支持本地事務和分佈式事務共存
事務補償機制,服務故障或掛機再啓動時可恢復事務
參考網站 https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86
lcn框架原理
建立事務組 是指在事務發起方開始執行業務代碼以前先調用TxManager建立事務組對象,而後拿到事務標示GroupId的過程。
添加事務組 添加事務組是指參與方在執行完業務方法之後,將該模塊的事務信息添加通知給TxManager的操做。
關閉事務組 是指在發起方執行完業務代碼之後,將發起方執行結果狀態通知給TxManager的動做。當執行完關閉事務組的方法之後,TxManager將根據事務組信息來通知相應的參與模塊提交或回滾事務。