zookeeper分布式锁的原理是什么?

开课吧小一2021-04-06 12:01

在单体环境中,遇到临界资源的时候我们会使用Synchronized或者RetreenLock在调用临界资源前上锁。但是在分布式的环境下,锁住单体资源就不起作用了,这个时候就需要用到分布式锁。分布式锁的原理就是借用外部的一个系统来充当锁的作用,比如Mysql、Redis、Zookeeper等都可以用作分布式锁。

zookeeper分布式锁的原理是什么?

锁分为两种:共享锁(读锁)和排他锁(写锁) 读锁:当有一个线程获取读锁后,其他线程也可以获取读锁,但是在读锁没有完全被释放之前,其他线程不能获取写锁。写锁:当有一个线程获取写锁后,其他线程就无法获取读锁和写锁了。

Zookeeper有一种节点类型叫做临时序号节点,它会按序号自增地创建临时节点,这正好可以作为分布式锁的实现工具。

读锁获取原理:

1、根据资源的id创建临时序号节点:/lock/mylockR0000000005  Read 。

2、获取/lock下的所有子节点,判断比他小的节点是否全是读锁,如果是读锁则获取锁成功 。

3、如果不是,则阻塞等待,监听自己的前一个节点。

4、当前面一个节点发生变更时,重新执行第二步操作。

写锁获取原理:

1、根据资源的id创建临时序号节点:/lock/mylockW0000000006  Write 。

2、获取 /lock 下所有子节点,判断最小的节点是否为自己,如果是则获锁成功 。

3、如果不是,则阻塞等待,监听自己的前一个节点。

4、当前面一个节点发生变更时,重新执行第二步。

对于zookeeper分布式锁或者Java开发相关信息有兴趣的同学,可以听下这门公开课,全面解读Zookeeper,点击图片进行领取

全面解读Zookeeper

有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
高并发编程训练营