文章目錄
- 一、簡介
- (1)問題
- 1)什麼是 XA?
- 二、限制(存在問題)
- (1)非高可用
- (2)事務協調者所在的應用伺服器不再是無狀态
- (3)無法檢測死鎖
- (4)容錯
一、簡介
分布式事務概念:
- 資料庫内部的分布式事務
某些分布式資料庫(例如那些标配支援複制和分區的資料庫)支援跨資料庫節點的内部事務。
例如,
和
VoltDB
MySQL Cluster
的 NDB 存儲引擎就是支援這樣的内部分布式事務
此時,所有參與節點都運作着相同的資料庫軟體
- 異構分布式事務
在異構分布式事務中,存在兩種或兩種以上不同的參與者實作技術。
例如來自不同供應商的資料庫,甚至是非資料庫系統(如消息中間件)。
即使是完全不同的系統,跨系統的分布式事務也必須確定原子送出。
(1)問題
1)什麼是 XA?
X/Open XA(eXtended Architecture, XA)是異構環境下實施兩階段送出的一個工業标準。
XA 并不是一個網絡協定,而是一個與事務協調者進行通信的
C API
。
XA 是 DTP(Distributed Transaction Processing Reference Model)模型定義 TM 和 RM 之前通訊的接口規範。
Open Group定義了一套DTP分布式模型,主要含有:
- AP(Application Program, 應用程式):使用DTP分布式事務的程式
- TM(Transaction Manager, 事務管理器):負責協調和管理事務,事務管理器控制着全局事務,管理事務生命周期,并協調各個RM。全局事務是指分布式事務處理環境中,需要操作多個資料庫共同完成一個工作,這個工作即是一個全局事務。
- RM(Resource Manager, 資料總管):通常指資料庫,通過資料總管對該資料庫進行控制,資料總管控制着分支事務。
- CRM(通訊資料總管):通常指消息中間件
XA 接口函數由資料庫廠商提供。TM交易中間件用它來通知資料庫事務的開始、結束以及送出、復原等。
XA 模型如圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNwAjMyETM3IWZzEGM1ITNzYzX5EjN1UTMxIzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
二、限制(存在問題)
核心的事務協調者(TM)本身就是一種資料庫(存儲事務的投票結果)
限制如下:
(1)非高可用
如果事務協調者不支援資料複制,而是在單節點上運作,那麼它就是整個系統的單節點故障(因為它的故障導緻了很多應用阻塞在停頓事務所持有的鎖上)
現實情況是,有許多事務協調者的實作預設情況下非高可用,或者隻支援最基本的複制
(2)事務協調者所在的應用伺服器不再是無狀态
許多伺服器應用程式都傾向于無狀态模式,而所有的持有狀态都儲存在資料庫中,這樣應用伺服器可以輕松地添加或删除執行個體。
但是,當事務協調者就是應用伺服器的一部分時,部署方式就發生了根本的變化。
協調者的日志成為可靠系統的重要組成部分,它要求與資料庫本身一樣重要(需要協調者日志恢複那些有疑問的事務)。
(3)無法檢測死鎖
由于 XA 需要與各種資料系統保持相容,它最終其實是多系統可相容的最低标準。
它無法深入檢查不同系統之間的死鎖條件(因為這就将需要另一個标準化協定,使得多個系統交換事務所等待的鎖資訊)