- 获取一个Proposal ID n,为了保证Proposal ID唯一,可采用时间戳+Server ID生成;
- Proposer向所有Acceptors广播Prepare(n)请求;
- Acceptor比较n和minProposal,如果n>minProposal,minProposal=n,并且将 acceptedProposal 和 acceptedValue 返回;
- Proposer接收到过半数回复后,如果发现有acceptedValue返回,将所有回复中acceptedProposal最大的acceptedValue作为本次提案的value,否则可以任意决定本次提案的value;
- 到这里可以进入第二阶段,广播Accept (n,value) 到所有节点;
- Acceptor比较n和minProposal,如果n>=minProposal,则acceptedProposal=minProposal=n,acceptedValue=value,本地持久化后,返回;否则,返回minProposal。
- 提议者接收到过半数请求后,如果发现有返回值result >n,表示有更新的提议,跳转到1;否则value达成一致。
理解: 设共有 2f+1个个体。则最多共可以产生f+1 个不同的value 值。
证明:假设当前在 2f+1个个体 中已经产生了 f+1 个不同的value值。 由于第4步Proposer需要收到超过半数的回复,也就是说至少需要收到f+1个回复;
也就可以简化成 从 2f+1 个个体中,的f+1 个子集中 获取 value 值,由于假设条件(已存在f个不同的value值),则这个value 值必定属于原来的f+1 value 值的集合中。所以永远无法产生 第f+2 个value 值
原文地址:https://www.cnblogs.com/gfbppy/p/12228242.html
时间: 2024-11-06 03:28:50