关于《兼职议会》中Paxos协议特定场景的认知疑问
《兼职议会》场景分析的错误修正
基础协议(Basic Protocol)部分的错误
- 错误点1:新leader不会直接用
b+1重提议该法令。基础协议中,新leader发起新ballot(b+1)时,必须先执行Phase 1:向多数节点发送NextBallot(b+1)请求,收集节点已投票的最大ballot及对应法令。如果多数节点在ballotb中已投票给法令d,新leader会直接在Phase 2提议d,本质是延续已有的投票共识,而非发起全新提议。 - 错误点2:不存在“同一法令以
b和b+1两次通过”的情况。基础协议中,法令“通过”的定义是多数节点在同一个ballot中投票确认该法令。旧leader仅本地写入账本但未发送Success(d),此时集群并未达成共识(其他节点还未确认该法令通过)。只有当新leader在b+1ballot中获得多数节点对d的投票后,d才真正被集群通过。旧leader重新连接后,会同步集群的共识结果,不会保留本地未被确认的bballot记录。
多法令议会(Multi-Decree Parliament)部分的错误
- 错误点1:新leader无需用no-op填补
b的空缺。多法令协议中,核心是为每个slot分配唯一法令。旧leader在slots尝试用ballotb提议法令d但未完成通知,新leader接管后,针对slots发起b+1ballot的Phase 1时,会收集到多数节点在slots的最大投票ballot是b、对应法令是d,因此会直接在slots用b+1ballot提议d,无需先填充no-op。 - 错误点2:旧leader重新连接后不会出现
b对应两个值的冲突。多法令协议中,节点会为每个slot记录已投票的最大ballot及对应法令,更高编号的ballot优先级更高。旧leader重新连接后,会通过协议同步集群状态:多数节点在slots的最大投票是b+1对应的d,旧leader会用这个更高优先级的记录覆盖自己本地未被确认的bballot记录,最终集群所有节点对slots的状态达成一致。
内容的提问来源于stack exchange,提问作者newbee
相关产品推荐
相关产品推荐

