Paxos算法須要解決的問題就是如何在一個可能發生機器宕機或網絡異常的分佈式系統中,快速且正確地在集羣內部對某個數據的值達成一致。算法
Paxos由Acceptor、proposer和leaner三種角色組成網絡
爲了不單點故障,會有一個acceptor集合,proposer向該集合發送提案,acceptor集合中的每一個成員都有可能贊成該提案而且每一個acceptor只能批准一個提案,當有一半以上的成員贊成,則贊成該提案。分佈式
Paxos算法分爲兩個階段。具體以下:學習
階段一:3d
(a) Proposer選擇一個提案編號N,而後向半數以上的Acceptor發送編號爲N的Prepare請求。blog
(b) 若是一個Acceptor收到一個編號爲N的Prepare請求,且N大於該Acceptor已經響應過的全部Prepare請求的編號,那麼它就會將它已經接受過的編號最大的提案(若是有的話)做爲響應反饋給Proposer,同時該Acceptor承諾再也不接受任何編號小於N的提案。集羣
階段二:請求
(a) 若是Proposer收到半數以上Acceptor對其發出的編號爲N的Prepare請求的響應,那麼它就會發送一個針對[N,V]提案的Accept請求給半數以上的Acceptor。注意:V就是收到的響應中編號最大的提案的value,若是響應中不包含任何提案,那麼V就由Proposer本身決定。im
(b) 若是Acceptor收到一個針對編號爲N的提案的Accept請求,只要該Acceptor沒有對編號大於N的Prepare請求作出過響應,它就接受該提案。數據