關於XA分散式事務(weblogic中的XA概念)
在談到 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 規範的基礎是兩階段提交協議。 在第一階段,交易中介軟體請求所有相關資料庫準備提交(預提交)各自的事務分支,以確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,並給交易中介軟體一個同意提交的應答,此時資料庫將不能再在該事務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放(處於上鎖狀態)。如果由於某種原因資料庫無法提交屬於自己的事務分支,它將回滾自己的所有操作,釋放對共享資源上的鎖,並返回給交易中介軟體失敗應答。 在第二階段,交易中介軟體審查所有資料庫返回的預提交結果,如所有資料庫都可以提交,交易中介軟體將要求所有資料庫做正式提交,這樣該全域性事務被提交。而如果有任一資料庫預提交返回失敗,交易中介軟體將要求所有其它資料庫回滾其操作,這樣該全域性事務被回滾。
XA 與兩階段提交協議 通常情況下,交易中介軟體與資料庫透過 XA 介面規範,使用兩階段提交來完成一個全域性事務, XA 規範的基礎是兩階段提交協議。 在第一階段,交易中介軟體請求所有相關資料庫準備提交(預提交)各自的事務分支,以確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,並給交易中介軟體一個同意提交的應答,此時資料庫將不能再在該事務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放(處於上鎖狀態)。如果由於某種原因資料庫無法提交屬於自己的事務分支,它將回滾自己的所有操作,釋放對共享資源上的鎖,並返回給交易中介軟體失敗應答。 在第二階段,交易中介軟體審查所有資料庫返回的預提交結果,如所有資料庫都可以提交,交易中介軟體將要求所有資料庫做正式提交,這樣該全域性事務被提交。而如果有任一資料庫預提交返回失敗,交易中介軟體將要求所有其它資料庫回滾其操作,這樣該全域性事務被回滾。
以一個全域性事務為例, AP 首先通知交易中介軟體開始一個全域性事務,交易中介軟體透過 XA 介面函式通知資料庫開始事務,然後 AP 可以對資料庫管理的資源進行操作,資料庫系統記錄事務對本地資源的所有操作。操作完成後交易中介軟體透過 XA 介面函式通知資料庫操作完成。交易中介軟體負責記錄 AP 操作過哪些資料庫(事務分支)。 AP 根據情況通知交易中介軟體提交該全域性事務,交易中介軟體會透過 XA 介面函式要求各個資料庫做預提交,所有資料庫返回成功後要求各個資料庫做正式提交,此時一筆全域性事務結束。
XA 規範對應用來說,最大好處在於事務的完整性由交易中介軟體和資料庫透過 XA 介面控制, AP 只需要關注與資料庫的應用邏輯的處理,而無需過多關心事務的完整性,應用設計開發會簡化很多。
具體來說,如果沒有交易中介軟體,應用系統需要在程式內部直接通知資料庫開始、結束和提交事務,當出現異常情況時必須由專門的程式對資料庫進行反向操作才能完成回滾。如果是有很多事務分支的全域性事務,回滾時情況將變得異常複雜。而使用 XA 介面,則全域性事務的提交是由交易中介軟體控制,應用程式只需通知交易中介軟體提交或回滾事務,就可以控制整個事務(可能涉及多個異地的資料庫)的全部提交或回滾,應用程式完全不用考慮衝正邏輯。
在一個涉及多個資料庫的全域性事務中,為保證全域性事務的完整性,由交易中介軟體控制資料庫做兩階段提交是必要的。但典型的兩階段提交,對資料庫來說事務從開始到結束(提交或回滾)時間相對較長,在事務處理期間資料庫使用的資源(如邏輯日誌、各種鎖),直到事務結束時才會釋放。因此,使用典型的兩階段提交相對來說會佔用更多的資源,在網路條件不是很好,如低速網、網路顛簸頻繁,情況會更為嚴重。
當一個全域性事務只涉及一個資料庫時,有一種最佳化方式,即一階段提交。當 AP 通知交易中介軟體提交事務時,交易中介軟體直接要求資料庫提交事務,省去兩階段提交中的第一階段,可以縮短處理一個事務的時間,以提高事務處理的效率。作為兩階段提交的一種特例,與兩階段一樣,一階段提交也是標準的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/112417/viewspace-980596/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- XA式、非XA式Spring分散式事務的實現Spring分散式
- MySQL 中基於 XA 實現的分散式事務MySql分散式
- weblogic XA 事務配置問題Web
- 深度剖析分散式事務之 AT 與 XA 對比分散式
- MySQL資料庫分散式事務XA的實現原理分析MySql資料庫分散式
- ## 【分散式事務】面試官問我:MySQL中的XA事務崩潰瞭如何恢復??分散式面試MySql
- Spring分散式事務XA事務(兩段提交2PC)實現Spring分散式
- Spring的分散式事務實現(JTA+XA/2PC)Spring分散式
- mysql中的xaMySql
- 分散式事務(一)—分散式事務的概念分散式
- mysql的XA與innodb_support_xaMySql
- 關於分散式事務的理解分散式
- 一文教你迅速解決分散式事務 XA 一致性問題分散式
- 一文教你迅速解決分散式事務XA一致性問題分散式
- [譯] Spring 的分散式事務實現-使用和不使用XA — 第三部分Spring分散式
- [譯] Spring 的分散式事務實現 — 使用和不使用 XA — 第二部分Spring分散式
- [譯] Spring 的分散式事務實現 — 使用和不使用 XA — 第一部分Spring分散式
- 命令(XA ROLLBACK) 讓儲存叢集回滾GT 的事務分支
- 淺述Oracle分散式事務概念Oracle分散式
- 推薦:J2EE容器事務XA處理機制
- 分散式事務的概念和解決方案Seate分散式
- Mysql第十日字符集,XA事務,查詢快取MySql快取
- 使用FlexyPool度量你的XA事務連線池合適大小 - Vlad MihalceaFlex
- 基於可靠訊息方案的分散式事務(二):Java中的事務分散式Java
- Oracle XA Exception error codeOracleExceptionError
- 求助:(javax.transaction.xa.XAException: 關閉的連線))JavaException
- 從Google Spanner漫談分散式儲存與資料庫技術XAGo分散式資料庫
- 關於collecting狀態的分散式懸掛事務分散式
- Album++:分散式事務專輯-基礎概念分散式
- 比較微服務中的分散式事務模式微服務分散式模式
- 從一個線上問題分析binlog與內部XA事務提交過程
- 構建基於RocketMQ的分散式事務服務MQ分散式
- 事務使用中如何避免誤用分散式事務分散式
- 關於分散式計算的一些概念分散式
- 關於分散式事務帶來的問題及解決方案分散式
- 基於RocketMQ實現分散式事務MQ分散式
- 分散式事務(3)---RocketMQ實現分散式事務原理分散式MQ
- 分散式系統中的事務問題分散式