总结:
(1)Zookeeper 是一个有上下级关系(Leader 、follower 、Observer )的集群。
(2)客户端链接 zookeeper 集群是通过 Seesion 链接(TCP 长链接)。
(3)客户端链接以后可以对节点(存储在 zookeeper 上 znode)增删改查。
(4)Znode 有四种类型:临时、临时有序、持久、持久有序,对(znode)节点做增删改查时我们可以监控其动作(Watcher 机制)还可以对节点设置权限访问。
1.zookeeper是什么。
个人感觉就是我们需要一个用起来像单机但是又比单机更可靠的东西。它用起来像单机一样,能够提供数据的强一致性,但是其实背后是多台机器构成的集群。
如果把各个节点比作各种小动物,那协调者,就是动物园管理员,这也就是Zookeeper名称的由来了
Zookeeper是开源的分布式应用协调系统。
ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能
Zookeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心。 服务生产者将自己提供的服务注册到Zookeeper中心,服务的消费者在进行服务调用的时候先到Zookeeper中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据。如下图所示,在 Dubbo架构中 Zookeeper 就担任了注册中心这一角色。
2. zk官方内部实现原理:
集群间通过 Zab 协议(Zookeeper Atomic Broadcast)来保持数据的一致性。
zk满足的是cap中的cp(Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性))
zk搭建集群的时候,最好满足奇数。因为:半数以上的服务可用才可用
3.zookeeperzho中的一些重要概念
3.1 会话(Session)
Session 指的是 ZooKeeper 服务器与客户端会话。在 ZooKeeper 中,一个客户端连接是指客户端和服务器之间的一个 TCP 长连接。
3.2 Znode
Znode的数据模型如上图的zk的微观。
在Zookeeper中,node可以分为持久节点和临时节点两类。
(1) PERSISTENT:持久类型,如果不手动删除,就一直存在
(2) PERSISTENT_SEQUENTIAL
(3) EPHEMERAL:临时 客户端 session 失效就会随着删除节点 没有子节点
(4) EPHEMERAL_SEQUENTIAL 有序 自增
3.3 Watcher
Watcher(事件监听器),是Zookeeper中的一个很重要的特性。Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端上去,该机制是Zookeeper实现分布式协调服务的重要特性。
3.4 ACL
Zookeeper采用ACL(AccessControlLists)策略来进行权限控制.
4. Zookeeper中的集群角色介绍:
Zookeeper中引入了 Leader、Follower 和 Observer 三种角色
4.1. Leader
- 一个Zookeeper 集群同一时间只会有一个实际工作的Leader,它会发起并维护与各Follwer
及Observer 间的心跳。 - 所有的写操作必须要通过Leader 完成再由Leader 将写操作广播给其它服务器。只要有超过
半数节点(不包括observeer 节点)写入成功,该写请求就会被提交(类 2PC 协议)。
4.2. Follower
- 一个Zookeeper 集群可能同时存在多个Follower,它会响应Leader 的心跳,
- Follower 可直接处理并返回客户端的读请求,同时会将写请求转发给Leader 处理,
- 并且负责在Leader 处理写请求时对请求进行投票。
4.3. Observer
角色与Follower 类似,但是无投票权。Zookeeper 需保证高可用和强一致性,为了支持更多的客户端,需要增加更多Server;Server 增多,投票阶段延迟增大,影响性能;引入Observer,
Observer 不参与投票; Observers 接受客户端的连接,并将写请求转发给leader 节点; 加入更
多Observer 节点,提高伸缩性,同时不影响吞吐率。其次是 observer 不需要将事务持
久化到磁盘,一旦 observer 被重启,需要从 leader 重新同步整个名字空间。
5.zookeeper中的特性:
Zookeeper 是一个由多个 server 组成的集群,一个 leader,多个 follower。每个 server 保存一份数据副本。
全局数据一致
分布式读 follower,写由 leader 实施
更新请求转发,由 leader 实施
更新请求顺序进行,来自同一个 client 的更新请求按其发送顺序依次执行
数据更新原子性,一次数据更新要么成功,要么失败
全局唯一数据视图,client 无论连接到哪个 server,数据视图都是一致的
实时性,在一定事件范围内,client 能读到最新数据
6.ZAB协议
Zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。当服务启动或者在领导者崩溃后,Zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 的完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。一旦 leader 已经和多数的 follower 进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个 server 加入 zookeeper 服务中,它会在恢复模式下启动,发现 leader,并和leader 进行状态同步。待到同步结束,它也参与消息广播
结 束
1.zookeeper是什么。
2.zookeeper的基本原理
- ZooKeeper 的一些重要概念(会话(Session)、 Znode、版本、Watcher、ACL)
- ZooKeeper 集群角色介绍 (Leader、Follower 和 Observer 三种角色)
5.ZooKeeper 的特性。 - ZooKeeper的ZAB协议
参考博文:https://zhuanlan.zhihu.com/p/69246172
作业
课程一些参考
(1)
(2)
(3)