一、Zookeeper集群的特点
- Zookeeper:一个领导者 (Leader),多个跟随者 (Follower) 组成的集群
- 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器
- 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
- 更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
- 数据更新原子性次数据更新要么成功,要么失败。
- 实时性,在一定时间范围内,Client能读到最新数据
二、Zookeeper集群的缺点
- 性能瓶颈:由于Zookeeper采用单线程模型,无法有效利用多核CPU,因此存在性能瓶颈。在处理大量并发请求时,Zookeeper的性能可能会成为整个系统的瓶颈。
- 容量限制:Zookeeper集群的节点数量有限制,通常在50个节点左右。随着节点数量的增加,Zookeeper的性能可能会下降,因此不适合大规模的分布式系统。
- 脑裂问题:由于Zookeeper采用多副本的架构,可能会出现脑裂问题。当不同节点之间的网络分裂时,可能会导致部分节点无法与其他节点通信,从而导致数据不一致性。
- 维护成本:Zookeeper集群需要经常进行监控和维护。由于每个节点都需要保持通信,因此网络延迟和带宽因素可能会影响系统的性能。需要定期检查集群的健康状况,并及时处理故障和异常情况。
三、Zookeeper数据结构
ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个ZNode都可以通过其路径唯一标识。
Znode是一个类似于文件系统的节点,它有以下几个属性:
- path:节点的路径,用于唯一标识节点。
- data:节点的数据,用于存储节点的值。
- acl:节点的访问控制列表,用于控制对节点的访问权限。
- stat:节点的状态信息,包括节点的创建时间、修改时间、版本号等。
Znode可以通过路径进行访问,类似于文件系统中的目录结构。每个节点可以包含子节点,也可以是叶子节点。
Zookeeper使用Znode来存储和管理数据,可以用来实现分布式锁、分布式队列、配置管理等功能。