您的位置:首页 > 其它

zookeeper实现分布式锁

2017-01-04 15:37 162 查看
在分布式环境中,为了保证系统中数据的一致性,需要对共享资源的操作进行排他性的同步控制。就类似于在单机多线程环境中,控制程序的并发性一样,分布式锁是来处理多机之间资源的并发问题,提供一些互斥的手段来防止彼此之间的相互干扰。可以认为是分布式环境中的一种互斥锁或者称为排他锁。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zookeeper 分布式