paxos 是否提供真正的可线性一致性?

Does paxos provide true linearizable consistency or not?

我想我在这里可能混淆了概念,但在我看来,paxos 会为实现它的系统提供可线性化的一致性。

我知道 Cassandra 使用它。我不是 100% 清楚如何,但是假设选举了一个领导者并且该领导者完成所有写入,然后通信是同步的并且实现了实时线性化,对吗?

但是像 paxos 这样的共识算法通常被认为是部分同步的,因为存在法定人数(不是 100% 的节点通信)——这是否也意味着它也不是真正可线性化的?

也许因为只有一个法定人数,节点可能会失去同步,这会破坏线性化?

可线性化的系统不需要是同步的。线性化是 安全性 属性:它说 "nothing bad happens" 但如果没有任何好事发生,它也不会影响线性化。在检查线性一致性时,可以忽略任何不 return(或 return 错误)的读取或写入。这意味着即使一个或多个节点出现故障或分区或 运行ning 缓慢,系统也完全有可能线性化。

Paxos 通常用于实现复制状态机:一种在多个节点上同时执行一系列操作的系统。由于操作是确定性的,并且节点都同意 运行 的操作以及 运行 它们的顺序,因此节点都收敛到相同的状态(最终)。

您可以使用 Paxos 实现一个可线性化的系统,方法是将序列中的操作写入 和读取 ,因为操作被放置在一个完全有序的序列中(即通过 Paxos 协议线性化)。

将读取和写入按顺序排列很重要。想象一下,您只使用 Paxos 来就写入达成一致,并直接从节点的本地状态提供读取服务。如果服务于读取的节点与其他节点分开,那么它将服务于陈旧的读取,从而违反线性化。每次读取都必须涉及一定数量的节点,以确保 returned 值是最新的,这意味着(有效地)将读取与写入一起放入序列中。

(有一些技巧可以使读取比写入更高效,因为读取相互通信并且不需要持久保存到磁盘,但您无法避免联系的需要用于读取和写入操作的节点法定人数)