一、zookeeper简介
Zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等功能。
- Zookeeper本身就是一个分布式程序,主要半数以上节点存活,Zookeeper就能正常服务。
- 为了保证高可用,最好以集群方式部署Zookeeper,这样只要集群中大部分机器是可用的,Zookeeper本身仍然可用。
- 全局数据一致性,每个server保存一份相同的副本,client无论链接哪个server,得到的数据都是一致的。
- Zookeeper将数据保存在内存中,保证了高吞吐和低延迟,但是内存限制了能够存储的容量不太大,限制了Znode中存储的数据量较小的进一步原因。
- Zookeeper是高性能的,在读多于写的应用程序中尤其的高性能,因为写会导致所有服务器同步状态。
- Zookeeper有临时节点的概念,当创建临时节点的客户端会话一直保持活动,瞬时节点就一直存在,而当会话终结时,瞬时节点被删除。持久节点是指一旦这个ZNode被创建,除非主动进行ZNode的移除操作,否则这个ZNode将一直保存在Zookeeper上。
- Zookeeper底层其实提供了两个功能,管理用户程序提交的数据;为用户程序提供节点监听服务。
二、zookeeper的节点类型
在Zookeeper中,节点分为两类,第一类是指构成集群的机器,称为机器节点,第二类是指数据模型中的数据单元,称为数据节点-ZNode。
Zookeeper将所有数据存储在内存中,数据模型是一棵树,由/进行分割的路径,就是一个Znode,每个节点上都会保存自己的数据内容,同时还会保存一系列属性信息。
Zookeeper中的机器节点分为三类:
- Leader
- Follower
- Observer
Zookeeper中node 分为两类,分为持久节点和临时节点。同时Zookeepe还允许为每个节点添加一个属性:SEQUENTIAL。一旦节点被标记上这个属性,那么这个节点被创建的时候,Zookeeper会自动在其节点名后追加上一个整型数字,这个整型数字是一个由父节点维护的自增数字。
所以共有四种znode节点类型:
- PERSISTENT // 持久化节点
- PERSISTENT_SEQUENTIAL // 持久化排序节点</