分布式锁Zookeeper

一、什么是Zookeeper

Zookeeper是一个开源的分布式协调服务,它设计的目的就是将那些复杂容易出错的分布式一致性服务封装起来,提供统一的解决方案。
ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

二、Zookeeper的数据模型

采用层次化多叉树结构,每个节点上都可以存储数据,最小存储节点是 Znode,每个节点的大小限制是1M,我们通常将ZNode分为4个种类:

  • 持久节点 :一旦创建就一直存在即使 ZooKeeper 集群宕机,直到将其删除
  • 临时节点:生命周期与seesion绑定
  • 持久顺序节点:具有持久特性,并且子节点具有顺序性,例如node/0001, node/0002
  • 临时顺序节点
2.1 Znode的结构

每个Znode分为两部分组成:

  • stat : 存储状态信息,例如:事务id,创建时间,子任务id
  • data
三、Watcher(事件监听器)

Watcher(事件监听器),是 ZooKeeper 中的一个很重要的特性。ZooKeeper 允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是ZooKeeper 实现分布式协调服务的重要特性。(Zookeeper实现分布式事务就利用了这一特性)

四、Zookeeper实现分布式锁

image.png

4.1 加锁

锁在zookeeper下就是一个临时节点的形式存在,当有客户端来申请加锁时,

  • 会生成一个临时顺序节点且会进行编号。
  • 获取整个节点链表,判断当前是否是第一个
    • 如果是第一个,加锁成功
    • 如果不是前一个,说明前面还有锁没有释放,会对上一个顺序节点添加一个监听器
4.2 释放锁

释放锁很简单,就是将自己创建的临时顺序节点删除。删除了那个节点之后,zk 会负责通知监听这个节点的监听器,“锁有人释放了”,通知等待着的客户端重新尝试获取锁

4.3 整个过程如下:

image.png

参考

《石衫架构笔记》

使⽤ redis 如何设计分布式锁?使⽤ zk 来设计分布式锁可以吗?这两种分布式锁的实现⽅ 式哪种效率⽐较⾼?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值