近期对zookeeper进行了学习,简单做一个知识总结。
一、什么是Zookeeper
ZooKeeper是一个分布式的 、开放源码 的分布式协调服务 ,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。由于Hadoop生态系统中很多项目都依赖于zookeeper,如Pig,Hive等, 似乎很像一个动物园管理员,于是取名为Zookeeper。
二、为什么要使用Zookeeper
- 能够通过 Zab 协议来
保证分布式事务的最终一致性 - 同redis一样,
内存操作
1. zookeeper 特点
- 顺序性: 从同一客户端发起的事务请求,最终按照顺序应用到zookeeper中;
Leader和Follower的连接有队列的存在,保证了顺序性 - 原子性:整个集群,对于事务请求,要么全部应用成功,要么都没有应用;
ZAB协议 - 单一系统映像:无论客户端连接到哪个服务器,都将看到相同的服务视图;
- 可靠性:具有简单、健壮、良好的性能,如果消息被推送到一台服务器接收,那么它将被所有的服务器接收;
只能通过Leader对数据进行增改操作 - 及时性:系统的客户视图保证在特定时间范围内是最新的。
2. zookeeper数据结构
在zookeeper中,它的数据结构与Linux很相似,像一个树形,有一个根节点,在根节点的基础上挂子节点。
- 每一个节点都是一个znode节点
- 每个节点可以存 1M 的数据
znode的类型: 可分为三类:持久性节点、临时性节点、顺序性节店,开发中有四种类型:持久节点、持久顺序节点、临时节点、临时顺序节点。
- 持久节点:节点被创建后会一直存在服务器,直到删除操作主动清除,这种节点也是最常见的类型;
- 持久顺序节点:有顺序的持久节点,节点特性和持久节点是一样的,只是额外特性表现在顺序上。顺序特性实质是在创建节点的时候,会在节点名后面加上一个数字后缀,来表示其顺序;
- 临时节点:会被自动清理掉的节点,它的生命周期和客户端会话绑在一起,客户端会话结束,节点会被删除掉。与持久性节点不同的是,临时节点不能创建子节点。
- 临时顺序节点:有顺序的临时节点,和持久顺序节点相同,在其创建的时候会在名字后面加上数字后缀。
znode中的存储内容有两部分:节点数据内容 和 节点状态信息 节点数据内容就是业务中要存储的数据,节点状态信息:
- czxid(Create zxid) :表示节点被创建时的事务ID;
- mzxid(Modified zxid):表示节点最后一次被修改时的事务ID;
- ctime(Create time):表示节点创建时间;
- mtime(Modified time):表示节点最后一次修改的时间;
- pzxid:表示该节点的子节点列表最后一次被修改时的事务 ID。只有子节点列表变更才会更新 pZxid,子节点内容变更不会更新。
- cersion:表示子节点的版本号;
- dataVerion:表示内容版本号;
- dataLength:表示数据长度;
- numChildren:表示子节点数;
- ephemeralOwner 表示创建该临时节点时的会话 sessionID,如果是持久性节点那么值为 0。
3. zap协议
可参考:
Zab协议详解
4. 使用场景
三、具体场景实现
配置中心:zookeeper实现配置中心 分布式锁:待完成
|