Zookeeper的数据结构
树型结构,类似于文件目录.
Zookeeper的节点类型
临时节点,临时带编号节点,持久节点,持久带编号节点.
临时节点下不允许创建子节点.
Zookeeper角色
Leader,Follower.
Zookeeper的工作原理
服务提供者启动时,会将其服务名称,ip地址注册到配置中心。
服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表,并缓存到本地,以供后续使用。当消费者调用服务时,不会再去请求注册中心,而是直接通过负载均衡算法从IP列表中取一个服务提供者的服务器调用服务。
当服务提供者的某台服务器宕机或下线时,相应的ip会从服务提供者IP列表中移除。同时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
当某个服务的所有服务器都下线了,那么这个服务也就下线了。
同样,当服务提供者的某台服务器上线时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
服务提供方可以根据服务消费者的数量来作为服务下线的依据.
Zookeeper心跳检测机制
zookeeper提供了“心跳检测”功能,它会定时向各个服务提供者发送一个请求(实际上建立的是一个 socket 长连接),如果长期没有响应,服务中心就认为该服务提供者已经“挂了”,并将其剔除.
服务消费者会去监听相应路径,一旦路径有变化(增加或减少),zookeeper都会通知服务消费方服务提供者地址列表已经发生改变,从而进行更新
Zookeeper的选举机制
投票过半数则选举Leader成功,依据id进行投票,优先投给当前节点中id大的.选举成功后,后续来的节点,无论多大,都是Follower.
Zookeeper的监听原理
ZK客户端,会创建connet网络通信连接,listener监听线程.
通过connect连接将注册的监听事件发送给Zookeeper服务端.
服务端将监听事件添加到注册监听器列表,开始监听,监听到有数据或路径变化.将消息发送给listener.
listener调用process方法.
Zookeeper的常用命令
create /zk myData
get /zk [watch]
set /zk newDate
delete /zk
ls /zk [watch]
stat /zk [watch]
Zookeeper与分布式锁
使用zookeeper创建临时序列节点来实现分布式锁,适用于顺序执行的程序,大体思路就是创建临时序列节点,找出最小的序列节点,获取分布式锁,程序执行完成之后此序列节点消失,通过watch来监控节点的变化,从剩下的节点的找到最小的序列节点,获取分布式锁,执行相应处理,依次类推……