X/Open DTP模型与XA协议的学习笔记
最近的任務(wù)是里了解XA協(xié)議。要了解XA協(xié)議,必須先了解X/Open DTP模型,稍微總結(jié)一下:
X/Open DTP(Distributed Transaction Process)是一個(gè)分布式事務(wù)模型。這個(gè)模型主要使用了兩段提交(2PC - Two-Phase-Commit)來保證分布式事務(wù)的完整性。在這個(gè)模型里面,有三個(gè)角色:
- AP: Application,應(yīng)用程序。也就是業(yè)務(wù)層。哪些操作屬于一個(gè)事務(wù),就是AP定義的。
- TM: Transaction Manager,事務(wù)管理器。接收AP的事務(wù)請(qǐng)求,對(duì)全局事務(wù)進(jìn)行管理,管理事務(wù)分支狀態(tài),協(xié)調(diào)RM的處理,通知RM哪些操作屬于哪些全局事務(wù)以及事務(wù)分支等等。這個(gè)也是整個(gè)事務(wù)調(diào)度模型的核心部分。
- RM:Resource Manager,資源管理器。一般是數(shù)據(jù)庫,也可以是其他的資源管理器,如消息隊(duì)列(如JMS數(shù)據(jù)源),文件系統(tǒng)等。
三者之間的關(guān)系如圖:
一般的編程方式是這樣的:
1. 配置TM,通過TM或者RM提供的方式,把RM注冊(cè)到TM。可以理解為給TM注冊(cè)RM作為數(shù)據(jù)源。一個(gè)TM可以注冊(cè)多個(gè)RM。
1. AP從TM獲取資源管理器的代理(例如:使用JTA接口,從TM管理的上下文中,獲取出這個(gè)TM所管理的RM的JDBC連接或JMS連接)
2. AP向TM發(fā)起一個(gè)全局事務(wù)。這時(shí),TM會(huì)通知各個(gè)RM。XID(全局事務(wù)ID)會(huì)通知到各個(gè)RM。
3. AP通過1中獲取的連接,直接操作RM進(jìn)行業(yè)務(wù)操作。這時(shí),AP在每次操作時(shí)把XID(包括所屬分支的信息)傳遞給RM,RM正是通過這個(gè)XID與2步中的XID關(guān)聯(lián)來知道操作和事務(wù)的關(guān)系的。
4. AP結(jié)束全局事務(wù)。此時(shí)TM會(huì)通知RM全局事務(wù)結(jié)束。
5. 開始二段提交,也就是prepare - commit的過程。
?
XA協(xié)議(XA Specification),指的是TM和RM之間的接口。
其實(shí)這個(gè)協(xié)議只是定義了xa_和ax_系列的函數(shù)原型以及功能描述、約束和實(shí)施規(guī)范等。至于RM和TM之間通過什么協(xié)議通信,則沒有提及。
目前知名的數(shù)據(jù)庫,如Oracle, DB2等,都是實(shí)現(xiàn)了XA接口的,都可以作為RM。Tuxedo、TXseries等事務(wù)中間件可以通過XA協(xié)議跟這些數(shù)據(jù)源進(jìn)行對(duì)接。
Tuxedo使用TMS(開關(guān)文件)進(jìn)行對(duì)各個(gè)RM的注冊(cè)。TMS文件生成通過一個(gè)類似編譯鏈接的方式完成。(這點(diǎn)我有點(diǎn)不是十分確定。如有錯(cuò)誤請(qǐng)各位糾正)。Tuxedo分為客戶端和服務(wù)端程序。按照我的理解,客戶端就是AP,服務(wù)端是TM
JTA(Java Transaction API)是符合X/Open DTP的一個(gè)編程模型,事務(wù)管理和資源管理器支架也是用了XA協(xié)議。
WebSphere本身也實(shí)現(xiàn)了JTA接口,其中TM和RM之間也是使用XA協(xié)議和二段提交。
WebSphere也可以通過XMLlink/XMLlink Wrapper和Tuxedo實(shí)現(xiàn)對(duì)接。
WebLogic可以通過WTC(WebLogic Tuxedo Connector)和Tuxedo進(jìn)行對(duì)接。
?
轉(zhuǎn)載于:https://www.cnblogs.com/gnodev/p/3817323.html
總結(jié)
以上是生活随笔為你收集整理的X/Open DTP模型与XA协议的学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下python安装Nump
- 下一篇: hibernate批量删除和更新数据