分布式架构下实现分布式锁使用数据库方案 Zookeeper分布式锁Redis分布式锁
Posted Acmen-zym
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式架构下实现分布式锁使用数据库方案 Zookeeper分布式锁Redis分布式锁相关的知识,希望对你有一定的参考价值。
分布式锁的简介
分布式锁是需要独立于每个服务器之外的,不能是某一个业务服务器中的。
数据库方案
利用主键冲突控制一次只能一个服务器中的一个线程获取锁,需要自己去实现阻塞、不可重入、失效时间才行。阻塞利用while可以做简单的实现,不可重入可以在递归线程中加上自旋计数进行简单处理,失效时间可以这表中加入一个时间字段,然后利用一些定时任务进行处理
Zookeeper分布式锁
zookeeper通过创建临时节点(znode)来判断是否获取到了锁,类似于这平时我们用电脑的时候,在同一个文件夹下建相同名字文件一样的原理,是不能创建两个相同名字的文件的。zookeeper是不会出现死锁的,如果有个客户端获取到锁后突然挂掉了,zookeeper会有一个监听机制,去判断这个客户端是否存活,如果客户端不在了则会去删掉临时节点(znode),其他客户端就可以重新获取锁了。同时zookeeper利用时间顺序节点来解决惊群效应,惊群效应比如说现在有100个服务在等待获取锁,但是你之有一把锁,这个时候全部唤醒是没有必要的,因为全部唤醒也只能有一个获取到锁。
Redis分布式锁
redis主要是通过setNX实现,setNX是只有key不存在的时候才能设置成功,命令在设置成功时返回1 ,设置失败时返回 0 。redis处理网络请求的时候是一个单线程,也就是天然优势,不需要考虑并发安全。在使用时为了防止锁被其他线程释放,在value中存入锁的唯一标识,在释放锁的时候做value验证。可重入性,锁的时间延期没有实现,需要通过redisson解决
以上是关于分布式架构下实现分布式锁使用数据库方案 Zookeeper分布式锁Redis分布式锁的主要内容,如果未能解决你的问题,请参考以下文章