分布式锁系列之zookeeper分布式锁和mysql分布式锁

news2024/11/20 17:39:27

目录

介绍

下载安装

 基本指令​编辑

java集成zookeeper

官方提供版

永久节点

 临时节点​编辑

 永久序列化节点

判断当前节点是否存在

 获取当前节点中的数据内容

 获取当前节点的子节点

更新节点内容

删除节点 

 zookeeper实现分布式锁

Mysql实现分布式锁

总结


介绍

ZooKeeper是一个开源的分布式协调服务,它提供了一套强大的原语和工具,用于构建分布式系统中的协调和同步机制。其中之一就是分布式锁。

分布式锁是一种用于在分布式系统中实现资源互斥访问的机制。在多个节点同时访问共享资源时,分布式锁可以确保只有一个节点能够获取到锁,从而避免数据竞争和冲突。

ZooKeeper分布式锁的实现主要依赖于ZooKeeper的有序节点和临时节点特性。下面是分布式锁的基本实现步骤:

  1. 创建一个持久的ZooKeeper节点作为分布式锁的根节点,例如/locks

  2. 当一个节点需要获取锁时,它会在/locks节点下创建一个有序的临时节点,例如/locks/lock-000000001

  3. 节点获取到锁的条件是它创建的节点是当前所有节点中最小的节点。

  4. 节点检查自己创建的节点是否是当前所有节点中最小的节点,如果是,则表示节点获取到了锁,可以继续执行业务逻辑;如果不是,则节点需要监听前一个节点的删除事件。

  5. 当前一个节点释放锁时,它会删除自己创建的节点。

  6. 其他节点监听到前一个节点的删除事件后,重复步骤4,直到获取到锁。

通过这样的方式,ZooKeeper分布式锁可以保证只有一个节点能够获取到锁,其他节点需要等待。当获取到锁的节点完成业务逻辑后,会释放锁,让其他节点有机会获取到锁。

需要注意的是,ZooKeeper分布式锁的实现需要考虑异常情况和竞态条件,例如节点宕机、网络分区等,以保证锁的可靠性和正确性。

ZooKeeper分布式锁是通过有序节点和临时节点特性实现的,它可以在分布式系统中实现资源的互斥访问,确保只有一个节点能够获取到锁。这种机制可以帮助开发者解决分布式系统中的并发访问问题。

下载安装

在官网进行下载安装包

Apache ZooKeeper

这里以长期稳定版编译版为例测试

连接服务器,创建zookeeper文件夹,然后将下载好的tar包上传至服务器

上传

 解压包

 tar -zxvf apache-zookeeper-3.8.2.tar.gz

查看解压后包

进入配置文件夹

 但是zookeeper启动时加载的是zoo.cfg配置文件,并不是该模板配置文件,所以在该模板配置文件基础上需要另外创建并书写一个zoo.cfg配置文件

cp zoo_sample.cfg zoo.cfg

来到zp目录下先创建一个数据目录,等下要书写在zoo.cfg配置文件中

,注意数据目录是和conf文件夹等同级 

 

复制data目录路径

编辑配置zoo.cfg文件

其他使用默认即可

 切换脚本目录启动zookeeper  注意 启动zookeeper需要jdk环境,需提前在服务器中配置好jdk环境

 ./zkServer.sh start   启动

 ./zkServer.sh stop  停止

 ./zkServer.sh restart 重启

 ./zkServer.sh status  查看状态

 基本指令

 

java集成zookeeper

官方提供版

引入所需依赖

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.7.0</version>
        </dependency>

永久节点

 

 

 临时节点

 由于临时节点在链接关闭后就自动清除掉,所以这里演示时加断点进行演示

 查看节点列表  临时节点test2存在

 放开断点

 

 永久序列化节点

 

永久临时序列化节点不再演示 

判断当前节点是否存在

先看下当前列表的节点有哪些

 

 获取当前节点中的数据内容

先设置node节点内容值

 

 获取当前节点的子节点

更新节点内容

 

删除节点 

