美文网首页
zookeeper分布式锁的应用

zookeeper分布式锁的应用

作者: Cheava | 来源:发表于2018-12-06 21:36 被阅读11次

2018-12-08 补充:
其实这两种方案也就是Curator提供的两种选主机制:
基于选举和基于抢占的选主方式,具体原理和使用参见以下链接
[Curator] Leader Latch 的使用与分析
[Curator] Leader Election 的使用与分析
建议直接使用Curator封装好的接口

分布式锁种类

zookeep分布式锁的种类:排他锁、共享锁
如何用 zookeeper 实现分布式锁 - world6 的博客 - CSDN 博客

锁实现

Curator已经实现的分布式锁:

  • 可重入锁:InterProcessMutex 实现了可重入的排它锁,支持锁等待超时、保证获取锁的公平性。

  • 不可重入锁:InterProcessSemaphoreMutex 实现了不可重入的排它锁,支持锁等待超时、保证获取锁的公平性。可以在多个线程间传递和释放锁,从而满足异步调用场景下的锁需求。

  • 信号量:InterProcessSemaphoreV2 实现了信号量,支持信号量等待超时、保证获取信号量的公平性。客户端每次获取信号量成功都会返回一个租约(Lease)对象,建议客户端在 finally 代码块 close 这个租约对象以释放租约。注意在线程重入时,每次获取信号量成功也会占用一个租约。另外,在多进程场景下,可以通过 SharedCountReader 来保障最大租约数的一致性,避免不同的进程设置不同的最大租约数。

  • 读写锁:InterProcessReadWriteLock 实现了可重入读写锁,支持锁等待超时、保证获取锁的公平性。并且支持写锁降级(持有写锁的线程可以同时获取到读锁),不支持读锁升级(持有读锁的线程不能同时获取到写锁)。 联锁:InterProcessMultiLock 实现了联锁,它使用装饰器模式实现多把锁的组合,与可重入锁、不可重入锁实现相同的接口,使得可以像使用单锁一样使用联锁。联锁获取成功代表它拥有的所有内部锁都获取成功,联锁获取失败则会自动释放所有内部已经获取成功的部分锁,从而保证联锁的原子性语义。
    教你使用 Zookeeper 实现分布式锁(上)

实际应用

需求:集群中所有host都有池化好的相同资源,后台取资源比较耗时,而且会频繁请求这个集群来取。

基于排他锁设计

image
  1. 开始:各host在zk上竞争创建临时节点,创建成功者为主节点,同时其他候选host监听节点目录。后台取目录下的节点信息,从主节点中获取资源。当主服务主动删除节点或者会话失效时,候选host将继续竞争选主。

  2. 主节点结束: 当主节点被后台占用最后一个资源时,主动删除临时节点。

  3. 重新选主: 候选host发现节点目录有节点删除事件,如果自己有空余资源,立刻参与选主,否则继续监听节点目录。

  4. 所有节点忙: 当所有host没有空余资源时,zk目录下没有节点。

  5. 有空余节点: 当有host重新拥有资源,检查节点目录是否有节点,如果没有节点,则尝试创建,创建成功则成为主服务,否则继续监听节点目录。

基于共享锁设计

image
  1. 开始:各host在zk上竞争创建临时有序节点,后台从创建最小节点的host中获取资源,因此该host成为主节点。

  2. 主节点结束: 当主节点被后台占用最后一个资源时,主动删除临时节点。当自己重新拥有资源后,再次在zk创建临时有序节点,参加排队。

  3. 重新选主:后台从之前次小的节点host中获取资源,该host成为主节点。

  4. 所有节点忙:当所有host没有空余资源时,zk目录下没有节点。

  5. 有空余节点: 当有host重新拥有资源,再次在zk创建临时有序节点,立即成为主节点。

相关文章

  • ZooKeeper高级特性

    1. ZooKeeper应用场景 ZooKeeper的应用场景主要包括:分布式协调,分布式锁,分布式元数据存储以及...

  • Zookeeper 实现分布式原理及源码分析

    Zookeeper分布式锁的原理 Zookeeper分布式锁恰恰应用了临时顺序节点。具体如何实现呢?让我们来看一看...

  • 冰解的破-ZooKeeper

    学习整理: zookeeper有哪些应用,HA热备、分布式锁、集中配置用到了zookeeper的什么? ZooKe...

  • Zookeeper实现分布式锁(三)FairLock

    在Zookeeper实现分布式锁的前两篇文章 Zookeeper实现分布式锁(一)While版Zookeeper实...

  • 分布式锁

    分布式锁分类 mysql,redis等类cas自旋式分布式锁,应用程序询问中间件能否加锁zookeeper,etc...

  • 利用Zookeeper实现 - 分布式锁

    微信原文: 利用Zookeeper实现 - 分布式锁 博客原文:利用Zookeeper实现 - 分布式锁 在许...

  • zookeeper 实现分布式锁

    简介 zookeeper为分布式系统调度框架, 用于解决分布式应用中数据管理问题,比如同步锁,分布式应用配置管理等...

  • Curator调用实例

    Curator是zookeeper使用最广泛的工具(1)zk的应用场景:分布式锁、Master选举(2)zk的应用...

  • 分布式锁

    为什么要用分布式锁 数据库乐观锁redis分布式锁zookeeper分布式锁 使用分布式锁的场景 实现分布式锁的方...

  • 分布式利器Zookeeper(三)

    前言 《分布式利器Zookeeper(一)》 《分布式利器Zookeeper(二):分布式锁》 本篇博客是分布式利...

网友评论

      本文标题:zookeeper分布式锁的应用

      本文链接:https://www.haomeiwen.com/subject/unjacqtx.html