
一致性保证: 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 本身不保值改变发生同步到所有的服务器