參與者:負責投票網絡
協調者:負責發起詢問和接受答覆spa
1.詢問階段事務
是否能執行事務提交操做。若是參與者可以執行事務的提交,先執行事務操做,而後返回YES,若是沒有成功執行事務操做,就返回NOit
2.提交階段請求
執行commit或者rollback。數據
第二階段協調者和參與者都掛了,掛了的這個參與者在掛以前已經執行了操做,可是因爲他掛了,沒有人知道他執行了什麼操做,會致使數據不一致狀況co
還有不少其餘缺點:阻塞、腦裂(網絡分區)問題等,3PC的出現就是爲了解決這些問題。阻塞
參與者、協調者超時
1.詢問階段(CanCommit)commit
詢問全部參與者是否可能夠執行事務操做,並不在本階段執行事務操做。
2.預準備階段(PreCommit)
當協調者在第一階段收到全部的參與者都返回YES時,第二階段執行事務操做。
3.提交階段(DoCommit)
第三階段執行commit或者rollback。
在doCommit階段,若是參與者沒法及時接收到來自協調者的doCommit或者rebort請求時,會在等待超時以後,會繼續進行事務的提交。這樣會致使數據不一致。
1.將2PC的一階段拆分爲了兩個階段
2.引入超時機制。