当前位置:网站首页>场景化面试:关于分布式锁的十问十答
场景化面试:关于分布式锁的十问十答
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章
- 分布式锁:所有的分布式锁都是错误的?
- 分布式锁:关键重地,非请勿入
- 如何设计更优的分布式锁?
关于我
边栏推荐
- Introduction to TS, constructor and its this, inheritance, abstract class and interface
- 【日常训练--腾讯精选50】89. 格雷编码(看题解才会的)
- Reading and writing operations of easyexcel
- Deployment of Jenkins under win7
- When a user logs in, there is often a real-time drop-down box. For example, entering an email will @qq com,@163. com,@sohu. com
- JMeter installation under win7
- Traps in the explode function in PHP
- Talk about my fate with some programming languages
- 校招期间 准备面试算法岗位 该怎么做?
- Comparison table of foreign lead American abbreviations
猜你喜欢
[case] Application of positioning - Taobao rotation map
Wood board ISO 5660-1 heat release rate mapping test
Pytorch实战——MNIST数据集手写数字识别
Arcgis\qgis no plug-in loading (no offset) mapbox HD image map
LeetCode_哈希表_困难_149. 直线上最多的点数
Golang (1) | from environmental preparation to quick start
Access Zadig self-test environment outside the cluster based on ingress controller (best practice)
EasyExcel的讀寫操作
秋招将临 如何准备算法面试、回答算法面试题
显示屏DIN 4102-1 Class B1防火测试要求
随机推荐
Is it necessary for bazel to learn
123456
Feng Tang's "spring breeze is not as good as you" digital collection, logged into xirang on July 8!
Test of incombustibility of cement adhesives BS 476-4
2022-07-03-CKA-粉丝反馈最新情况
ODPs next map / reduce preparation
Deployment of Jenkins under win7
力扣------经营摩天轮的最大利润
EN 438-7 laminated sheet products for building covering decoration - CE certification
Influence of oscilloscope probe on signal source impedance
Aitm 2-0003 horizontal combustion test
MySQL InnoDB Architecture Principle
Prior knowledge of machine learning in probability theory (Part 1)
MySQL deep paging optimization with tens of millions of data, and online failure is rejected!
五层网络协议
CLion配置visual studio(msvc)和JOM多核编译
XML modeling
xlrd常见操作
面试官:并发编程实战会吗?(线程控制操作详解)
Some things make feelings nowhere to put