分布式锁实现方式介绍和Zookeeper实现原理
为什么80%的码农都做不了架构师?>>>
分布式锁实现的几种方式
基于数据库实现分布式锁(表、数据库排他锁)
基于缓存(redis,memcached,tair)
基于Zookeeper实现分布式锁
关注点:
单点问题?(集群)
失效时间?(锁的释放 VS 失效)
非阻塞?(while自旋 || wacther通知)
非可重入?(记录当前获得锁的机器的主机信息和线程信息;三种方式都是)
根据不同的应用场景正确选择:
————————————————————
从理解的难易程度角度(从低到高)
数据库 > 缓存 > Zookeeper
————————————————————
从实现的复杂性角度(从低到高)
Zookeeper >= 缓存 > 数据库
————————————————————
从性能角度(从高到低)
缓存 > Zookeeper >= 数据库
————————————————————
从可靠性角度(从高到低)
Zookeeper > 缓存 > 数据库
————————————————————
ZK分布式锁的实现
ZK分布式锁之前有提过,有简单互斥锁、互斥锁、读写锁;互斥锁是在简单互斥锁的基础上进行了优化,防止羊群效应问题,直接根据事件通知下一子节点来获得锁;
调整后的分布式锁算法流程如下:(优化为“等待前一个子节点删除通知”)
1.客户端连接zookeeper,并在/lock下创建临时的且有序的子节点,第一个客户端对应的子节点为/lock/lock-0000000000,第二个为/lock/lock-0000000001,以此类推。
2.客户端获取/lock下的子节点列表,判断自己创建的子节点是否为当前子节点列表中序号最小的子节点,如果是则认为获得锁,否则监听刚好在自己之前一位的子节点删除消息,获得子节点变更通知后重复此步骤直至获得锁;
3.执行业务代码;
4.完成业务流程后,删除对应的子节点释放锁。
分布式锁的几种实现方式:http://www.hollischuang.com/archives/1716
基于Zookeeper的分布式锁(源码分析):
http://www.dengshenyu.com/java/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/2017/10/23/zookeeper-distributed-lock.html
转载于:https://my.oschina.net/itommy/blog/1790534
分布式锁实现方式介绍和Zookeeper实现原理相关推荐
- 分布式锁用Redis坚决不用Zookeeper?
墨墨导读:为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景. 为什么用分布式锁? 系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查 ...
- redis分布式锁的安全性及与zookeeper的对比
上篇 网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词"Redis 分布式锁"随便到哪个搜索引擎上去搜索一下就知道了.这些文章的思路大体相近,给出的实现算法也 ...
- 关于几种分布式锁的简单介绍
什么是分布式锁 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁.进程锁. 1.线程锁 主要用来给方法.代码块加锁.当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段.线程锁只在同 ...
- 分布式锁(基于redis和zookeeper)详解
分布式锁(基于redis和zookeeper)详解 https://blog.csdn.net/a15835774652/article/details/81775044 为什么写这篇文章? 目前网上 ...
- Redis分布式锁实现方式
分布式锁一般有三种实现方式 1. 数据库乐观锁: 2. 基于ZooKeeper的分布式锁: 3. 基于Redis的分布式锁: 三种方式的优缺点分析 1.数据库乐观锁: 优点是实现简单,只需要for u ...
- 三种实现分布式锁的方式
一.为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应 ...
- 分布式锁系列--04关于分布式锁的选型分析02-Redlock的实现原理
欢迎关注公众号:java4all 上一文分布式锁系列–03关于分布式锁的选型分析01中,我们看到了单节点的redis分布式锁在failover时产生了无法解决的安全问题,因此,Redis的作者anti ...
- 分布式锁用Redis还是Zookeeper?
为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景. 作者:jianfeng来源:石杉的架构笔记|2019-07-16 09:22 为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场 ...
- java如何保证redis设置过期时间的原子性_分布式锁用 Redis 还是 Zookeeper
在讨论这个问题之前,我们先来看一个业务场景: 系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单. 由于系统有 ...
最新文章
- js如何让高度和宽度保持一致_如何实现一个下载进度条/播放进度条
- Flutter开发之BottomSheetDialog选择组件-5(44)
- OC__part11
- JS-for的衍生对象
- Win-MASM64汇编语言-通用寄存器AX/BX/CX/DX/SI/DI/BP
- linux服务器的又一管理利器webmin图解教程
- 2.Jenkins 权威指南 --- 配置Jenkins 服务器
- 功能三星Galaxy S2手机
- 2020云课堂智慧职教答案计算机,2020云课堂智慧职教答案英语,云智慧职教题库,智慧职教测试答案...
- 用CST进行多物理仿真,热仿真结果有误
- 计算机网络经过了几个阶段,计算机网络的发展经过哪几个阶段?
- C程序设计(第五版)谭浩强第七章课后答案
- 关系代数中的除法运算
- QQ音乐、网易云音乐、酷狗音乐歌单导入到Spotify
- 高仿Readhub小程序 微信小程序项目【原】
- m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法
- Windows下的gotoxy 函数
- 表单工作流审核步骤抄送功能介绍
- 用Python爬取知乎上关于程序员的神回复
- 文本溢出隐藏显示... 鼠标移动到元素显示全部内容
热门文章
- 类的初始化列表_【Flutter 111】Flutter手把手教程Dart语言——类、类的的成员变量和方法、类的构造函数...
- OpenResty的现状、趋势、使用及学习方法
- zookeeper专题:使用zookeeper实现分布式锁
- Docker的使用、底层原理及常用软件docker下载
- linux fpga 开发板,香蕉派BPI-F2S ,四核Linux工业级应用的开源硬件开发板,FPGA教学套装...
- 从源码分析RocketMQ系列-RocketMQ消息持久化源码详解
- Maven使用创建项目(一)
- 电脑有网络计算机共享怎么用,2台电脑怎么共享文件?没有网络也能共享【详解】...
- html文档包包含几个基本标记,HTML中包含哪些基本的标记?
- Redis进阶高可用之主从复制