distributed-computing - paxos 是否提供真正的线性化一致性?

标签 distributed-computing distributed-system consistency paxos

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

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

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

也许因为只有法定人数,节点可能会不同步,从而破坏线性化?

最佳答案

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

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

您可以使用 Paxos 实现线性化系统,方法是使用 Paxos 将操作放置在全序序列(即线性化)中的事实来写入和读取序列中的操作和读取协议(protocol)。

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

(考虑到读取相互交换并且不需要持久化到磁盘,您可以使用一些技巧来使读取比写入更有效,但您无法逃避联系法定人数的需要用于读取和写入操作的节点数)

关于distributed-computing - paxos 是否提供真正的线性化一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59240198/

相关文章:

待分发的 Java TCP/IP 应用程序

java - Spring Boot如何管理分布式系统中的bean?

caching - 与 etag 和多服务器设置保持一致吗?

java - 在多个服务器上分配 Java 线程?

caching - 由于分布式缓存需要网络调用,在某些情况下直接从DB读取不是有好处吗?

java - Java 中的并行应用程序检查点

java - 节点如何知道哪些节点看到了集群的当前状态?

oop - 一表 DAO vs 多表 DAO

javascript - 为什么 ES5 Object 方法没有添加到 Object.prototype 中?

c - Visual Studio 和 C 项目上的运行之间不一致