Zookeeper实现分布式锁

Zookeeper的数据结构是文件系统

Zookeeper实现分布式锁_第1张图片

Zookeeper的节点类型 

  •  持久化节点:一旦创建、永久存在
  • 临时节点:session超时,会被服务器剔除
  • 持久化顺序节点:持久化节点的基础上,自带顺序
  • 临时顺序节点:临时节点的基础上,自带顺序
  • 容器节点:当没有子节点时,未来会被服务器剔除
  • TTL节点:过了TTL指定的时间内,被服务器剔除

其中我们需要的就是:

  1. 容器节点:就相当于锁,当容器节点下没有子节点时,说明没有线程申请锁,容器节点自动删除
  2. 临时顺序节点:每个请求被存储为一个临时顺序节点

临时节点

Zookeeper实现分布式锁_第2张图片

监听机制

Zookeeper实现分布式锁_第3张图片

集群监听机制

Zookeeper实现分布式锁_第4张图片

分布式锁实现1(见下图)

弊端:

如果1000个请求来,第一个请求创建了临时节点,拿到了锁,执行相关逻辑,剩下的999个请求开始监听,一旦第一个线程释放了锁,其他999个请求开始重新执行获取锁的逻辑,但只能有一个拿到锁,这是不是很耗费资源?

我们想的就是如果有个队列能够将请求存起来,逐个执行,是不是就会减少资源耗费了?

这就是为啥Zookeeper是个实现分布式锁的坯子了,因为它自己独有的监听机制。

Zookeeper实现分布式锁_第5张图片

分布式锁实现二(最优方案)

Zookeeper实现分布式锁_第6张图片

 

Zookeeper实现分布式锁_第7张图片

你可能感兴趣的:(分布式集群,zookeeper,Zookeeper实现分布式锁)