首页 > 解决方案 > Paxos 让选择提议值变得简单

问题描述

论文说:

1.提议者选择一个新的提议号 n 并向一组接受者中的每个成员发送请求,要求其响应:

(a) 承诺不再接受编号小于 n 的提案,并且

(b) 其已接受的最大数量小于 n 的提案,如果有的话。

我将这样的请求称为编号为 n 的准备请求。

2.如果proposer收到大多数acceptor的请求响应,那么它可以发出>一个编号为n且值为v的proposal,其中v是response中编号最高的proposal的值,或者是选择的任何值如果响应者未报告任何提案,则由提案者提交。

我的问题是,如果提议者在响应中选择 v,那么新轮次将始终使用以前保存的值,我们如何更新值?

说我们有:

v=1

在所有节点之间。然后客户想要更新它

v=2

每个准备阶段都会用 收集响应v=1,然后用 提议v=1,所以v=2永远不会使用!

许多实现v=2在接收客户端请求的节点上响应,因此v=2被提议。但是这种实现方式违反了规则

(b)它已经接受的最大数量小于n的提案,如果有的话。

因为v=2从来没有被接受过!我不能被建议回复。

标签: paxos

解决方案


我认为您正在寻找的是一种在成功设置为 1 后更新 V 的方法。您是正确的,一旦大多数同行同意 v=1,该 Paxos 实例就会被 v=1 锁定,并且它将从不改变。您需要的是另一个 paxos 实例来更新 v=2。这通常被称为“Multi-Paxos”,其中有一个 Paxos 实例的线性链,用于更新节点之间的共享状态。每个实例都是谨慎的,并且需要新的 Paxos 轮次,但尚未提出任何建议。在上面的示例中,将为实例 A 选择 v=1,而为实例 B 选择 v=2。


推荐阅读