天天看點

【分布式事務】之 XA

文章目錄

  • ​​一、簡介​​
  • ​​(1)問題​​
  • ​​1)什麼是 XA?​​
  • ​​二、限制(存在問題)​​
  • ​​(1)非高可用​​
  • ​​(2)事務協調者所在的應用伺服器不再是無狀态​​
  • ​​(3)無法檢測死鎖​​
  • ​​(4)容錯​​

一、簡介

分布式事務概念:

  1. 資料庫内部的分布式事務

某些分布式資料庫(例如那些标配支援複制和分區的資料庫)支援跨資料庫節點的内部事務。

例如,​​

​VoltDB​

​​和​

​MySQL Cluster​

​​的 NDB 存儲引擎就是支援這樣的内部分布式事務

此時,所有參與節點都運作着相同的資料庫軟體

  1. 異構分布式事務

在異構分布式事務中,存在兩種或兩種以上不同的參與者實作技術。

例如來自不同供應商的資料庫,甚至是非資料庫系統(如消息中間件)。

即使是完全不同的系統,跨系統的分布式事務也必須確定原子送出。

(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 模型如圖:

【分布式事務】之 XA

二、限制(存在問題)

核心的事務協調者(TM)本身就是一種資料庫(存儲事務的投票結果)

限制如下:

(1)非高可用

如果事務協調者不支援資料複制,而是在單節點上運作,那麼它就是整個系統的單節點故障(因為它的故障導緻了很多應用阻塞在停頓事務所持有的鎖上)

現實情況是,有許多事務協調者的實作預設情況下非高可用,或者隻支援最基本的複制

(2)事務協調者所在的應用伺服器不再是無狀态

許多伺服器應用程式都傾向于無狀态模式,而所有的持有狀态都儲存在資料庫中,這樣應用伺服器可以輕松地添加或删除執行個體。

但是,當事務協調者就是應用伺服器的一部分時,部署方式就發生了根本的變化。

協調者的日志成為可靠系統的重要組成部分,它要求與資料庫本身一樣重要(需要協調者日志恢複那些有疑問的事務)。

(3)無法檢測死鎖

由于 XA 需要與各種資料系統保持相容,它最終其實是多系統可相容的最低标準。

它無法深入檢查不同系統之間的死鎖條件(因為這就将需要另一個标準化協定,使得多個系統交換事務所等待的鎖資訊)

(4)容錯