Paxos算法可分爲兩二段:算法
階段一:spa
1.Proposer選擇一個提案號Mn,而後向Acceptor的某個超過半數的子集發送編號爲Mn的Prepare請求。循環
2.若是一個Acceptor收到一個提案編號爲Mn的Prepare請求,且Mn大於該Acceptor已響應過的全部編號,那麼它會將它已經批准過的最大的編號提案相應給Proposer,同時承諾不會再批准任何編號小於Mn的提案。請求
階段二:集合
1.若是Proposer收到來自半數以上的Acceptor對其發出的編號爲Mn的Prepare請求的相應,那麼它就會發送一個[Mn,Vn]提案的請求給Acceptor,Vn是一階段中響應的最大編號的提案值,若是響應中不包含任何提案值,那麼他就是任意值。
2.若是Acceptor收到[Mn,Vn]的提案請求,只要該Acceptor還沒有對編號大於Mn的請求作出響應,他就能夠經過這個提案。
提案的獲取Acceptor將批准的提案發送給一個特定的Learner集合,該集合中的每一個Learner均可以在一個提案被選定後通知全部其餘的Learner。
經過選取主Proposer保證算法的活性:
若是兩個Proposer交替向Acceptor發送Prepare請求,那麼每次Acceptor都收到更大的Mn(Mn+1),就會在二階段忽略上一個Proposer發送的[Mn,Vn]提案。這樣交替忽略就是死循環,不會經過提案。
解決辦法是選出一個主Proposer,只有主Proposer能夠發出提案。