隨便敲的,看看就好(被書折騰後憑感受寫的,可能小誤算法
PAXOS針對2PC的保守策略改成少數服從多數的更爲合理的策略spa
每一個Acceptor可批准多個提案class
每一個Proposer有惟一的身份標記\(M_i\),以及對應的提案內容\(V_i\),用\(<M,V>\)表示一個提案請求
注意提案者\(M\)實際上是會暗中附和其它人的提案內容,所以\(V\)並不惟一,所謂的選定提案更爲關注的是內容\(V\)集合
提案超過半數即大於等於\(\lfloor \frac{n}{2} \rfloor+1\)的Acceptor批准時,該提案被選定,內容由Learner發佈生成
規定:math
P1.Accpetor必然批准接收到的第一個\(<M_i,V_i>\)
P2.當Accpetor批准\(<M_i,V_i>\)後,不會再接受\(M_j \lt M_i\)的任意請求,批准的\(M_j \gt M_i\)對應的\(V_j=V_i\)(解決未提交既完成選定,實際是下放到生成的時刻)
推論:
當\(<M_i,V_i>\)被選定時,必存在一個大小大於等於\(\lfloor \frac{n}{2} \rfloor+1\)的Accpetor多數集所有批准該提案
當\(<M_i,M_{i+1}...M_j,V_i>\)被選定時,必存在一個大小大於等於\(\lfloor \frac{n}{2} \rfloor+1\)的Accpetor多數集所有批准\(M_i\)到\(M_j\)的任一提案
當\(<M_i,V_i>\)產生時,多數集必知足任意其一 1.集合不曾批准過\(M_j \lt M_i\)的任意提案 2.存在一個選定的\(M_j \lt M_i\)的提案,\(V_j = V_i\)(由超過半數得選定必有交集,而且若已存在編號小的選定,那確定是符合2)
當存在\(M_j \lt M_i\)的提案,那\(V_i\)的值必定是最大的批准的\(M_i\)所對應的\(V_i\)
所以當\(<M_i,M_{i+1}...M_j,V_i>\)被選定時,\(M_{j+1}\)的\(V_{j+1} = V_i\)
目的:
1.儘快達成一致
2.少數服從多數
算法步驟:暫略