Zookeeper 读写数据流程

2020-02-13  本文已影响0人  taj3991

读数据流程

当Client向zookeeper发出读请求时,无论是Leader还是Follower,都直接返回查询结果。

Zookeeper并不保证读取的是最新数据

如果是对zk进行读取操作,读取到的数据可能是过期的旧数据,不是最新的数据。



已上图为例,如果一个zk集群有10000台节点,当进行写入的时候,如果已经有6K个节点写入成功,zk就认为本次写请求成功。但是这时候如果一个客户端读取的刚好是另外4K个节点的数据,那么读取到的就是旧的过期数据。

在zk的官方文档中对此有解释,地址在:https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html

zookeeper一致性的保证:

ZooKeeper是一种高性能,可扩展的服务,虽然读取速度比写入快,但是读取和写入操作都设计的极为快速,这样做的原因是在读取的情况下,ZooKeeper可能会提供较旧的数据,但这是为了ZooKeeper的一致性保证:

有时开发人员错误地假定ZooKeeper实际上没有做出另一个保证:跨客户端的强一致性:

因此,ZooKeeper本身不保证所有服务器上同步发生变化,但ZooKeeper原语可用于构建更高级的函数,提供有用的客户端同步。
zk的sync方法的解释:异步的实现当前进程与leader之间的指定path的数据同步;

CAP理论

在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项。理解CAP理论的最简单方式是想象两个节点分处分区两侧。允许至少一个节点更新状态会导致数据不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。

对于zookeeper来说,它实现了A可用性、P分区容错性、C中的写入强一致性,丧失的是C中的读取一致性。

写数据流程

zookeeper写入操作分为两种情况,① 写入请求直接发送到leader节点,② 写入请求发送到Follower节点,这两种情况有略微的区别。

写入请求直接发送到Leader节点时的操作步骤如下:

写入请求发送到Follower节点的操作步骤如下:

原文

https://www.jianshu.com/p/b48d50e1fcb1

http://www.crazyant.net/2120.html

上一篇下一篇

猜你喜欢

热点阅读