gpt4 book ai didi

apache-zookeeper - ZooKeeper 如何提供顺序一致性

转载 作者:行者123 更新时间:2023-12-04 08:33:13 26 4
gpt4 key购买 nike

here
有人说:

"even if you read from a different follower every time, you'll never see version 3 of the data after seeing version 4."



因此,如果我有 3 个节点 Zookeeper 仲裁,如下所示:
zk0 -- leader
zk1
zk2

假设仲裁“3”中有一个值,并且我有一个客户端连接到 zk1 ,然后我的客户端发送一个写请求(将“3”更新为“4”)和 zk0 (leader) 写入值然后随后收到来自 zk1 的确认.我的客户可以看到新的(“4”),因为它连接到 zk1 .

现在我的问题是,如果我从 zk1 切换我的客户端至 zk2 (leader 没有收到来自 zk2 的写确认,所以 zk2 落后于法定人数)我将看到该值为“3”而不是“4”。它会破坏顺序一致性吗?

最佳答案

ZooKeeper 使用称为 的特殊原子消息传递协议(protocol)ZooKeeper AtomicBroadcast (ZAB) ,这确保了 ensemble(Zookeeper 服务器组)中的本地副本永远不会发散。

ZAB 协议(protocol)是原子的,因此该协议(protocol)保证更新成功或失败。

在 Zookeeper 中,每次写入都要经过领导者,领导者会生成一个事务 id(称为 zxid )并将其分配给这个写入请求。

zxid 是一个长(64 位)整数,分为两部分:

  • 时代
  • 柜台

  • zxid 表示在所有副本上应用写入的顺序。
    时代代表随着时间的推移领导层的变化。时期是指给定服务器行使领导权的时期。在一个 epoch 期间,领导者广播提案并根据计数器识别每个提案。

    如果领导者收到多数人的确认,则认为写入成功。

    zxid 用于保持服务器同步并避免您描述的冲突。

    enter image description here

    关于apache-zookeeper - ZooKeeper 如何提供顺序一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51018918/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com