XA簡單介紹
XA是由X / Open發(fā)布的規(guī)范探膊,用于DTP(分布式事務(wù)處理)。
DTP分布式模型主要含有
- AP: 應(yīng)用程序
- TM: 事務(wù)管理器
- RM: 資源管理器(如數(shù)據(jù)庫)
- CRM: 通訊資源管理器(如消息隊(duì)列)
XA主要就是TM和RM之間的通訊橋梁待榔。
2PC
兩階段提交協(xié)議(The two-phase commit protocol逞壁,2PC)是 XA 用于在全局事務(wù)中協(xié)調(diào)多個資源的機(jī)制。
2PC將事務(wù)的提交過程分為兩個階段來進(jìn)行處理
-
準(zhǔn)備階段
- TM向所有RM發(fā)送事務(wù)內(nèi)容锐锣,詢問是否可以提交事務(wù)腌闯,并等待所有RM答復(fù)。
- RMs執(zhí)行事務(wù)操作雕憔,將操作信息記入事務(wù)日志中,但不提交事務(wù)
- 如RM執(zhí)行成功姿骏,給TM反饋YES;如執(zhí)行失敗斤彼,給TM反饋NO分瘦。
-
提交階段
- 所有RM均反饋YES時,即提交事務(wù)
- 任何一個RM反饋NO時琉苇,即中斷事務(wù)并進(jìn)行回滾嘲玫。
3PC
3PC是2PC的改進(jìn)版,其將二階段提交協(xié)議的“準(zhǔn)備階段”一份為二并扇,形成了cancommit去团,precommit,docommit三個階段。
-
CanCommit階段
- TM向RMs發(fā)送CanCommit請求土陪。詢問是否可以執(zhí)行事務(wù)提交操作昼汗。然后開始等待RM的響應(yīng)。
- RMs接到CanCommit請求之后旺坠,正常情況下乔遮,如果可以順利執(zhí)行事務(wù)扮超,則返回Yes,并進(jìn)入預(yù)備狀態(tài)取刃。否則反饋No
-
PreCommit階段
- 正常情況:所有RM均反饋YES時,即提交事務(wù)
- TM向RM發(fā)送PreCommit請求出刷,并進(jìn)入Prepared階段璧疗。
- RM接收到PreCommit請求后,會執(zhí)行事務(wù)操作馁龟,并將undo和redo信息記錄到事務(wù)日志中崩侠。
- 如果RM成功的執(zhí)行了事務(wù)操作,則返回ACK響應(yīng)坷檩,同時開始等待最終指令却音。
- 有任何一個RM向TM發(fā)送了No響應(yīng),或者等待超時之后矢炼,TM都沒有接到RM的響應(yīng)系瓢,那么就執(zhí)行事務(wù)的中斷。
- TM向所有RM發(fā)送abort請求句灌。
- RM收到來自TM的abort請求之后(或超時之后夷陋,仍未收到TM的請求),執(zhí)行事務(wù)的中斷胰锌。
- 正常情況:所有RM均反饋YES時,即提交事務(wù)
-
doCommit階段
- 正常
- TM接收到RM發(fā)送的ACK響應(yīng)骗绕,那么他將從預(yù)提交狀態(tài)進(jìn)入到提交狀態(tài)。并向所有RM發(fā)送doCommit請求资昧。
- RM接收到doCommit請求之后酬土,執(zhí)行正式的事務(wù)提交。并在完成事務(wù)提交之后釋放所有事務(wù)資源格带。
- 事務(wù)提交完之后诺凡,向TM發(fā)送Ack響應(yīng)。
- TM接收到所有RM的ack響應(yīng)之后践惑,完成事務(wù)腹泌。
- TM沒有接收到RM發(fā)送的ACK響應(yīng)(可能是TM發(fā)送的不是ACK響應(yīng),也可能響應(yīng)超時)尔觉,那么就會執(zhí)行中斷事務(wù)凉袱。
- TM向所有RM發(fā)送abort請求。
- RM接收到abort請求之后,利用其在階段二記錄的undo信息來執(zhí)行事務(wù)的回滾操作专甩,并在完成回滾之后釋放所有的事務(wù)資源钟鸵。
- RM完成事務(wù)回滾之后,向TM發(fā)送ACK消息涤躲。
- TM接收到RM反饋的ACK消息之后棺耍,執(zhí)行事務(wù)的中斷。
- 正常
小結(jié)
2PC的主要問題有三點(diǎn):
- 兩個階段事務(wù)處于阻塞狀態(tài)
- TM出現(xiàn)問題种樱,一直修復(fù)不了的話蒙袍,RM會一直阻塞
- 由于網(wǎng)絡(luò)問題或者TM發(fā)送一半掛了 ,只有部分RM收到commmit請求嫩挤,會導(dǎo)致數(shù)據(jù)的不一致
3PC在二害幅、三階段引入超時自動提交事務(wù)的機(jī)制和RM完成事務(wù)后釋放資源,有效的防止2PC的前兩種情況岂昭。
3PC數(shù)據(jù)一致性的問題還是存在以现,doCommit時,TM發(fā)送abort請求约啊,但由于網(wǎng)絡(luò)問題邑遏,部分RM沒有接受到。這樣就會出現(xiàn)部分RM執(zhí)行commit,另外一部分執(zhí)行abort,從而導(dǎo)致數(shù)據(jù)不一致的問題恰矩。
refer
https://www.infoq.cn/article/xa-transactions-handle/
https://blog.csdn.net/u013679744/article/details/79188945