zookeeper中分布式锁的实现方式

  1. 分布式锁:

    ​ 在分布式服务中,如果各个服务之间需要去竞争资源,没办法使用单机多线程中JDK自带的锁,谷此时需要分布式锁来协调。

  2. 分布式锁实现的手段:

    zookeeper、redis、memcache

  3. 分布式锁的实现原理

    zookeeper:去创建相应的节点,创建成功,则表示获取到了相应的锁;创建失败,则表示获取锁失败,释放锁的时候,删除该节点即可。

    redis、memecache:设置对应的值作为锁的标志,每次获取锁的时候先判断对应的值是否存在,存在则无法获取,不存在则设置相应的值,表示获取到锁(redis使用setnx设置值,memecache使用add)。

  4. zookeeper实现分布式锁的方式:

    1. 程序连上zookeeper之后,就尝试去创建节点,如果创建成功则成功获取到锁。如果节点已经存在,则获取锁失败,程序进行短暂的休眠之后重试。释放锁的时候,删除该节点即可。缺点:消耗资源(会导致空轮转)
    2. 使用zookeeper的watcher机制,不需要等待的线程进行空轮转, 但是会引发羊群效应(在释放锁后,会唤醒一大批正在等待的线程)
    3. 创建有序的节点,下一个节点监控上一个节点,当上一个节点被释放的时候,就会唤醒下一个节点上等待的线程,达到每次只唤醒一个线程的目的。
  5. 注意事项:创建节点的时候,一定要创建临时节点(创建一个临时节点后,当session断开的时候会自动删除该节点,防治宕机后资源无法释放的问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值