分布式之分布式锁

什么叫分布式锁

自行百度。。。

为什么需要分布式锁

在这里插入图片描述

分布式锁技术选型

分布式锁技术选型

文件系统

流程

从一个指定的位置判断是否存在lock.txt,不存在则创建(也就是意味着当前线程获得了锁),执行结束后删除lock.txt;存在时则创建不成功(进行循环等待,直到创建成功)。

问题

当t1创建lock.txt后,突然出现问题导致中断,那么lock.txt就不会被t1(创建它的线程)删除。这样就会导致lock.txt一直存在,t2一直循环,也就是出现了死锁。
在这里插入图片描述

数据库

其流程与文件系统的类似,都是出现创建锁后因为创建方突然中断而导致锁无法释放。

缓存

使用缓存作为分布式锁,比前面提到的两种方案突出的一个优点就是可以设置锁的过期时间,也就是说即使出现死锁,也只是一小段时间,等待死锁过期后,其他线程就可以继续竞争了。

Zookeeper

为什么说Zookeeper是最合适作为分布式锁的,首先了解下Zookeeper的一些特性。
在这里插入图片描述
重点说下临时节点:

临时节点的存活时间依赖于客户端会话,当会话结束,临时节点将会被自动删除(当然也可以手动删除临时节点)。

这也就意味着当连接到Zookeeper的多个客户端中,如果某个客户端断开连接,那它所创建的临时节点就会被自动删除。

介绍了拿到锁后是如何释放的,那接下来就是说明如何竞争锁的。
在这里插入图片描述
当进程1拿到锁还未释放时,进程2向锁(节点)注册监听事件,当锁被删除时,触发监听事件,从而唤醒进程2继续抢夺锁。

在这里插入图片描述

发布了107 篇原创文章 · 获赞 88 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/Code_shadow/article/details/100148718