MySQL事務學習 --> 分散式交易

來源:互聯網
上載者:User

分散式交易

Innodb儲存引擎支援XA事務,通過XA事務可以支援分散式交易的實現。分散式交易指的是允許多個獨立的事務資源(transac tional resources)參與一個全域的事務中。事務資源通常是關係型資料庫系統,也可以是其它類型的資源。

 

全域事務要求在其中所有參與的事務要麼全部提交,要麼全部復原,這對於事務原有的ACID要求又有了提高。另外,在使用分散式交易時候,InnoDB儲存引擎的交易隔離等級必須設定成serialiable。

 

XA事務允許不同資料庫之間的分散式交易,如:一台伺服器是mysql資料庫,一台是Oracle的,又有可能還有一台是sqlserver的,只要參與全域事務中的每個節點都支援XA事務。分散式交易可能在銀行系統的轉帳中比較常見,如一個使用者需要從上海轉1000元到北京的一個使用者帳號上面:

# bank ofshanghai:

Updateuser_account set money=money – 10000 where user=’xiaozhang’;

# bank ofBeijing:

Updateuser_account set money= money + 10000 where user=’xiaoli’;

像這種情況一定需要分布式的事務,要不都提交,要麼都復原。在任何一個節點出問題都會造成嚴重的結果:1 xiaozhang的帳號被扣款,但是xiaoli沒有收到錢;2 xiaozhang的帳號沒有被扣款,但是xiaoli收到錢了。

 

分散式交易是由一個或者多個Resource Managerd,一個交易管理員Transaction Manager以及一個應用程式 Application Program組成。

資源管理員:提供訪問事務資源的方法,通常一個資料庫就是一個資源管理員。

交易管理員:協調參與全域事務中的各個事務。需要和參與全域事務中的資源管理員進行通訊。

應用程式:定義事務的邊界,指定全域事務中的操作。

在mysql中的分散式交易中,資源管理員就是mysql資料庫,交易管理員為串連到mysql伺服器的用戶端。如所示:

 

 

分散式交易使用兩段式提交(two-phase commit)的方式。在第一個階段,所有參與全域事務的節點都開始準備,告訴交易管理員它們準備好提交了。第二個階段,交易管理員告訴資源管理員執行rollback或者commit,如果任何一個節點顯示不能commit,那麼所有的節點就得全部rollback。

當前的java的jta java transaction API可以很好的支援mysql的分散式交易,可以仔細參考jta手冊。下面的例子顯示了如何使用jta支援調用mysql分散式交易。

推薦閱讀:

InnoDB儲存引擎的啟動、關閉與恢複

MySQL InnoDB獨立資料表空間的配置

MySQL Server 層和 InnoDB 引擎層 體繫結構圖

InnoDB 死結案例解析

MySQL Innodb獨立資料表空間的配置

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.