天天看點

【5分鐘背八股】3PC送出協定是什麼?

CanCommit階段

3PC的CanCommit階段其實和2PC的準備階段很像。協調者向參與者發送commit請求,參與者如果可以送出就傳回Yes響應,否則傳回No響應。

1.事務詢問 協調者向參與者發送CanCommit請求。詢問是否可以執行事務送出操作。然後開始等待參與者的響應。

2.響應回報 參與者接到CanCommit請求之後,正常情況下,如果其自身認為可以順利執行事務,則傳回Yes響應,并進入預備狀态。否則回報No

PreCommit階段

協調者根據參與者的反應情況來決定是否可以進行事務的PreCommit操作。根據響應情況,有以下兩種可能。

假如協調者從所有的參與者獲得的回報都是Yes響應,那麼就會執行事務的預執行。

1.發送預送出請求 協調者向參與者發送PreCommit請求,并進入Prepared階段。

2.事務預送出 參與者接收到PreCommit請求後,會執行事務操作,并将undo和redo資訊記錄到事務日志中。

3.響應回報 如果參與者成功的執行了事務操作,則傳回ACK響應,同時開始等待最終指令。

假如有任何一個參與者向協調者發送了No響應,或者等待逾時之後,協調者都沒有接到參與者的響應,那麼就執行事務的中斷。

1.發送中斷請求 協調者向所有參與者發送abort請求。

2.中斷事務 參與者收到來自協調者的abort請求之後(或逾時之後,仍未收到協調者的請求),執行事務的中斷。

pre階段參與者沒收到請求,rollback。

doCommit階段

該階段進行真正的事務送出,也可以分為以下兩種情況。

執行送出

1.發送送出請求 協調接收到參與者發送的ACK響應,那麼他将從預送出狀态進入到送出狀态。并向所有參與者發送doCommit請求。

2.事務送出 參與者接收到doCommit請求之後,執行正式的事務送出。并在完成事務送出之後釋放所有事務資源。

3.響應回報 事務送出完之後,向協調者發送Ack響應。

4.完成事務 協調者接收到所有參與者的ack響應之後,完成事務。

中斷事務 協調者沒有接收到參與者發送的ACK響應(可能是接受者發送的不是ACK響應,也可能響應逾時),那麼就會執行中斷事務。

1.發送中斷請求 協調者向所有參與者發送abort請求

2.事務復原 參與者接收到abort請求之後,利用其在階段二記錄的undo資訊來執行事務的復原操作,并在完成復原之後釋放所有的事務資源。

3.回報結果 參與者完成事務復原之後,向協調者發送ACK消息

4.中斷事務 協調者接收到參與者回報的ACK消息之後,執行事務的中斷。

繼續閱讀