疫情不断,学习怎能断,今天主要学习分布式锁相关原理
分布式锁深度剖析
1、分布式锁的应用场景
生产一个具体业务场景的唯一订单编号,并发场景下订单号生产会重复嘛?
2、分布式锁的原理、实现方式
锁具有的特点:
-
排他性:只有一个线程能获取
在计算机技术中,可提供排他性的有:文件系统,数据库(主键 唯一约束 )、缓存redis(setnx)、zookeeper(类似文件系统)
-
阻塞性:其他未抢到的线程阻塞,直到锁释放出来,再抢
-
可重入性:线程获得锁后,后续是否可重复获取该锁
常用分布式锁实现技术:
-
基于数据库实现
性能差,容易出现单点故障,锁没有失效时间,容易死锁
-
基于缓存实现
实现复杂,性能好,存在死锁(或段时间死锁)的可能
-
基于Zookeeper实现
实现相对简单、可靠性高、性能较好,不出现死锁
3、基于Zookeeper的分布式锁的实现
Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,Hadoop和Hbase的重要组件。
Zookeeper特点:
- 节点数数据结构,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据;
- 通过客户端可对znode进行增删改查操作,还可以注册watcher监控znode
Zookeeper节点类型:(在同一个znode点下,不允许存在同名节点)
- 持久节点
- 持久顺序节点
- 临时节点
- 临时顺序节点
Zookeeeper应用场景
-
数据发布订阅(配置中心)
-
命名服务
-
Master选举
-
集群管理
-
分布式队列
-
分布式锁
Zookeeper实现分布式锁
-
特性1实现:同父的子节点不可重名
不可以用持久节点(万一持有锁的进程挂了,可就死锁了)
这种会出现惊群效应,在集群规模较大的环境中带来的危害:
巨大的服务器性能损耗
网络冲击
可能造成服务挂了
-
特性2实现:临时顺序节点(解决惊群效应)
4、Redisson分布式锁的实现
来源:oschina
链接:https://my.oschina.net/lihua20103181/blog/3168753