zookeeper如何让所有节点更新最新值的?

发布于 2022-09-12 01:51:29 字数 85 浏览 14 评论 0

假如N个节点有N/2+1个成功更新了新值,剩下的其他节点还是老值,那其他节点如何更新为新值?而且如果客户端读取值的时候,读到老值的节点,那岂不是没有一致性?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

儭儭莪哋寶赑 2022-09-19 01:51:29

你前面理解的没错。这种情况是存在的。zk 写入是必须通过 leader 串行的写入,而且只要一半以上的节点写入成功即可。而任何节点都可提供读取服务。例如:zk,有 1~5 个节点,写入了一个最新的数据,最新数据写入到节点 1~3,会返回成功。然后读取请求过来要读取最新的节点数据,请求可能被分配到节点 4~5 。而此时最新数据还没有同步到节点4~5。会读取不到最近的数据。如果想要读取到最新的数据,可以在读取前使用 sync 命令。

至于说一致性,一致性也有很多种类型。ZooKeeper 文档中明确写明它的一致性是 Sequential consistency (顺序一致性)

我目测你理解的这种是分布式事务中的2PC(二阶段提交协议)的“全量通过”

zk 使用的是ZAB协议,ZAB协议中多次用到“过半”设计策略 ,该策略是zk在A(可用性)与C(一致性)间做的取舍,也是zk具有高容错特性的本质。相较分布式事务中的2PC(二阶段提交协议)的“全量通过”,ZAB协议可用性更高(牺牲了部分一致性),能在集群半数以下服务宕机时正常对外提供服务。

具体更多的内容,如果想了解,最好去看看《从paxos到Zookeeper分布式一致性原理与实践》

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文