一致性保证:

ZooKeeeper 是一个高性能的,可扩展的服务。不管是读和写操作是被设计成快速,虽然读比写快。


这样做的原因是在读的情况下,Zookeeper 可以提供旧的数据,


反过来又是由于Zookeeper的一致性保证;


顺序一致性;


从客户端更新会按他们发送的顺序应用

原子性;

更新成功还是失败   不会有部分的结果


单系统镜像

一个客户端可以看到相同的试图 

可靠性:


一旦一个更新被应用, 它会坚持从那个时间知道一个客户端覆盖更新。

这个保证2个推论:


1.如果一个客户端成功的得到一个返回码,更新会被应用。在一些失败的情况(通讯错误,超时等) 

客户端不知道如果更新是否已经被应用。 我们采取措施尽量减少故障,


但是保证只是当前的成功的返回码(这个被称为所谓的Paxos)


2. 任何更新被客户端看到,通过读取请求或者成功的更新,永远不会被回滚当从服务器故障恢复。


时效性:

客户端试图是保证在某段时间内是最新的(在几十秒的顺序0


注意:

有些时候 开发者错误的认为另一个保证ZooKeeper 不会实际上做,这就是 

同时一致性跨客户端视图:

ZooKeeper 不强制保证在每个实例及时的,两个不同的客户端会有zk数据的一致性视图

由于 像网络延时,一个客户单可能执行一个更新在其他客户单得到改变的通知前。


考虑到两个客户端的情况,A和B 如果客户端A 设置一个 znode /a 从0变为1

然后告诉client B去读取/a,客户端B 可能读取老的值0,


依赖它连接到哪台服务器。如果是重要的Client A 和Client B  读取相同的值,

Client B应该调用sync()方法。


因此,ZooKeeper 本身不保值改变发生同步到所有的服务器
 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