服务越来越对,人工管理和维护服务及地址的配置地址信息会越来越困难,单点故障的问题也凸显出来。一旦服务路由或者负载均衡服务器宕机,依赖他的所有服务均将失效。
什么是 zookeeper?
zookeeper 是一个开源的分布式协调服务。zookeeper 的设计目标是将哪些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集(由若干条指令组成的,完成一定功能的一个过程),并且以一些列简单一用的接口提供给用户使用。
zookeeper 安装部署
带 Observer 角色的集群
zookeeper 的由来?
zookeeper可以做什么?
- 防止单点故障
所以这个中间件需要考虑到集群,而且这个集群还需要分摊客户端的请求流量
- 各个节点数据保持一致性
所以这个集群中涉及到数据同步以及会存在leader 节点
3.如何选举出leader以及leader挂了以后,如何恢复?
zookeeper 用了基于 paxos 理论所衍生出来的 ZAB 协议
4.如何做到分布式事务一致性?
2PC 协议和3PC 协议
2pc协议
zookeeper 的集群
在 zookeeper 中,客户端会随机连接到 zookeeper 集群中的一个节点,如果是读请求,就直接从当前节点中读取数
据,如果是写请求,那么请求会被转发给leader提交事务,然后 leader 会广播事务,只要有超过半数节点写入成功,那么写请求就会被提交(类 2PC 事务)
集群角色
Leader 角色
Follower 角色
Observer 角色
ZAB 协议
ZAB(Zookeeper Atomic Broadcast) 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子
广播协议。
ZAB 协议包含两种基本模式,分别是
1. 崩溃恢复
2. 原子广播
消息广播的实现原理
崩溃恢复(数据恢复)
1.已经被处理的消息不能丢失
2. 被丢弃的消息不能再次出现
zxid,epoch
每一提议都会带有一个唯一的zxid,当leader挂掉,zxid最大并且epoch最大的被选举为最新的leader。
leader 选举
启动的时候的 leader 选举
比较zxid,再比较myid,再比较epoch
leader 崩溃的时候的的选举
余下的非 Observer 服务器进行比较zxid以及epoch
数据存储
事务日志
快照日志
运行时日志 bin/zookeeper.out
数据的增删改查操作
事件机制
如何注册事件机制?
通过这三个操作来绑定事件 :getData、Exists、getChildren
如何触发事件?
凡是事务类型的操作,都会触发监听事件。
create /delete /setData
什么样的操作会产生什么类型的事件呢?
事件的实现原理