先查看下node节点下有哪些节点

 

 zookeeper实现分布式锁

引入curator依赖 主要代码中使用的代码和场景继承自本博主上一篇redis分布式锁的场景,所以不再从头梳理

  <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.3.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

书写配置类

服务层:

重置库存后重启服务压测

 压测日志:

 可以看到在高并发场景下性能上并不是太好

查看库存:

符合预期库存为0没有超卖

Mysql实现分布式锁

实现思路:基于唯一键索引实现

新建一个lock表

 

代码实现

服务层

修改库存1000开始压测

 

 压测日志

性能感人o(╥﹏╥)o

库存结果

 

达到预期0 但是性能确实有些感人 

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/916886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于stm32推挽带有上下拉电阻的思考、IO口驱动能力是什么

1、发现推挽带有上下拉电阻 1.1、stm32手册 记忆中推挽是不需要上下拉的&#xff0c;没关注过&#xff0c;但是我真的理解上下拉吗&#xff0c;下图来自stm32f4的中文版和英文版的数据手册&#xff0c;没有翻译错&#xff0c;就是“推挽带有上下拉的能力”。 1.2、查找相关信…

tomcat8的安装和部署启动jpress应用

首先准备tomcat&#xff0c;jdk&#xff0c;jpress安装包 一. tomcat8的安装 1. 使用xftp等工具将软件包上传至Linux 2. 将jdk移至/usr/local/tomcat并安装jdk mv jdk-8u261-linux-x64.rpm /usr/local/tomcat yum localinstall jdk-8u261-linux-x64.rpm -y 3. 将tomca…

【PHP】数据类型运算符位运算

文章目录 数据类型简单&#xff08;基本&#xff09;数据类型&#xff1a;4个小类复合数据类型&#xff1a;2个小类特殊数据类型&#xff1a;2个小类类型转换类型判断整数类型浮点类型布尔类型 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自…

高忆管理:哪些股票建议不要选?是什么原因?

出资者在进行股票买卖时&#xff0c;股票的挑选也是很重要的一个过程&#xff0c;其决议了后期股票的开展情况以及出资者的盈亏情况。那么哪些股票主张不要选&#xff1f;是什么原因&#xff1f;下面就由高忆管理为大家分析&#xff1a; 1、成绩不好的股票 上市公司的成绩是支…

关于chromedriver.exe一系列问题的解决办法

最新 chromedriver.exe下载地址&#xff1a;https://googlechromelabs.github.io/chrome-for-testing/#stable 下载最新版本的 chromedriver.exe 将其解压在 python.exe 同目录下&#xff0c;以及Chrome 的路径下 例如&#xff1a; C:\Program Files\Google\Chrome\Applicati…

动态修改日志级别,太有用了!

首发于公众号&#xff1a;BiggerBoy 背景 我们在系统中一般都会打印一些日志&#xff0c;并且在开发、测试、生产各个环境中的日志级别可能不一样。在开发过程中为了方便调试打印了很多debug日志&#xff0c;但是生产环境为了性能&#xff0c;为了节约存储资源&#xff0c;我们…

设备管理系统是什么?的修设备管理系统有什么功能?

随着计算机技术的迅速发展和移动互联网的商业化和社会化应用&#xff0c;设备的种类和数量急剧增加。如何利用先进的网络技术和快速更新的计算机设备来有效地收集和处理设备信息&#xff0c;建立以信息化为核心的管理体系&#xff0c;减轻管理和业务人员的数据处理负担&#xf…

影像组学文章复现:ITHscore:通过多尺度放射学特征全面定量NSCLC肿瘤内异质性 ----小细胞肺癌肿瘤异质性评分

目的:通过计算机断层扫描(CT)图像量化非小细胞肺癌(NSCLC)的肿瘤内异质性(ITH)。 方法:整合局部辐射特征和全局像素分布模式,开发定量ITH测量-ITHscore。在六个患者队列(n = 1399)中检查ITHscore与肿瘤表型,基因型和患者预后的关联,以验证其在表征ITH方面的有效性…

