分布式锁之Zookeeper实现

2023-10-27

ZooKeeper 有四种节点类型:

  • 持久节点;
  • 持久顺序节点;
  • 临时节点;
  • 临时顺序节。

利用 ZooKeeper 支持临时顺序节点的特性,可以实现分布式锁。

当客户端对某个方法加锁时,在 ZooKeeper 中该方法对应的指定节点目录下,生成一个唯一的临时有序节点。

判断是否获取锁,只需要判断持有的节点是否是有序节点中序号最小的一个,当释放锁的时候,将这个临时节点删除即可,这种方式可以避免服务宕机导致的锁无法释放而产生的死锁问题。

ZooKeeper 分布式锁流程:

  1. 客户端连接 ZooKeeper,并在根节点 /lock 下创建临时有序子节点,第一个客户端对应的子节点为 /lock/lock01/00000001,第二个为 /lock/lock01/00000002;
  2. 其他客户端获取 /lock01 下的子节点列表,判断自己创建的子节点是否为当前列表中序号最小的子节点;
  3. 如果是则认为获得锁,执行业务代码,否则通过 watch 事件监听 /lock01 的子节点变更消息,获得变更通知后重复此步骤直至获得锁;
  4. 完成业务流程后,删除对应的子节点,释放分布式锁。

在实际开发中,可以应用 Apache Curator 来快速实现分布式锁,Curator 对 ZooKeeper 原生 API 做了抽象和封装。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式锁之Zookeeper实现 的相关文章

  • 缓存系列文章--8.热点key问题(mutex key)

    转载请注明出处哈 http carlosfu iteye com blog 2269678 一 引出热点key问题 我们通常使用 缓存 过期时间的策略来帮助我们加速接口的访问速度 减少了后端负载 同时保证功能的更新 一般情况下这种模式已经基
  • Linux学习笔记——ZooKeeper集群安装部署

    5 8 ZooKeeper集群安装部署 5 8 1 简介 Zookeeper是一个分布式的 开放源码的分布式应用程序协调服务 是Hadoop和HBase的重要组件 它是一个为分布式应用提供一致性服务的软件 提供的功能包括 配置维护 域名服务
  • zookeeper入门到精通03——zookeeper集群搭建

    zookeeper集群搭建 3 1 多虚拟机环境搭建 3 2 zookeeper集群搭建 3 1 多虚拟机环境搭建 我们需要搭建zookeeper集群 而由于zookeeper的的服务器数量需要设置为单数 前文介绍了原因 一个zookeep
  • Arthas 定位CPU跑满问题,源头竟是Apache Beanutils

    一 背景 大早上 线上k8s 机子 某个机子 cpu 飙高 导致k8s 健康检查失败 线上环境会自动执行jstack 上传到oss 通知到 钉钉告警群 直接分析锁 cpu 高的线程 二 过程分析 2 1 排查cpu 占用最高的线程 使用js
  • linux上zookeeper单机搭建伪集群

    Zookeeper 一 下载zookeeper 解压到指定文件夹下 tar zxvf apache zookeeper 3 5 8 bin tar gz C home zk 改个名字 这个随意 mv apache zookeeper 3 5
  • Dubbo高级应用-服务治理

    目录 1 dubbo admin 2 7 x版本安装部署 1 1 下载源码 1 2 部署访问 2 路由规则 2 1 Dubbo API配置 2 2 管理控制台配置 3 规则动态配置 3 1 应用粒度 3 2 服务粒度 4 服务降级 5 集群
  • Kafka常见的导致重复消费原因和解决方案

    点击上方蓝色字体 选择 设为星标 回复 资源 获取更多资源 大数据技术与架构 点击右侧关注 大数据开发领域最强公众号 暴走大数据 点击右侧关注 暴走大数据 问题分析 导致kafka的重复消费问题原因在于 已经消费了数据 但是offset没来
  • Windows系统下zookeeper启动报错JAVA_HOME is incorrectly set

    最近在Windows系统下 下载了zookeeper 3 5 2 alpha这个版本的zookeeper 把配置文件zoo example cfg重命名为zoo cfg后 直接双击zkServer cmd文件启动结果命令行窗口闪一下就消失了
  • 大数据技术之Zookeeper

    第1章 Zookeeper入门 1 1 概述 Zookeeper是一个开源的分布式的 为分布式框架提供协调服务的Apache项目 Zookeeper从设计模式角度来理解 是一个基于观察者模式设计的分布式服务管理框架 它负责存储和管理大家都关
  • docker中的zookeeper安装、连接及常见命令

    一 docker安装 1 搜索一下Zookeeper镜像 这一步可以省略 docker search zookeeper 2 从Docker上下载zookeeper docker pull zookeeper 3 启动Zookeeper镜像
  • INFO zookeeper.ClientCnxn: Opening socket connection to server***/192.168.80.151:2181. Will not

    at org apache zookeeper ClientCnxnSocketNIO doTransport ClientCnxnSocketNIO java 361 at org apache zookeeper ClientCnxn
  • Kafka一致性

    一 存在的一致性问题 1 生产者和Kafka存储一致性的问题 即生产了多少条消息 就要成功保存多少条消息 不能丢失 不能重复 更重要的是不丢失 其实就是要确保消息写入成功 这可以通过acks 1来保证 保证所有ISR的副本都是一致的 即一条
  • Docker搭建zookeeper

    问题背景 前言 本文参考自 docker compose快速搭建Zookeeper集群 熬到凌晨三点多验证部署成功 网上有很多文章已经无法正确部署了 因为有些东西版本升级了 版本跟不上就会报错 还有一种更加详细更加全面的部署方式 Docke
  • Dubbo源码分析-服务导出源码解析(三)

    在这个版本中dubbo会通过注解 PostConstruct把ServiceBean实例放到ConfigManager中 public abstract class AbstractConfig implements Serializabl
  • Spring-boot+Dubbo(直连模式)

    Spring boot Dubbo 直连模式 Demo 这里应该有很多人会问 直连模式 什么鬼啊 一般情况下我们进行微服务开发时 都是通过zookeeper等注册中心来实现服务的提供和引用的 那直连模式没啥用啊 其实不然 直连模式大有用处
  • kafka的安装和使用

    ZooKeeper简介 ZooKeeper 是一个为分布式应用所设计的分布的 开源的 java 协调服务 分布式的应用可以建立在同步配置管理 选举 分布式锁 分组和命名等服务的更高级别的实现的基础之上 ZooKeeper 意欲设计一个易于编
  • 如何实现一个分布锁?

    基本概念 为何需要分布式锁 传统环境中的情况 在程序开发过程中不得不考虑的就是并发问题 在java中对于同一个jvm而言 jdk已经提供了lock和同步等 但是在分布式情况下 往往存在多个进程对一些资源产生竞争关系 而这些进程往往在不同的机
  • zookeeper 搭建教程(完整版)

    zookeeper 搭建教程 完整版 1 解压zookeeper文件 root master tar zxvf opt software apache zookeeper 3 5 7 bin tar gz C opt module 修改文件
  • Nacos、ZooKeeper和Dubbo的区别

    Nacos ZooKeeper和Dubbo是三个不同的分布式系统组件 它们之间有以下几点区别 功能定位 Nacos主要提供服务发现 配置管理和服务治理等功能 而ZooKeeper主要是分布式协调服务 提供了分布式锁 分布式队列等原语 Dub
  • ZooKeeper踩坑

    一 下载安装包时要下载文件名中带有bin的安装包 否则会报错 找不到或无法加载主类 org apache zookeeper server quorum QuorumPeerMain Error contacting service 这是由

