如何用ZK实现分布式锁

如何用ZK实现分布式锁

我们这里用最基础的ZK的API来模拟一个分布式锁竞争的场景:

  • 假设现在有两个角色: Node1, Node2

  • 时刻1:

#Node1 获取锁
create -e /lock
  • 时刻2:
#Node2 尝试获取锁
create -e /lock 
#加锁失败,返回 Node already exists:/lock
  • 时刻3:
# 1. Node2 查看 /lock 节点的状态
# 2. 并注册监听 /lock 节点的变化
stat -w /lock
# 会输出一堆关于节点的信息,由于我们是实现分布式锁,可以不用关系输出的东西
  • 时刻4:
#Node1 退出客户端,或宕机客户端断开连接
quit
  • 时刻5:
#Node2 监听到锁被释放,监听是一次性的
WatchedEvent state: SyncConnected type:NodeDeleted path:/lock
  • 时刻6:
#Node2 尝试加锁
create -e /lock

总结

  • 用ZK实现分布式锁,本质上就是多个客户端竞争 创建 临时节点的执行权

  • ZK提供的API保证了如下几点特性:

    1. 只有一个客户端能够创建成功 Znode
    1. 如果Znode是临时节点, 客户端崩溃,则Znode自动删除
    1. 当Znode被释放,会通知其他监听的客户端
  • 有了这几点,也就有了实现分布式锁的基本条件

  • 各个语言可以实现自己语言环境的分布式锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值