【QT】绘制旋转等待

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 程序中经常会遇到耗时的操作,需要提供等待的窗口,防止用户多次点击造成卡顿等问题。本文分享旋转等待技术,希望对各位小伙伴有所帮助!结果如下:

长胜证券:越南首富,又火了!旗下汽车股市值盘中超越比亚迪!

当地时刻8月22日&#xff0c;美股三大股指涨跌纷歧&#xff0c;其中&#xff0c;道指跌0.51%&#xff0c;标普500指数跌0.28%&#xff0c;纳斯达克指数涨0.06%。 异动股方面&#xff0c;8月22日周二&#xff0c;越南电动轿车出产商VinFast Auto ADR盘中上涨超越167%&#xff0c…

uniapp日期选择组件优化

<uni-forms-item label="出生年月" name="birthDate"><view style="display: flex;flex-direction: row;align-items: center;height: 100%;"><view class="" v-

九龙湖街道社工站 开展家长交流互助社群亲子情景剧体验活动

为丰富辖区内小朋友们的暑期生活&#xff0c;促进亲子交流&#xff0c;8月20日&#xff0c;在红谷滩区民政局的领导下&#xff0c;九龙湖街道社工站链接赣红孵红石榴志愿服务队&#xff0c;以“家长交流互助社群”为依托&#xff0c;组织辖区内家庭到小哆哆沉浸式儿童剧场开展情…

Git企业开发控制理论和实操-从入门到深入(一)|为什么需要Git|Git的安装

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…

【笔记】MySQL行转列函数

GROUP_CONCAT()函数 创建表person_info&#xff0c;并插入数据 CREATE TABLE person_info (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(100) DEFAULT NULL,family varchar(100) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT8 DEFAULT CHARSETutf8;…

使用opencv-python在图片上显示中文

测试图像如下&#xff1a; 核心代码如下&#xff1a; import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFontdef cv2ImgAddText(img, text, left, top, textColor(0, 255, 0), textSize20):if (isinstance(img, np.ndarray)): #判断是否OpenCV图片类型…

如何获取微软商店应用的appx程序包,并实现离线安装

我们以“NVIDIA Control Panel”为例 &#xff08;1&#xff09;先在网页版Microsoft应用商店(https://www.microsoft.com/zh-cn/store/apps/?rtc1)这里找到NVIDIA Control Panel&#xff0c;将网页链接地址复制下&#xff1b; &#xff08;2&#xff09;到 https://store.r…

恒运资本:沪指震荡跌0.55%坚守3100点,券商等板块走低,数据要素概念再活跃

23日早盘&#xff0c;两市股指低开低走&#xff0c;沪指盘中再次失守3100点&#xff0c;深成指、创业板指跌幅均超1%&#xff1b;北向资金连续流出态势&#xff0c;半日净卖出超70亿元。 截至午间收盘&#xff0c;沪指跌0.55%报3103.1点&#xff0c;深成指跌1.08%&#xff0c;创…

解决 go mod tidy 加载模块超时

如果go mod tidy 加载模块超时 解决方法 修改GOPROXY: 查看go环境相关信息&#xff1a; go envgo env -w GOPROXYhttps://goproxy.cn

fdm-cli,一个致力于管理项目初始化模板的工具脚手架

希望各位可以了解fdm-cli&#xff0c;并在合适的时候尝试使用一下。 阅读本文你将获得 一个&#xff08;好用的&#xff09;项目模板初始化工具这个&#xff08;好用的&#xff09;工具的使用方法给作者点一个 star 的机会 一、不愿再复制粘贴 小N每次在写项目的时候&#x…

第三届“赣政杯”总决赛 | 赛宁筑牢党政机关安全屏障

为提高江西省党政机关网络安全意识&#xff0c;普及网络安全知识&#xff0c;提升网络安全防护能力&#xff0c;筑牢网络安全屏障&#xff0c;由江西省委网信办、江西省发展改革委主办&#xff0c;江西省大数据中心、国家计算机网络与信息安全管理中心江西分中心承办&#xff0…