MySQL 5.7 XA 改進

關於MySQL XA 事務

MySQL XA 事務通常用於分佈式事務處理當中。比如在分庫分表的場景下,當遇到一個用戶事務跨了多個分區,需要使用XA事務 來完成整個事務的正確的提交和回滾,即保證全局事務的一致性。

XA 事務在分庫分表場景的使用

下圖是個典型的分庫分表場景,前端是一個Proxy後面帶若干個MySQL實例,每個實例是一個分區。

XA-sharding.png

假設一個表test定義如下,Proxy根據主鍵”a”算Hash決定一條記錄應該分佈在哪個節點上:

create table test(a int primay key, b int) engine = innodb;

應用發到Proxy的一個事務如下:

begin;
insert into test values (1, 1);
update test set b = 1 where a = 10;
commit;

Proxy收到這個事務需要將它轉成XA事務發送到後端的數據庫以保證這個事務能夠安全的提交或回滾,一般的Proxy的處理步驟 如下:

  1. Proxy先收到begin,它只需要設置一下自己的狀態不需要向後端數據庫發送
  2. 當收到 insert 語句時Proxy會解析語句,根據“a”的值計算出該條記錄應該位於哪個節點上,這裏假設是“分庫1”
  3. Proxy就會向分庫1上發送語句xa start ‘xid1’,開啓一個XA事務,這裏xid1是Proxy自動生成的一個全局事務ID;同時原來 的insert語句insert in
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章