当前位置: 首页 > news >正文

Zookeeper 4 Zookeeper JavaAPI 操作 4.8 分布式锁

Zookeeper

【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】

文章目录

      • Zookeeper
      • 4 Zookeeper JavaAPI 操作
        • 4.8 分布式锁
          • 4.8.1 分布式锁
          • 4.8.2 Zookeeper 分布式锁原理

4 Zookeeper JavaAPI 操作

4.8 分布式锁

4.8.1 分布式锁

在我们进行单机应用开发,涉及并发同步的时候,我们往往采用synchronized或者Lock的方式来解决多线程间的代码同步问题,这时多线程的运行都是在同一个JVM之下,没有任何问题。

在这里插入图片描述

但当我们的应用是分布式集群工作的情况下,属于多JVM下的工作环境,跨JVM之间已经无法通过多线程的锁解决同步问题。

在这里插入图片描述

那么就需要一种更加高级的锁机制,来处理种跨机器的进程之间的数据同步问题——这就是分布式锁。

常用的实现方式:

在这里插入图片描述

4.8.2 Zookeeper 分布式锁原理

核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除该节点。

[举个栗子]

在这里插入图片描述

现在 有三个客户端,和一个服务器,Server 里面有 根节点/ ,和两个子节点

现在比如说 client1 想要获取锁,就可以在 /lock 节点下再 创建一个子节点,用完锁后 删掉就行了

[流程]

  1. 客户端获取锁时,在lock节点[这个 节点名字无所谓]下创建临时顺序节点。

在这里插入图片描述

它们 三个 客户端每人都整了一个 ,一一对应

  1. 然后(所有客户端 会)获取lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。使用完锁后,将该节点删除。

  2. 如果发现自己创建的节点并非lock所有子节点中最小的【图中就是 指2、3 不是】,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个【只找一个】节点,同时对其注册事件监听器,监听删除事件。

在这里插入图片描述

所以在这里就是 2找1、3 找2 ,并添加监听器【监听删除 事件】

在这里插入图片描述

  1. 如果发现比自己小的那个节点被删除,则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点是否是lock子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。

【很巧妙】

在这里插入图片描述

在client1 用完锁后,lock/2 对 lock/1 进行的监听就会立马感知到,然后再次判断,OK,它现在是最小的了, 拿到锁

【这就是 Zookeeper 实现分布式 锁的原理】

相关文章:

  • 做好程序中的axios错误提示
  • Zookeeper 4 Zookeeper JavaAPI 操作 4.5 Curator API 常用操作【修改节点】
  • 自学编程的人成千上万,为什么坚持下来的没几个?
  • vue3中常用的三种组件传值方式
  • R语言ggplot2可视化:ggcharts包的lollipop_chart函数可视化棒棒糖图、lollipop_chart函数自动排序线条并水平显示
  • OLSR路由协议学习
  • 实验三 多层神经网络
  • 【Kafka】Linux下搭建kafka服务,完整学习案例
  • 2023年互联网与软件业的机遇与挑战
  • 【LeetCode每日一题】——152.乘积最大子数组
  • 学习Python编程好找工作吗?
  • 如何避免编程从入门到放弃?
  • RISCV-V-1.0向量扩展指令集学习
  • MFC Windows 程序设计[326]之表格控件例程二(附源码)
  • DELL Precison 7670 不能加载系统固态硬盘
  • ubuntu20.04 22.04下设置用户只能使用sftp, 不能登录ssh 的配置方法
  • Stealth-Persist混合内存系统中持久应用程序的体系结构支持
  • redis安装 3台机器 6节点
  • 锁分实锤!B站三体动画评分只有…好文!拆解追溯GPT-3.5各项能力起源;餐饮店后厨AI解决方案PreciTaste… | ShowMeAI资讯日报
  • mac系统M1pro芯片安装VMware Fusion虚拟机win11操作系统(原创详细版)