首页技术文章正文

zookeeper怎样实现分布锁?Zookeeper分布式锁机制

更新时间:2023-09-25 来源:黑马程序员 浏览量:

IT培训班

zookeeper是CP架构的集群,采用 zab 一致性协议确保数据的强一致。对zookeeper中的数据进行修改,其内部会自动将所有节点数据进行修改后才提供查询服务,不会出现redis那种异步同步导致数据丢失的问题。

zookeeper 数据是目录树的形式,每个目录称为znode,znode中可存储数据(一般不超过 1M),还可以在其中增加子节点。

zookeeper中的节点有两种,分别为临时节点和永久节点。

(1)永久节点: 客户端与zookeeper断开连接后,该节点依旧存在。

(2)临时节点: 客户端与zookeeper断开连接后,该节点会被删除。临时节点下不能创建子节点。

SEQUENTIAL属性: ZooKeeper允许用户为每个节点添加一个特殊的属性:SEQUENTIAL,一旦节点被标记上这个属性,那么在这个节点被创建的时候,ZooKeeper 会自动在其节点名后面追加上一个整型数字,这个整型数字是一个由父节点维护的自增数字。

Zookeeper分布式锁机制

依赖于zk节点路径唯一的机制来实现的(利用zk同一目录下不能创建多个相同名称的节点这个特性,来实现分布式锁的功能。对于同一个路径,只能有一个客户端能创建成功,其它的都创建失败)。

分布式锁机制

简易版zookeeper锁

节点唯一性:对于同一个路径,只能有一个客户端能创建成功,其它的都创建失败。

创建临时节点:客户端与zookeeper断开连接后,该节点会被删除,不必设置锁超时时间。

基于临时节点的zk锁(请求排队)

基于临时节点实现,会产生惊群效应,性能稍差。

简易版zookeeper锁

基于临时顺序节点的zk锁(请求排队)

临时顺序节点的zk锁
释放锁

用curator实现zk锁

Curator是Netflix公司开源的⼀套zookeeper客户端框架,封装了大部分Zookeeper的功能,例如Leader选举、分布式锁等,减少了技术人员在使用Zookeeper时的底层细节开发工作。

Curator中封装了以下几种锁:

InterProcessMutex:分布式可重入排它锁
InterProcessSemaphoreMutex:分布式不可重入排它锁
InterProcessReadWriteLock:分布式读写锁
InterProcessMultiLock:多重共享锁,将多个锁作为单个实体管理的容器
InterProcessSemaphoreV2:共享信号量

实际开发中,可以直接使用 Curator客户端中的各种官方实现的分布式锁,没必要重复造轮子。


分享到:
在线咨询 我要报名
和我们在线交谈!