zookeeper:

 

1.zk的主要作用:

  1.zk+dubbo 注册数据的时候 生产者和消费者节点下url 为临时节点。 其余如配置文件等节点都是持久节点。
  2.作为分布式锁中间件。
  3.分布式job,主节点运行job
 

2.zk 节点:

  1.持久化节点
    一旦创建,永久存在,哪怕客户端跟zk断开,除非手动删除
  2.持久化顺序编号节点
    一旦创建,永久存在,哪怕客户端跟zk断开,除非手动删除,只是存在顺序编号
  3.临时节点
    创建后,客户端跟zk断开,节点被删除。
  4.临时顺序节点
    创建后,客户端跟zk断开,节点被删除,只是zk给该节点名称进行了顺序编号。
  5.Container 节点 容器节点
    3.5.3版本新增,如果Contailner节点下面没有子节点,则contailner节点在未来会被zk自动清除,定时任务默认60s,检查一次
  6.TTL节点
    默认禁用,只有通过 配置开启不稳定。 过了指定时间会被删除。
 
监听节点都是一次性监听,监听到节点后,该节点发生便会不会再被监听到。
 
 

3.zk 分布式锁:

  zk锁 访问比自己小znod节点,是否存在锁,存在则等待,不存在则获取锁。
  zk一般是公平锁,因为如果是非公平锁,所有节点都监听最小节点,最小节点如果释放,会造成羊群效应。
  
  2.1 非公平状态
    1.获取锁
    2.判断当前锁是否被其他事务已经获取
      2.1已被获取,监听等待
      2.2未被获取,创建节点
    3.是否创建成功
      3.1 未成功,监听等待
      3.2 成功,获取锁
    4.获取到锁,处理完成业务,释放锁。--删除节点 并通知监听,可以前去获取锁。
 
  缺点:会出现羊群效应,在高并发场景,当锁释放,即节点删除时,所有连接都监听到,此时再次并发竞争。
 
  2.2 公平锁:
    1.请求进来,直接在/lock节点下创建一个临时顺序节点。
    2.判断自己是不是lock节点的最小节点
      2.1 是最小节点,获取锁
      2.2不是最小节点,对当前节点进项监听 watch
    3.获取锁的请求,处理完释放锁,即删除delete节点,然后后继下一个节点,重复2操作
 

4.消息广播

client 端 发送请求:例如一个写命令
  1.Leader接受后,封装成一个事务Proposal,发送给所有的Follwer,
    1.1 Leader 写本地数据文件
    1.2 Leader 给自己发送ack
  2.Follower接受到leader的事务Proposal
    2.1 写本地数据文件
    2.2 返回ack
  3.Leader接受到半数以上的ack发送commit命令
    3.1 默认写成功
 
    3.2 发送 inform让 observer存储消息
    3.3 自己commit到内存数据
    3.4 挥发节点数据变动通知给客户端,触发客户端监听事件
    3.5 返回客户端,命令操作结果
  4.Follower 接受到commit,commit写自己的内存数据
 

5.崩溃恢复

  1.ZAB协议去报丢弃那些只有Leader提出/复制,但没有提交的事务。
  2.ZAB协议确保那些已经在Leader提交的事务最终会被所有服务器提交。
 

6.zk选举leader

  初始选举:选举格式vote =(myid,ZXID) myid ====zk的服务器id zxid事务id 初始选举的时候值为0 第一次选举的时候,自己投自己一票。
   此时服务器,每人都是自己一票,然后比较自己投出的票,以及收到票,判断谁应该为leader,默认myid大的应该为leader。
  此时选举出leader。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @   a菜搬砖  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示