目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7092.4k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(457)
赞(0)

分布式锁解决方案_Zookeeper分布式锁原理

image-20220530180723101

公平锁和可重入锁的原理

取水秩序:

  • (1)取水之前,先取号;
  • (2)号排在前面的,就可以先取水;
  • (3)先到的排在前面,那些后到的,一个一个挨着,在井边排成一队。

image-20220531140856487

这种排队取水模型,就是一种锁的模型。

什么是可重入锁呢?

image-20220531141120406

Zookeeper 的节点 Znode 有四种类型

  • 持久节点:默认的节点类型。创建节点的客户端与 zookeeper 断开连接后,该节点依旧存在。
  • 持久节点顺序节点:所谓顺序节点,就是在创建节点时,Zookeeper 根据创建的时间顺序给该节点名称进行编号,持久节点顺序节点就是有顺序的持久节点。
  • 临时节点:和持久节点相反,当创建节点的客户端与 zookeeper 断开连接后,临时节点会被删除。
  • 临时顺序节点:有顺序的临时节点。

创建临时顺序节点

注意:

  • -e:临时节点
  • -s:顺序节点

image-20220531141948191

ZK分布式锁的实现原理

当第一个客户端请求过来时,Zookeeper 客户端会创建一个持久节点 locks。如果它(Client1)想获得锁,需要在 locks 节点下创建一个顺序节点 lock1。

image-20220523212617566

接着,客户端 Client1 会查找 locks 下面的所有临时顺序子节点,判断自己的节点 lock1 是不是排序最小的那一个,如果是,则成功获得锁。

image-20220523212650099

这时候如果又来一个客户端 client2 前来尝试获得锁,它会在 locks 下再创建一个临时节点 lock2。

image-20220523212854800

客户端 client2 一样也会查找 locks 下面的所有临时顺序子节点,判断自己的节点 lock2 是不是最小的,此时,发现 lock1 才是最小的,于是获取锁失败。获取锁失败,它是不会甘心的,client2 向它排序靠前的节点 lock1 注册 Watcher 事件,用来监听 lock1 是否存在,也就是说 client2 抢锁失败进入等待状态。

image-20220523213114502

此时,如果再来一个客户端Client3来尝试获取锁,它会在 locks 下再创建一个临时节点 lock3。

image-20220523213259500

同样的,client3 一样也会查找 locks 下面的所有临时顺序子节点,判断自己的节点 lock3 是不是最小的,发现自己不是最小的,就获取锁失败。它也是不会甘心的,它会向在它前面的节点 lock2 注册 Watcher 事件,以监听 lock2 节点是否存在。

image-20220523213401089

释放锁

如果是任务完成,Client1 会显式调用删除 lock1 的指令。

image-20220523213524494

如果是客户端故障了,根据临时节点得特性,lock1 是会自动删除的。

image-20220523213617160

lock1 节点被删除后,Client2 可开心了,因为它一直监听着 lock1。lock1 节点删除,Client2 立刻收到通知,也会查找 locks 下面的所有临时顺序子节点,发下 lock2 是最小,就获得锁。

image-20220523213659345

同理,Client2 获得锁之后,Client3 也对它虎视眈眈:

  • Zookeeper 设计定位就是分布式协调,简单易用。如果获取不到锁,只需添加一个监听器即可,很适合做分布式锁。
  • Zookeeper 作为分布式锁也缺点:如果有很多的客户端频繁的申请加锁、释放锁,对于 Zookeeper 集群的压力会比较大。

实时效果反馈

1.ZooKeeper创建____节点实现分布式锁。

A 临时节点

B 持久节点

C 临时顺序节点

D 持久顺序节点

2.基于ZooKeeper实现分布式锁保证的是_____。

A 可靠性

B 可用性

C 隔离性

D 以上都错误

答案

1=>C 2=>A

 

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2