ZooKeeper为存储的数据提供了一致性保证,不管应用从哪个服务端获取数据,都能获取到一致的数据。ZooKeeper内部使用原子广播协议(Zab)作为其一致性复制的核心,并通过对服务端请求的排序达到数据一致性的保障要求。
ZooKeeper的数据一致性保障
ZooKeeper是高性能、可扩展的,为应用提供了以下的数据一致性保障:
1)顺序一致性
来自客户端的更新将严格按照客户端发送的顺序处理;
2)原子性
更新或者成功或者失败,不存在部分成功或者部分失败的场景;
3)单一视图
无论客户端连接到哪个服务器,看到的都是一样的视图;
4)可靠性
一旦一个更新生效,它将一直保留,直到再次更新;
5)实时性
在特定的一段时间内,任何系统的改变都能被客户端看到,或者被监听到。
Zab:原子广播协议
在ZooKeeper的集群环境中,有leader、follower和observer节点,leader负责将写操作包装为一个事务执行,follower参与写操作执行过程的投票,而observer则仅接收最后的INFORM消息,不参与更新的投票过程。
当follower收到一个写请求时,follower将其转交给leader,leader将其封装为一个事务并处理,每个事务都包含了一个zxid,zxid分为两个部分,epoch和counter。epoch用于标识当前的leader,一个新的leader产生