复习
zookeeper的节点类型:
1. 持久节点
2. 临时节点
3. 持久顺序节点
4. 临时顺序节点
基于zookeeper的分布式锁使用了【临时顺序节点】
临时顺序节点
在创建节点的时候,zookeeper根据创建的时间顺序给该节点进行编号,
当创建节点的客户端与zk断开连接后,临时节点会被删除
zk实现分布式锁原理 - 加锁
1. 首先创建一个跟节点:parent-lock
2. 如果有3个client对同一个资源-resource进行锁定。分别是client1, client2, client3
3. client1尝试对resource进行锁定,在/parent-lock下创建了一个临时顺序节点lock-1,
然后client1查找/parent-lock下所有的临时节点并进行排序,判断自己创建的节点lock-1是不是顺序最靠前的一个,如果是第一个,就成功获取了锁。
4. 之后client2在/parent-lock创建临时顺序节点lock-2, 之后查找这个节点是不是最靠前的一个,
发现不是,那么client2会向lock-1注册watcher,用于监听lock-1是否存在,同时client2抢锁失败,进入等待状态。
5. 之后client3也会尝试获取锁,由于不是最靠前的一个,会采取client2一样的操作。
zk实现分布式锁原理 - 解锁
1. 客户端显式的删除自己创建的节点,释放锁,如果删除成功,那么其他client对其注册的watcher会通知其他节点,
告诉其他节点该节点已经删除,可以重试获取锁。
2. 如果client崩溃了,那么就对断开zk,其自己创建的节点就会自动删除。
网友评论