Zookeeper脑图
2021-01-19 20:56:29 4 举报
AI智能生成
zookeeper脑图不断更新
作者其他创作
大纲/内容
Zookeeper分布式锁
非公平锁
羊群效应
所有的连接都在对同一个节点进行监听,当服务器检测到删除事件时,要通知所有的连接,所有的连接同时收到事件,再次并发竞争
公平锁
以上这两种加锁方式有一个共同的特质,就是都是互斥锁
同一时间只能有一个请求占用,如果是大量的并发上来,性能是会急剧下降的,所有的请求都得加锁,那是不是真的所有的请求都需要加锁呢?
共享锁
zookeeper和redis实现分布式锁区别
对比
redis
zookeeper
优缺点
对于可靠性而言,zookeeper比redis更强一点。
从性能上zookeeper更差点,写的机器更多。
启动或leader宕机选举leader流程
myid:每一台机器的标识
zxid:每台机器最大的事务标识,最后修改的数据
核心概念
用于存储少量数据的基于内存的数据库
两个核心的概念
文件系统数据结构
每个子目录项都被称作为 znode(目录节点)
znode的类型
PERSISTENT-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他将永远存在
PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
Container 节点
如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认60s 检查一次
TTL 节点
过了TTL指定时间时,被服务器删除
监听通知机制
监听通知
针对节点的监听:一定事件触发,对应的注册立刻被移除,所以事件监听是一次性的
针对目录的监听,目录的变化,会触发事件,且一旦触发,对应的监听也会被移除,后续对节点的创建没有触发监听事件
针对递归子目录的监听
Zookeeper事件类型
None: 连接建立事件
NodeCreated: 节点创建
NodeDeleted: 节点删除
NodeDataChanged:节点数据变化
NodeChildrenChanged:子节点列表变化
DataWatchRemoved:节点监听被移除
ChildWatchRemoved:子节点监听被移除
Zookeeper 经典的应用场景
分布式配置中心
分布式注册中心
分布式锁
分布式队列
集群选举
发布/订阅
ZooKeeper 内存数据和持久化
事务日志
针对每一次客户端的事务操作,Zookeeper都会将他们记录到事务日志中
Zookeeper也会将数据变更应用到内存数据库中
可以在zookeeper的主配置文件zoo.cfg 中配置内存中的数据持久化目录
Zookeeper在创建事务日志文件的时候就进行文件空间的预分配
顺序写机制
数据快照
数据快照用于记录Zookeeper服务器上某一时刻的全量数据
可以通过配置snapCount配置每间隔事务请求个数,生成快照
快照事务日志文件名为: snapshot.<当时最大事务ID>
日志满了即进行下一次事务日志文件的创建
有了事务日志,为啥还要快照数据?
快照数据主要时为了快速恢复
事务日志文件是每次事务请求都会进行追加的操作
而快照是达到某种设定条件下的内存全量数据
所以通常快照数据是反应当时内存数据的状态
事务日志是更全面的数据,
所以恢复数据的时候,可以先恢复快照数据,再通过增量恢复事务日志中的数据即可。
所以恢复数据的时候,可以先恢复快照数据,再通过增量恢复事务日志中的数据即可。
Zookeeper 集群模式
Leader
处理所有的事务请求(写请求),可以处理读请求,集群中只能有一个Leader
Follower
只能处理读请求,同时作为 Leader的候选节点,即如果Leader宕机,Follower节点要参与到新的Leader选举中,有可能成为新的Leader节点。
Observer
Observer:只能处理读请求。不能参与选举
Zookeeper集群安装
0 条评论
下一页