提交事務請求(投票階段)協調者向參與者傳送事務內容,詢問是否可以執行事務提交操作,等待響應
參與者執行事務操作,並將undo和redo日誌記錄參與者回覆協調者,執行成功則回Yes否則No
執行事務提交(執行階段)
如果都是參與者都回復Yes,則協調者向參與者傳送提交請求,否則傳送回滾請求
參與者根據協調者的請求執行事務提交或回滾,並向協調者傳送Ack訊息
協調者收到所有的Ack訊息過後判斷事務的完成或者中斷
事務詢問(canCommit)
協調者向參與者傳送一個包含事務內容的詢問請求,詢問是否可以執行事務並等待
參與者根據自己狀態判斷並回復yes、no
執行事務預提交(preCommit)
若協調者收到全是yes,就傳送preCommit請求否則釋出abort請求
參與者若收到preCommit則執行事務操作並記錄undo和redo然後傳送Ack,若收到abort或者超時則中斷事務
執行事務提交(doCommit)
協調者收到所有的Ack則傳送doCommit請求,若收到了No或者超時則傳送abort請求
參與者收到doCommit就執行提交併傳送ACk,否則執行回滾併發送Ack
協調者收到Ack判斷是完成事務還是中斷事務
Prepare階段
Proposer選擇一個提案編號M,向Acceptor某個超過半數的子整合員傳送該編號的Prepare請求
Acceptor收到M編號的請求時,若M大於該Acceptor已經響應的所有Prepare請求的編號中的最大編號N,那麼他就將N反饋給Proposer,同時承諾不會再批准任何編號小於M的提案
Accept階段
如果Proposer收到超過半數的Acceptor對於M的prepare請求的響應,就傳送一個針對[M,V]提案的Accept請求給Acceptor,其中V是收到的響應編號中編號的最大的提案值,如果響應中不包括任何提案值,那麼他就是任意值
Acceptor收到這個針對[M,V]的Accept請求只要改Acceptor尚未對大於M編號的提案做出過響應,他就透過這個提案
Learn階段(本階段不屬於選定提案的過程)
Proposer將透過的提案同步到所有的Learner
它贏得選舉;
另一個節點成為Leader;
一段時間沒有節點成為Leader。
Vr Vw V
Vw V/2