Paxos 是强一致性的吗?
Is Paxos Strongly Consistent?
考虑一个具有 3 个节点的分布式系统 - n1、n2、n3。节点之间有一个共享数据 x。 Paxos 在节点上 运行。一开始,x等于4.
客户端向n1发送更新请求,将x的值更改为5。n1和n2通过运行 Paxos就新值达成共识,但n3出现link失败,所以 n3 没有 x 的最新值。
我们知道Paxos提供强一致性。另一方面,如果客户端向 n1 发送一个读取请求,同时向 n3 发送另一个读取请求,则返回值不相同(其中一个是 5,另一个是 4)。所以,运行Paxos之后,系统就不是强一致性了。
My question is: How we can resolve this contradiction? Did I misunderstand something?
在 multi-paxos 中,您注意到同行可能会落后。如果您从法定人数中读取值,尽管您一定会看到最新的值,但诀窍在于找出最新的值。并非所有应用程序都需要这个,但如果您的应用程序需要,一个非常简单的扩充就足够了。只需使用元组而不是原始值,其中第一项是更新计数器,第二项是原始值。每次对等点尝试更新值时,它也会更新计数器。因此,当您从法定人数中读取时,具有最高更新计数器的元组保证是最新的值。
考虑一个具有 3 个节点的分布式系统 - n1、n2、n3。节点之间有一个共享数据 x。 Paxos 在节点上 运行。一开始,x等于4.
客户端向n1发送更新请求,将x的值更改为5。n1和n2通过运行 Paxos就新值达成共识,但n3出现link失败,所以 n3 没有 x 的最新值。
我们知道Paxos提供强一致性。另一方面,如果客户端向 n1 发送一个读取请求,同时向 n3 发送另一个读取请求,则返回值不相同(其中一个是 5,另一个是 4)。所以,运行Paxos之后,系统就不是强一致性了。
My question is: How we can resolve this contradiction? Did I misunderstand something?
在 multi-paxos 中,您注意到同行可能会落后。如果您从法定人数中读取值,尽管您一定会看到最新的值,但诀窍在于找出最新的值。并非所有应用程序都需要这个,但如果您的应用程序需要,一个非常简单的扩充就足够了。只需使用元组而不是原始值,其中第一项是更新计数器,第二项是原始值。每次对等点尝试更新值时,它也会更新计数器。因此,当您从法定人数中读取时,具有最高更新计数器的元组保证是最新的值。