1. 程式人生 > >分散式專題(六)分散式事物

分散式專題(六)分散式事物

資料庫事務要滿足幾個要求:ACID

Atomic(原子性)     事務必須是原子的工作單元

Consistent(一致性)  事務完成時,必須使所有資料都保持一致狀態

Isolation(隔離性)    併發事務所做的修改必須和其他事務所做的修改是隔離的

Duration(永續性) 事務完成之後,對系統的影響是永久性的

 

 

Mysql裡的事務處理過程

  1. 記錄redo和undo log檔案,確保日誌在磁碟上的持久化
  2. 更新資料記錄
  3. 提交事務 ,redo 寫入commit記錄

分散式事務

資料庫分庫分表

SOA化

X/OpenDTP事務模型

X/Open Distributed Transaction Processing Reference Model

X/Open是一個組織機構,定義出的一套分散式事務標準, 定義了規範的API介面

 

2PC(two -phase-commit), 用來保證分散式事務的完整性

J2EE 遵循了X/open DTP規範,設計並實現了java裡面的分散式事務程式設計介面規範-JTA

XA是X/Open DTP定義的中介軟體與資料庫之間的介面規範。 XA介面函式由資料庫廠商提供

 

X/OpenDTP 角色

AP application          

RM resouces manager   資源管理器。 資料庫

TM transaction manager  事務管理器,事務協調者

2PC(two -phase-commit)

(CAP)

階段一:提交事務請求(投票)

  1. TM向所有的AP傳送事務內容,詢問是否可以執行事務的提交操作,並等待各個AP的響應
  2. 執行事務

各個AP節點執行事務操作,將undo和redo資訊記錄到事務日誌中,儘量把提交過程中所消耗時間的操作和準備都提前完成後確保後續

事務提交的成功率

  1. 各個AP向TM反饋事務詢問的響應

各個AP成功執行了事務操作,那麼反饋給TM yes的response;如果AP沒有成功執行事務,就反饋TM no的response

階段二:執行事務提交

執行提交事務

假設一個事務的提交過程總共需要30s, 其中prepare操作需要28(事務日誌落地磁碟及各種io操作),而真正commit只需要2s

那麼,commit階段發生錯誤的概率和prepare相比, 2/28 (<10%) .只要第一個階段成功,那麼commit階段出現失敗的概率就非常小

大大增加了分散式事務的成功概率

中斷事務提交

 

 

2pc存在的問題

  1. 資料一致性問題
  2. 同步阻塞

    還有3PC,略

分散式事務的實現

Atomikos

連結:https://pan.baidu.com/s/1iVGb5Bt4HX0CtISni2F--w 密碼:vi7j