当前位置:网站首页>场景化面试:关于分布式锁的十问十答
场景化面试:关于分布式锁的十问十答
2022-07-05 21:26:00 【InfoQ】
- 互斥性:在分布式高并发条件下,同一时刻只有一个线程可以获得锁。
- 超时机制:锁服务和请求锁的服务分散在不同的机器上面,它们之间是通过网络来通信的,所以我们需要用超时机制,来避免获得锁的节点故障或者网络异常,导致它持有的锁不能释放,出现死锁的情况。
- 可重入性:一个节点的一个线程如果已经获得这把锁,那么这个线程在持有锁的期间,可以再次成功获取锁。
- 公平性:根据具体的实现,锁可以分为公平锁和非公平锁,假如目前有三个线程在竞争同意把锁,线程 A 成功获得锁,线程 B 和线程 C 没有获取到并阻塞等待 A 释放锁,且线程 B 先于线程 C 阻塞等待,那么在线程 A 释放锁后,这把锁会被等待时间最长的线程 B 获得,按照先来先得的原则,那么这把锁就是公平锁,反之就是非公平锁。
- 完备的锁接口:即锁的接口定义中,加锁操作要同时提供阻塞式接口 lock 和非阻塞式接口 tryLock,解锁操作要提供 release 接口。
- 基于关系型数据库(例如 MySQL):创建一张表用于记录共享资源信息,对临界资源做唯一性约束,通过增加一条记录来对某个资源加锁,通过删除记录释放锁。
- 基于分布式缓存 Redis :通过调用 Redis 函数 SETNX+EXPIRE 实现,同时为了保证原子性,可以通过 Lua 脚本来实现锁的设置和过期时间的原子性。在 Redis 2.6.12 版本后 SETNX 增加了过期时间参数,也可以直接使用这个重载方法。SETNX 方法返回 1 表示获得 key 所代表的锁,返回 0 表示获取锁失败
- 基于分布式协调服务 ZooKeeper :在对应的持久节点 shared_lock 的目录下为每个进程创建一个临时顺序节点,然后查看哪个进程对应的节点编号最小,最小说明式最先创建的,因此获得锁,否则,等待最小编号节点释放锁。
参考资料
- 《高性能Java架构:核心原理与案例实战》第12章
- 分布式锁:所有的分布式锁都是错误的?
- 分布式锁:关键重地,非请勿入
- 如何设计更优的分布式锁?
关于我

边栏推荐
猜你喜欢

Feng Tang's "spring breeze is not as good as you" digital collection, logged into xirang on July 8!

Teach yourself to train pytorch model to Caffe (I)

Comprehensive optimization of event R & D workflow | Erda version 2.2 comes as "7"

Uni app Bluetooth communication

張麗俊:穿透不確定性要靠四個“不變”
![R language [data management]](/img/41/b89bb8794c06280e58988e1c1a5e02.png)
R language [data management]
![[case] Application of element display and hiding -- element mask](/img/6e/6ea484a6e5d547e01dd8820af8e314.png)
[case] Application of element display and hiding -- element mask

Arcgis\qgis no plug-in loading (no offset) mapbox HD image map

Add ICO icon to clion MinGW compiled EXE file

力扣------经营摩天轮的最大利润
随机推荐
Five layer network protocol
[daily training -- Tencent select 50] 89 Gray code (only after seeing the solution of the problem)
Cross end solution to improve development efficiency rapidly
EN 438-7建筑覆盖物装饰用层压板材产品—CE认证
有些事情让感情无处安放
Selenium finds the contents of B or P Tags
校招期间 准备面试算法岗位 该怎么做?
Is it necessary for bazel to learn
大二下个人发展小结
Binary search
Teach yourself to train pytorch model to Caffe (I)
Zhang Lijun: penetrating uncertainty depends on four "invariants"
SYSTEMd resolved enable debug log
MQ----activeMq
Parker driver maintenance COMPAX controller maintenance cpx0200h
EN 438-7 laminated sheet products for building covering decoration - CE certification
sql常用语法记录
vant 源码解析之 utils/index.ts 工具函数
@Validated basic parameter verification, grouping parameter verification and nested parameter verification
Simple getting started example of Web Service