Zookeeper分布式锁原理

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Zookeeper数据结构就像树,由节点构成,节点叫做Znode

节点类型


Zookeeper数据结构就像树,由节点构成,节点叫做Znode


Znode分为四种类型:


1.持久化节点(PERSISTENT)


       默认的节点类型,客户端与zk断开连接后,节点依然存在


2.持久化顺序节点(PERSISTENT——SEQUENTIAL)


       在创建节点时zk根据创建的时间顺序对节点进行编号

    


3.临时节点(EPHEMERAL)


       当创建节点的客户端与zk断开连接后,临时节点会被删除

   

断开连接


 

 

  

4临时顺序节点


       临时顺序节点结合和临时节点和顺序节点的特点:在创建节点时,Zookeeper 根据创建的时间顺序给该节点名称进行编号;当创建节点的客户端与 Zookeeper 断开连接后,临时节点会被删除。


Zookeeper分布式锁原理


  zookeeper分布式锁运用了临时顺序节点的特点


     获取锁:


1.在 Zookeeper 当中创建一个持久节点 ParentLock。当第一个客户端想要获得锁时,需要在 ParentLock 这个节点下面创建一个临时顺序节点 LockA。


    

2.ClientA 查找 ParentLock 下面所有的临时顺序节点并排序,判断自己所创建的节点 LockA 是不是顺序最靠前的一个。如果是第一个节点,则成功获得锁。



3.这时候,如果再有一个客户端 ClientB 前来获取锁,则在 ParentLock 下载再创建一个临时顺序节点 LockB。



4.ClientB 查找 ParentLock 下面所有的临时顺序节点并排序,判断自己所创建的节点 LockB 是不是顺序最靠前的一个,结果不是,ClientB 向排序仅比它靠前的节点 LockA 注册 Watcher,用于监听 Lock1A节点是否存在。这意味着 Client2B抢锁失败,进入了等待状态。



5.这时候,如果又有一个客户端 ClientC前来获取锁,则在 ParentLock 下载再创建一个临时顺序节点 LockC。



6.ClientC 查找 ParentLock 下面所有的临时顺序节点并排序,判断自己所创建的节点 LockC 是不是顺序最靠前的一个,结果同样发现节点 LockC并不是最小的。


于是,ClientC向排序仅比它靠前的节点 LockB注册 Watcher,用于监听 LockB节点是否存在。这意味着 ClientC同样抢锁失败,进入了等待状态。



这样一来,ClientA 得到了锁,ClientB监听了 LockA,ClientC监听了 LockB,形成了一个等待队列,


    释放锁:


     任务完成,客户端显示释放


        当任务完成时,ClientA 会显示调用删除节点 LockA 的指令。



    任务执行过程中,客户端崩溃


获得锁的 ClientA 在任务执行过程中,如果崩溃,则会断开与 Zookeeper 服务端的链接。根据临时节点的特性,相关联的节点 LockA 会随之自动删除。



由于 ClientB 一直监听着 LockA的存在状态,当 LockA节点被删除,ClientB会立刻收到通知。这时候 ClientB 会再次查询 ParentLock 下面的所有节点,确认自己创建的节点 LockB 是不是目前最小的节点。如果是最小,则 ClientB 顺理成章获得了锁。



ClientC也是同理

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
3天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
131 2
|
3天前
|
存储 分布式计算 Hadoop
Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
103 3
|
3天前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
141 2
|
1天前
|
前端开发 JavaScript 算法
分布式系统的一致性级别划分及Zookeeper一致性级别分析
分布式系统的一致性级别划分及Zookeeper一致性级别分析
|
3天前
|
存储 大数据 Apache
深入理解ZooKeeper:分布式协调服务的核心与实践
【5月更文挑战第7天】ZooKeeper是Apache的分布式协调服务,确保大规模分布式系统中的数据一致性与高可用性。其特点包括强一致性、高可用性、可靠性、顺序性和实时性。使用ZooKeeper涉及安装配置、启动服务、客户端连接及执行操作。实际应用中,面临性能瓶颈、不可伸缩性和单点故障等问题,可通过水平扩展、集成其他服务和多集群备份来解决。理解ZooKeeper原理和实践,有助于构建高效分布式系统。
|
3天前
|
存储 供应链 安全
区块链技术原理及应用:深入探索分布式账本技术
【4月更文挑战第30天】区块链,从加密货币的底层技术延伸至多元领域,以其分布式账本、去中心化、不可篡改性及加密技术重塑数据存储与交易。核心组件包括区块、链和节点,应用涵盖加密货币、供应链管理、金融服务等。尽管面临扩展性等挑战,未来潜力无限。
|
3天前
|
存储 NoSQL 分布式数据库
【Flink】Flink分布式快照的原理是什么?
【4月更文挑战第21天】【Flink】Flink分布式快照的原理是什么?
|
3天前
|
存储 运维 分布式计算
面经:HDFS分布式文件系统原理与故障排查
【4月更文挑战第10天】本文深入剖析了HDFS的底层原理和面试重点,包括HDFS的架构(NameNode、DataNode、Secondary NameNode)、文件读写流程、高级特性(快照、Erasure Coding、Federation、High Availability)以及故障排查方法。通过HDFS Shell命令示例,加强理解,并对比了HDFS与其他分布式文件系统的优缺点。掌握这些知识将有助于求职者在面试中脱颖而出,应对HDFS相关技术考察。
46 3
|
3天前
|
Java 网络安全 Apache
搭建Zookeeper集群:三台服务器,一场分布式之舞
搭建Zookeeper集群:三台服务器,一场分布式之舞
53 0
|
3天前
|
消息中间件 存储 监控
解析RocketMQ:高性能分布式消息队列的原理与应用
RocketMQ是阿里开源的高性能分布式消息队列,具备低延迟、高吞吐和高可靠性,广泛应用于电商、金融等领域。其核心概念包括Topic、Producer、Consumer、Message和Name Server/Broker。RocketMQ支持异步通信、系统解耦、异步处理和流量削峰。关键特性有分布式架构、顺序消息、高可用性设计和消息事务。提供发布/订阅和点对点模型,以及消息过滤功能。通过集群模式、存储方式、发送和消费方式的选择进行性能优化。RocketMQ易于部署,可与Spring集成,并与Kafka等系统对比各有优势,拥有丰富的生态系统。
170 4