zookeeper 各节点数据保证是弱一致性
一致性保证:ZooKeeeper 是一个高性能的,可扩展的服务。不管是读和写操作是被设计成快速,虽然读比写快。这样做的原因是在读的情况下,Zookeeper 可以提供旧的数据,反过来又是由于Zookeeper的一致性保证;顺序一致性;从客户端更新会按他们发送的顺序应用原子性;更新成功还是失败不会有部分的结果单系统镜像一个客户端可以看到相同的试图
·
一致性保证:
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 本身不保值改变发生同步到所有的服务器
更多推荐
已为社区贡献13条内容
所有评论(0)