分布式系統如何保證事物(3PC,點我)
- 第一階段: 稱為準備(prepare)階段:
- 協調者向所有參與者發送消息,準備送出
- 所有參與者開始事務執行的準備工作:如:為資源上鎖。
- 如果事務的準備工作成功,則回應“可以送出”,否則回應“拒絕送出”。
- 第二階段: 稱為送出(commit)/復原(rollback)階段:
- 所有的參與者都回應“可以送出”,協調者向所有的參與者發送“正式送出”的指令。參與者完成正式送出,并釋放所有資源,然後回應“完成”,協調者收集各個服務的“完成”回應後結束事務。
- 如果有一個參與者回應“拒絕送出”協調者向所有的參與者發送“復原操作”,并釋放所有資源,然後回應“復原完成”,取消整體的分布式事務。
- 三階段送出(如果問到,參與者當機如何避免阻塞就說3PC):
- 3PC增加了一個中間狀态,友善判斷事務狀态,新的協調者不用等當機者恢複 就能決定事務狀态,準确的送出事務或者終止事務。
- 新協調者如果發現存活的節點的狀态是[預送出],說明各執行節點的狀态肯定都是"可以送出",協調者直接送出事務,能保證資料一緻性 。
- 如果發現存活的節點狀态是[能否送出]狀态,說明事務被中斷了,協調者繼續中斷事務就行。