zookeeper实现分布式锁

在分布式环境中,为了保证系统中数据的一致性,需要对共享资源的操作进行排他性的同步控制。就类似于在单机多线程环境中,控制程序的并发性一样,分布式锁是来处理多机之间资源的并发问题,提供一些互斥的手段来防止彼此之间的相互干扰。可以认为是分布式环境中的一种互斥锁或者称为排他锁。
zk实现分布式排他锁的可行性
定义锁
在zk中可以通过数据节点来定义一个锁,例如,定义节点/mutex_lock/lock表示一个分布式锁。下面来说一下对该锁的请求和释放过程。
获取锁
在获取锁的时候,所有的zk客户端可以通过创建节点的方法,在节点/mutex_lock下创建临时节点/mutex_lock/lock,创建成功的客户端表示成功的获取到了锁,因为zk保证在所有的客户端中只有一个客户端能够创建成功。没有创建成功的客户端,可以注册一个监听节点/mutex_lock/lock变更的watcher,掌握改节点的变更情况。
释放锁
客户端释放锁可能是对共享资源的操作完成,删除lock临时节点,或者客户端所在的服务器中断等不正常行为,这种异常行为也会删除mutex_lock下的节点lock。该节点被删除,注册了该节点watcher的客户端可以监听到该节点的变更,这些客户端就可以再一次发起获取锁的过程。

如何实现
zk的其中的一个客户端Curator帮助我们实现了一些分布式锁功能。
什么是Curator,官网这么说:

这里写图片描述
官网对分布式锁的使用方法如下图,并附有示例,下面的图来源于官方文档:http://curator.apache.org/curator-recipes/index.html
这里写图片描述


更多内容访问微信号:qunzi-eros
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值