什么是zookeeper
zookeeper是Apache开源的一个用于分布式应用系统的分布式数据协调服务。基于zab协议将分布式系统中的数据实现最终一致。 zookeeper的特点:
- 使用了按照文件结构系统类似的目录树样式的结构数据类型。允许分布式进程通过共享的分层名称空间相互协调,该命名空间的组织方式类似于标准文件系统。
- 数据存储在内存中,意味着zookeeper具有高吞吐和低延时性。
- 安全可靠。zookeeper集群节点具有快速恢复和快速选举的能力,能大大减少故障不可用时间。不会因为单点故障而影响业务系统。
- 时序性。严格排序意味着可以在客户端上实现复杂的同步原语。
- 原子性:成功或者失败,不会出现部分提交。
zookeeper集群架构
zookeeper集群由唯一leader和多个follower以及少量Observer组成。与etcd不同的是 ** zookeeper成员之间是由follower向leader通信,而etcd是由leader向所有follower节点通信。 ** 与etcd一样,zookeeper集群只要满足大多数节点状态可用就能确保集群可用。 客户端连接到单个zookeeper节点,客户端维护一个TCP连接用来发送请求和接收响应,获取监听事件并发送心跳。如果与该节点连接断开,客户端将会与其他节点重新建立连接。
zookeeper数据模型
zookeeper是依照类似目录树结构形式设计的数据结构,zookeeper的每个节点(znode)均能有与其关联的节点和字节点。 Znodes维护一个统计信息结构,其中包括用于数据更改,ACL更改和时间戳的版本号,以允许进行缓存验证和协调更新。znode的数据每次更改时,版本号都会增加。例如,每当客户端检索数据时,它也接收数据的版本。原子地读取和写入存储在名称空间中每个znode上的数据。读取将获取与znode关联的所有数据字节,而写入将替换所有数据。每个节点都有一个访问控制列表(ACL),用于限制谁可以执行操作。 ZooKeeper还具有短暂节点的概念。只要创建znode的会话处于活动状态,这些znode就存在。会话结束时,将删除znode。当您想实现[tbd]时,临时节点非常有用。