為解決分布式系統的資料一緻性問題出現了兩階段送出協定,兩階段送出由 協調者和參與者組成,共經過兩個階段和三個操作,部分關系資料庫如Oracle、MySQL支援兩階段送出協定,這裡講解關系資料庫兩階段送出協定。
2PC協定流程圖:
1)第一階段:準備階段(prepare)
協調者通知參與者準備送出訂單,參與者開始投票。
協調者完成準備工作向協調者回應Yes。
2)第二階段:送出(commit)/復原(rollback)階段
協調者根據參與者的投票結果發起最終的送出指令。
如果有參與者沒有準備好則發起復原指令。
一個下單減庫存的例子:
1、應用程式連接配接兩個資料源。
2、應用程式通過事務協調器向兩個庫發起prepare,兩個資料庫收到消息分别執行本地事務(記錄日志),但不提
交,如果執行成功則回複yes,否則回複no。
3、事務協調器收到回複,隻要有一方回複no則分别向參與者發起復原事務,參與者開始復原事務。
4、事務協調器收到回複,全部回複yes,此時向參與者發起送出事務。如果參與者有一方送出事務失敗則由事務協
調器發起復原事務。
2PC的優點:實作強一緻性,部分關系資料庫支援(Oracle、MySQL等)。
缺點:整個事務的執行需要由協調者在多個節點之間去協調,增加了事務的執行時間,性能低下。