兩階段提交
2PC:在分布式系統中,每一個機器節點雖然能夠明確的知道自己在進行事物操作過程的結果是失敗或成功,但卻無法直接獲取其他分布式節點的操作結果,因此事物操作需要跨越多個分布式節點的時候,需要引入一個協調者統一調度所有節點的執行邏輯。
階段一:提交事物請求
- 事物詢問
協調者向所有的參與者發送事物內容,詢問是否可以執行事物操作,並開始等待各參與者的響應。
- 執行事物
各參與者節點執行事物操作,並將Undo和Redo信息記入事物日志中
- 各參與者向協調者反饋事物詢問的響應
如果參與者成功執行了事物操作,那么就反饋給協調者Yes響應,表示事物可以執行;如果參與者沒有成功執行事物,那么就反饋給協調者No響應,表示事物不可以執行。
階段二:執行事物請求
在階段二中協調者會根據參與者的反饋情況來決定最終是否可以進行事物操作,其中有兩種可能。
執行事物提交
假如協調者從所有的參與者獲得的反饋都是Yes響應,那么就會執行事物響應。
- 發送提交請求。
協調者向所有參與者節點發出Commit請求
- 事物提交
參與者接收到Commit請求后,會正式執行事物提交操作,並在完成提交之后釋放在整個事物執行期間占有的事物資源。
- 反饋事物提交結果
參與者在完成事物提交之后,向協調者發送Ack消息。
- 完成事物
協調者接收到所有參與者反饋的Ack消息后,完成事物。
優缺點
- 優點:原理簡單,實現方便
- 缺點:同步阻塞,單點問題,腦裂,太過保守。