Apache zookeeper 为什么写入请求必须进行领导人选举,而读取请求则不必进行领导人选举?

Apache zookeeper 为什么写入请求必须进行领导人选举,而读取请求则不必进行领导人选举?,apache-zookeeper,distributed-computing,consensus,paxos,Apache Zookeeper,Distributed Computing,Consensus,Paxos,在一个可靠的分布式系统中,领导人选举对于写操作的成功是必不可少的,我可以理解,这需要遵循Paxos算法 然而,为什么read请求不需要领导人选举(从而达成共识)?(例如,在Zookeeper中) 我遗漏了什么吗?Zookeeper读取是不可线性化的,因此不需要一致性协调。相反,它们是顺序一致的,允许从客户端连接到的节点进行本地读取 这同样适用于木筏等。您可以执行本地读取并获得最多的顺序一致性(前提是您与节点协调,以不读取比您所看到的更早的数据),但如果您想要线性化读取,则必须“提交”读取操作(即

在一个可靠的分布式系统中,领导人选举对于写操作的成功是必不可少的,我可以理解,这需要遵循Paxos算法

然而,为什么read请求不需要领导人选举(从而达成共识)?(例如,在Zookeeper中)


我遗漏了什么吗?

Zookeeper读取是不可线性化的,因此不需要一致性协调。相反,它们是顺序一致的,允许从客户端连接到的节点进行本地读取

这同样适用于木筏等。您可以执行本地读取并获得最多的顺序一致性(前提是您与节点协调,以不读取比您所看到的更早的数据),但如果您想要线性化读取,则必须“提交”读取操作(即,让系统同意在读取之前提交哪些写入),这同样需要一致意见

Zookeeper不可线性化。见例。人们通常认为可以同步+读取(在此编辑之前,我在这里重复了这个说法),但引用Zookeeper文档:

使用sync有一个警告,它是相当技术性的,并且与ZooKeeper的内部结构密切相关。(可以跳过它。)因为ZooKeeper应该能够为以读取为主的工作负载提供快速读取和缩放功能,所以同步的实现已经简化,并且它不会作为常规更新操作(如创建、设置数据或删除)真正遍历执行管道。它只是到达了领导者,领导者将响应排队返回给发送它的追随者。领导者认为自己是领导者l的可能性很小,但不再得到法定人数的支持,因为法定人数现在支持另一位领导者lʹ。在这种情况下,leader l可能没有处理所有的更新,并且同步调用可能无法遵守其保证


Zookeeper读取不可线性化,因此不需要一致性协调。相反,它们是顺序一致的,允许从客户端连接到的节点进行本地读取

这同样适用于木筏等。您可以执行本地读取并获得最多的顺序一致性(前提是您与节点协调,以不读取比您所看到的更早的数据),但如果您想要线性化读取,则必须“提交”读取操作(即,让系统同意在读取之前提交哪些写入),这同样需要一致意见

Zookeeper不可线性化。见例。人们通常认为可以同步+读取(在此编辑之前,我在这里重复了这个说法),但引用Zookeeper文档:

使用sync有一个警告,它是相当技术性的,并且与ZooKeeper的内部结构密切相关。(可以跳过它。)因为ZooKeeper应该能够为以读取为主的工作负载提供快速读取和缩放功能,所以同步的实现已经简化,并且它不会作为常规更新操作(如创建、设置数据或删除)真正遍历执行管道。它只是到达了领导者,领导者将响应排队返回给发送它的追随者。领导者认为自己是领导者l的可能性很小,但不再得到法定人数的支持,因为法定人数现在支持另一位领导者lʹ。在这种情况下,leader l可能没有处理所有的更新,并且同步调用可能无法遵守其保证