欢迎光临散文网 会员登陆 & 注册

一分钟读懂zookeeper

2023-06-12 22:55 作者:懒人Java屈原  | 我要投稿

zookeeper经常被称作基础设施,kafka与dubbo这些都需要安装zookeeper的前提下才能运行,业务开发中也经常作为分布式锁的解决方案被应用,今天我们就来了解下zookeeper。

1.Zookeeper=文件系统+监听通知机制?

zookeeper与Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”。znode节点(目录节点)如图中的 NameService ,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

znode的四种类型:

  • PERSISTENT-持久化目录节点客户端与zookeeper断开连接后,该节点依旧存在

  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

  • EPHEMERAL-临时目录节点客户端与zookeeper断开连接后,该节点被删除

  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

2.zookeeper集群模式

zookeeper集群共有3种角色,分别是follower、leader、Observer:

leader:主节点,负责数据的写,也能进行读操作

             • 1.事务请求(写数据)的唯一调度和处理者,保证集群事务处理的顺序性

             • 2. 集群内部个服务器的调度者(管理follower,数据同步)

Follower主要有四个功能:    

              • 1. 处理非事务请求(读数据),转发事务请求(写数据)给leader

    • 2 .参与事务请求proposal投票(每个事务请求都需要过半机器投票才能被真正应用到ZK的内存数据库 中,这个投票+统计过程被称为Proposal流程)

    • 3 .参与leader选举投票

Observer:观察者,只负责数据的读,且不参加leader的选举与事务请求。

3.分布式锁方案比较

zookeeper实现分布式锁方法:

1.利用节点名称的唯一性来实现分布式锁

跟文件系统类似,多个客户端创建同一个目录,只会有一个成功。剩下的客户端陷入等待,一旦得到锁的客户端,删除节点,其余客户端开始新一轮竞争锁。会产生饥饿现象,可能导致有个线程,一直抢不到锁。但是对于防重复提交,可以使用。

2.利用临时顺序节点来加锁

每次去加锁,按照顺序创建顺序节点


一分钟读懂zookeeper的评论 (共 条)

分享到微博请遵守国家法律