Zookeeper分布式锁原理

一、架构介绍

    在介绍使用Zookeeper实现分布式锁之前,首先看当前的系统架构图。
Zookeeper分布式锁原理_第1张图片
    解释:左边的整个区域表示一个Zookeeper集群,locker是Zookeeper的一个持久节点,node_1、node_2、node_3是locker这个持久节点下面的临时顺序节点。client_1、client_2、client_n表示多个客户端,Service表示需要互斥访问的共享资源。

二、分布式锁获取思路

总体思路

  • 在获取分布式锁的时候在locker节点下创建临时顺序节点,释放锁的时候删除该临时节点;
  • 客户端调用createNode方法在locker下创建临时顺序节点,然后调用getChildren(“locker”)来获取locker下面的所有子节点,注意此时不用设置任何Watcher;
  • 客户端获取到所有的子节点path之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁;
  • 如果发现自己创建的节点并非locker所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,然后对其调用exist()方法,同时对其注册事件监听器;
  • 之后,让这个被关注的节点删除,则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点是否是locker子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。

获取分布式锁的核心算法流程

下面用流程图来分析获取分布式锁的完整算法,如下所示:
Zookeeper分布式锁原理_第2张图片

你可能感兴趣的:(Zookeeper,zookeeper)