我想我在这里可能混淆了一些概念,但在我看来,paxos会为实现它的系统提供线性一致性。
我知道卡桑德拉用过它。我不完全清楚是如何做到的,但是假设一个领导者是被选举出来的,而且所有的写作都是由单个领导者完成的,那么通信是同步的,并且实现了实时线性化,对吗?
但是,像paxos这样的协商一致算法通常被认为是部分同步的,因为存在仲裁(不是节点通信的100% )--这是否也意味着它也不是真正的线性化?
也许因为只有一个仲裁,一个节点可能会失去同步,这会打破线性化吗?
发布于 2019-12-18 20:07:05
可线性化系统不需要是同步的。Linearizability是一种安全属性:它说“没有什么不好的事情发生”,但是如果没有什么好的事情发生,它不会影响线性化。在检查线性化时,可以忽略不返回(或返回错误)的任何读或写。这意味着,即使一个或多个节点出现故障、分区或运行缓慢,系统也完全可以线性化。
Paxos通常用于实现复制状态机:一次在多个节点上执行一系列操作的系统。由于操作是确定性的,节点都同意要运行的操作和运行它们的顺序,所以节点都收敛到相同的状态(最终)。
您可以使用Paxos实现一个可线性化的系统,方法是让序列中的操作被写入和读取,使用的事实是,这些操作被Paxos协议放置在一个全序序列(即线性化)中。
重要的是,将读取和写入放在序列中。假设您只使用Paxos来商定写操作,并直接从节点的本地状态提供读取服务。如果为读取服务的节点被从其他节点分割,那么它将提供陈旧的读取,从而违反了线性化。每次读取都必须涉及一个节点的仲裁,以确保返回的值是新的,这意味着(实际上)将读取与写入一起放入序列中。
(有一些技巧可以使读的效率略高于写操作,考虑到读取彼此之间通勤,并且不需要持久化到磁盘,但您无法逃避为读写操作与一定数量的节点联系的需要)
https://stackoverflow.com/questions/59240198
复制相似问题