Multi-Paxos无法保证操作顺序性

Multi-Paxos无法保证操作顺序性

Content #

我们假设当前所有节点上的被选定指令,最大序号都为 100,那么新提议的指令对应的序号就会是 101。

首先节点 A 是领导者,提案编号为 1,提议了指令 X、Y,对应的序号分别为 101 和 102,但是因为网络故障,指令只成功复制到了节点 A。

假设这时节点 A 故障了,新当选的领导者为节点 B。节点 B 当选领导者后,需要先作为学习者了解目前已被选定的指令。节点 B 学习之后,发现当前被选定指令的最大序号为 100(因为节点 A 故障了,它被选定指令的最大序号 102,无法被节点 B 发现),那么它可以从序号 101 开始提议新的指令。这时它接收到客户端请求,并提议了指令 Z,指令 Z 被成功复制到节点 B、C。

假设这时节点 B 故障了,节点 A 恢复了,选举出领导者 C 后,节点 B 故障也恢复了。节点 C 当选领导者后,需要先作为学习者了解目前已被选定的指令,这时它执行 Basic Paxos 的准备阶段,就会发现之前选定的值(比如 Z、Y),然后发送接受请求,最终在序号 101、102 处达成共识的指令是 Z、Y。就像下图的样子。

在这里,你可以看到,原本预期的指令是 X、Y,最后变成了 Z、Y。

Viewpoints #

From #

15 | ZAB协议:如何实现操作的顺序性?