俩阶段提交
準備階段
事務協(xié)調(diào)者給每個參與者發(fā)送Prepare消息,每個參與者要么直接返回失敗,要么在本地執(zhí)行事務,但不提交。
可以進一步將準備階段分為以下三個步驟:
-
1)協(xié)調(diào)者節(jié)點向所有參與者節(jié)點詢問是否可以執(zhí)行提交操作,并開始等待各參與者節(jié)點的響應。
-
2)參與者節(jié)點執(zhí)行詢問發(fā)起為止的所有事務操作,并將Undo信息和Redo信息寫入日志。
-
3)各參與者節(jié)點響應協(xié)調(diào)者節(jié)點發(fā)起的詢問。如果參與者節(jié)點的事務操作實際執(zhí)行成功,則它返回一個”同意”消息;如果參與者節(jié)點的事務操作實際執(zhí)行失敗,則它返回一個”中止”消息。
提交階段
如果協(xié)調(diào)者收到了參與者的失敗消息或者超時,直接給每個參與者發(fā)送回滾消息;否則,發(fā)送提交消息;參與者根據(jù)協(xié)調(diào)者的指令執(zhí)行提交或者回滾操作。
接下來分兩種情況分別討論提交階段的過程。
-
1)協(xié)調(diào)者節(jié)點向所有參與者節(jié)點發(fā)出”正式提交”的請求。
-
2)參與者節(jié)點正式完成操作,并釋放在整個事務期間內(nèi)占用的資源。
-
3)參與者節(jié)點向協(xié)調(diào)者節(jié)點發(fā)送”完成”消息。
-
4)協(xié)調(diào)者節(jié)點受到所有參與者節(jié)點反饋的”完成”消息后,完成事務。
如果任一參與者節(jié)點在第一階段返回的響應消息為”中止”,或者 協(xié)調(diào)者節(jié)點在第一階段的詢問超時之前無法獲取所有參與者節(jié)點的響應消息時:
-
1)協(xié)調(diào)者節(jié)點向所有參與者節(jié)點發(fā)出”回滾操作”的請求。
-
2)參與者節(jié)點利用之前寫入的Undo信息執(zhí)行回滾,并釋放在整個事務期間內(nèi)占用的資源。
-
3)參與者節(jié)點向協(xié)調(diào)者節(jié)點發(fā)送”回滾完成”消息。
-
4)協(xié)調(diào)者節(jié)點受到所有參與者節(jié)點反饋的”回滾完成”消息后,取消事務。
?
總結(jié)
- 上一篇: 你不知道LinkedList中的方法
- 下一篇: 0904-跟谁学