随机推荐

  • ReactHooks常用钩子总结

    ReactHooks常用钩子 重学react 这里对常用的ReactHooks做一下简单的总结 1 useState useState 会返回一个数组 一个 state 一个更新 state 的函数 在初始化渲染期间 返回的状态 state
  • 左值与右值

    目录 一 类型 二 地址 三 举例 一 类型 1 均与类型无关 int型 float型等等 均有 二 地址 1 右值不可取地址 引用的右值 程序没有分配内存区域 无地址 2 左值可以取地址 地址为所引用的实例 变量 对象的地址 int ma
  • Qt利用setStyleSheet设置样式

    Qt中设置按钮或QWidget的外观是 可以使用QT Style Sheets来进行设置 非常方便 可以用setStyleSheet font bold font size 20px color rgb 241 70 62 backgrou
  • [总结]怎么给VM(虚拟机)添加新磁盘

    1 关闭系统 点击VM gt Settings弹出的Add Hardware Wizard对话框 点击Add gt Hard Disk gt Next gt Create a new virtual disk gt SCSI Recomme
  • 软件设计 基础篇(二) 交互设计

    软件设计 基础篇 系列文章目录 软件设计 基础篇 二 交互设计 文章目录 软件设计 基础篇 系列文章目录 1 软件设计 1 1 设计简介 1 2 设计基础 2 交互设计 2 1 交互概述 2 2 交互起源 总结 1 软件设计 软件设计是从软
  • Shell函数调用

    文章目录 一 函数基本格式 二 函数调用 2 1函数中调用 2 2函数调用函数 2 3外部调用 2 4案例 三 总结 在shell脚本中 有些命令或者某些操作需要频繁的使用时 每次都重新写太过繁琐 这时我们就可以使用函数 当需要使用时 直接
  • 2022年开始学习Delphi并成为Delphi程序员的5个重要原因

    Delphi 是编程界的传奇语言之一 是软件开发历史的基石 随着新平台和框架的出现 新语言脱颖而出 但 Delphi 因其作为跨平台本机原生开发工具的可靠性和有效性而在IT界发展趋势来来去去的大潮中站稳了脚跟 更重要的是 随着时间的推移 D
  • 用python做一个随机点名程序(不重复点名)

    用python做一个简单的随机点名程序 不重复点名 这是我来到csdn的第一篇文章 内容如果有瑕疵的地方或者代码可以进一步改善 请大家对我指点一二 谢谢 废话不多说 上代码 import random 导入随机模块 import pytts
  • centos7 新磁盘挂载扩展到根目录

    摘要 局域网 ESXi 上搭建的 gitlab 代码仓库不能使用 查看了一下是 dev mapper centos root 路径存储满了 这里记录一下把新增磁盘挂载到根目录下的过程 在为 liunx 虚拟机扩充磁盘的时候 只能是在关机状态
  • 【对比Java学Kotlin】扩展

    扩展概述 以 JDK 内置的集合 ArrayList 为例 如果我们想给其添加一个能力 交互两个元素 swap index1 index2 我们应该怎么做 常见的有如下方式 工具类 静态方法 以 ArrayList 和要交换的两个 inde
  • node的child_process的execSync方法调用cmd报错

    const execSync require child process execSync node modules bin babel plugins router generator src out dir plugins router
  • 医院数据防泄露保护系统解决方案

    医院数据防泄露保护系统解决方案 目 录 1 医院需求分析 2 解决方案综述 2 1 产品部署示意图 3 产品优势功能 3 1 数据库审计与风险控制系统 3 1 1 事前安全风险评估 3 1 2 实时统方行为监控 3 1 3 双向审计让统方更
  • 95-36-030-ChannelHandler-ChannelInboundHandler

    文章目录 1 概述 2 继承体系 3 ChannelInboundHandler 4 ChannelInboundHandlerAdapter 1 概述 ChannelInboundHandler处理入站事件 以及用户自定义事件 2 继承体
  • SpringCloud Gateway API接口加解密

    接口范围 所有GET请求 白名单除外 body 体 是 application json 和 application json utf8 的 POST请求 白名单除外 POST url传参也支持 白名单除外 启用禁用 版本 后端提供独立接口
  • java程序内存占用过高的问题定位分析方法

    线上应用的故障排查能力是一个高级软件开发人员的必修课 也最能体现一个技术人员的工作经验和能力 从事Java开发 经常会碰到下面两种异常 1 java lang OutOfMemoryError PermGen space 2 java la
  • python下使用unrar出现错误的问题

    首先说一下我的系统和Python版本信息 win7 python2 7 12 我找了两篇个人认为比较好的文章 第一篇http blog csdn NET luoye7422 article details 41873499 按照他的方法来确
  • OpenFeign基础应用以及Sentinel整合OpenFeign使用

    OpenFeign基础应用 概念 OpenFeign是一种声明式 模板化的HTTP客户端 在Spring Cloud中使用OpenFeign 可以做到使用HTTP请求访问远程服务 就像调用本地方法一样的 开发者完全感知不到这是在调用远程方法
  • Spring 学习笔记03 - AOP

    目录 AOP 概述 AOP 是什么 AOP 相关术语 基于 XML 配置 AOP 简单实现 AOP 的配置步骤 基于注解配置 AOP 需要用到的新注解 简单实现 使用注解配置 AOP 的 bug AOP 概述 AOP 是什么 AOP Asp
  • 面阿里P6需要掌握的部分技术

    Java集合 HashMap和ConcurrentHashMap 平时最好有读一些源码 最好知道每个参数为什么设置成这么大 有什么好处 JUC包肯定要学 即使平时的编程根本不用 也必须得会 至少要知道aba cas aqs unsafe v
  • 分布式锁之Zookeeper实现

    ZooKeeper 有四种节点类型 持久节点 持久顺序节点 临时节点 临时顺序节 利用 ZooKeeper 支持临时顺序节点的特性 可以实现分布式锁 当客户端对某个方法加锁时 在 ZooKeeper 中该方法对应的指定节点目录下 生成一个唯