解讀XA規範

2021-06-05 13:26:30 字數 1954 閱讀 8429

在談到xa規範之前,必須首先了解分布式事務處理(distributed transaction processing,dtp)的概念。transaction,即事務,又稱之為交易,指乙個程式或程式段,在乙個或多個資源如資料庫或檔案上為完成某 些功能的執行過程的集合。

分布式事務處理是指乙個事務可能涉及多個資料庫操作,分布式事務處理的關鍵是必須有一種方法可以知道事務在任何地方所做的所有動作,提交或回滾事務的決定必須產生統一的結果(全部提交或全部回滾)。

x/open組織(即現在的open group)定義了分布式事務處理模型。x/open dtp模型(1994)包括應用程式(ap)、事務管理器(tm)、資源管理器(rm)、通訊資源管理器(crm)四部分。一般,常見的事務管理器 (tm)是交易中介軟體,常見的資源管理器(rm)是資料庫,常見的通訊資源管理器(crm)是訊息中介軟體。為表述方便起見,在本文中直接以其常見表現形式 進行描述。

通常把乙個資料庫內部的事務處理,如對多個表的操作,作為本地事務看待。資料庫的事務處理物件是本地事務,而分布式事務處理的物件是全域性事務。

所謂全域性事務,是指分布式事務處理環境中,多個資料庫可能需要共同完成乙個工作,這個工作即是乙個全域性事務,例如,乙個事務中可能更新幾個不同的資料 庫。對資料庫的操作發生在系統的各處但必須全部被提交或回滾。此時乙個資料庫對自己內部所做操作的提交不僅依賴本身操作是否成功,還要依賴與全域性事務相關 的其它資料庫的操作是否成功,如果任一資料庫的任一操作失敗,則參與此事務的所有資料庫所做的所有操作都必須回滾。

一般情況下,某一資料庫無法知道其它資料庫在做什麼,因此,在乙個dtp環境中,交易中介軟體是必需的,由它通知和協調相關資料庫的提交或回滾。而乙個資料庫只將其自己所做的操作(可恢復)影射到全域性事務中。

xa就是x/open dtp定義的交易中介軟體與資料庫之間的介面規範(即介面函式),交易中介軟體用它來通知資料庫事務的開始、結束以及提交、回滾等。xa介面函式由資料庫廠商提供。

xa與兩階段提交協議

通常情況下,交易中介軟體與資料庫通過xa 介面規範,使用兩階段提交來完成乙個全域性事務,xa規範的基礎是兩階段提交協議。

在第一階段,交易中介軟體請求所有相關資料庫準備提交(預提交)各自的事務分支,以確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預 提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,並給交易中介軟體乙個同意提交的應答,此時資料庫將不能再在該事 務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放(處於上鎖狀態)。如果由於某種原因資料庫無法提交屬於自己的 事務分支,它將回滾自己的所有操作,釋放對共享資源上的鎖,並返回給交易中介軟體失敗應答。

在第二階段,交易中介軟體審查所有資料庫返回的預提交結果,如所有資料庫都可以提交,交易中介軟體將要求所有資料庫做正式提交,這樣該全域性事務被提交。而如果有任一資料庫預提交返回失敗,交易中介軟體將要求所有其它資料庫回滾其操作,這樣該全域性事務被回滾。

以乙個全域性事務為例,ap首先通知交易中介軟體開始乙個全域性事務,交易中介軟體通過xa介面函式通知資料庫開始事務,然後ap可以對資料庫管理的資源進行操 作,資料庫系統記錄事務對本地資源的所有操作。操作完成後交易中介軟體通過xa介面函式通知資料庫操作完成。交易中介軟體負責記錄ap操作過哪些資料庫(事務 分支)。ap根據情況通知交易中介軟體提交該全域性事務,交易中介軟體會通過xa介面函式要求各個資料庫做預提交,所有資料庫返回成功後要求各個資料庫做正式提 交,此時一筆全域性事務結束。

xa規範對應用來說,最大好處在於事務的完整性由交易中介軟體和資料庫通過xa介面控制,ap只需要關注與資料庫的應用邏輯的處理,而無需過多關心事務的完整性,應用設計開發會簡化很多。

具體來說,如果沒有交易中介軟體,應用系統需要在程式內部直接通知資料庫開始、結束和提交事務,當出現異常情況時必須由專門的程式對資料庫進行反向操作才 能完成回滾。如果是有很多事務分支的全域性事務,回滾時情況將變得異常複雜。而使用xa介面,則全域性事務的提交是由交易中介軟體控制,應用程式只需通知交易中 間件提交或回滾事務,就可以控制整個事務(可能涉及多個異地的資料庫)的全部提交或回滾,應用程式完全不用考慮沖正邏輯。

XA事務規範

在談到xa規範之前,必須首先了解分布式事務處理 distributed transaction processing,dtp 的概念。transaction,即事務,又稱之為交易,指乙個程式或程式段,在乙個或多個資源如資料庫或檔案上為完成某些功能的執行過程的集合。分布式事務處理是指乙個事務可能涉及多...

MySQL如何實現 XA 規範

一 前言 我們提交乙個事務,裡面有多條sql,mysql是如何管理事務的呢?是如何做到其中一條sql執行失敗,全部回滾的呢?二 xa事務 xa協議是基於二階段提交的乙個具體實現,也是分為prepare和commit兩個階段。prepare階段 tm 事務協調者 向所有rm 資源管理者 傳送prepa...

詳細解讀 JMS 規範

適合誰看 想進一步學習面向訊息中介軟體的 coder 能給你帶來什麼價值 你能知道為什麼需要 jms 你能知道 jms 規範的詳細內容,包括圍繞處理訊息的各種產品概念,訊息的完整構成以及訊息傳遞的三種模式 最後基於 jms api 實現簡單的例項來說明 jms 規範。有什麼後續 本場 chat 是了...