顺序节点特性

使用zk的顺序节点特性,假如我们在lock目录下创建3个节点,zk集群会按照发起创建的顺序来创建节点,节点分别为/lock/001,/lock/002,/lock/003,最后一位是一次递增,节点名由zk来完成。

临时节点特性

临时节点由某个客户端创建,当客户端与zk集群断开链接时,该节点自动被删除。EPHEMERAL_SEQUENTIAL为临时顺序节点

根据zk顺序节点是否存在,可作为分布式的状态,以此来实现分布式锁,基本逻辑:

1.客户端1调用create()创建名为:/业务ID/lock-"临时节点的顺序节点"

2.客户端1调用getChildren("业务ID")获取所有已经创建的字节点

3.客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点是所有节点中最小的,就是看自己创建的序列号是否排第一,如果是第一,那么就认为这个客户端就获取了锁,在他之前没有别的客户端拿到锁。

4.如果创建的节点不是所有节点中最小的,那么监听比自己创建的节点小的,最大节点,进入等待,知道下次监听的字节点变更的时候,再进行字节点的获取,比较,判断是否获取锁。

基于zookeeper的分布式锁实现原理是什么?相关推荐

  1. 【Zookeeper】基于Zookeeper实现分布式锁

    1.概述 转载:基于Zookeeper实现分布式锁 1.1 为什么使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,我们往往采用synchronized或者Lock ...

  2. 基于 Zookeeper 的分布式锁实现

    1. 背景 最近在学习 Zookeeper,在刚开始接触 Zookeeper 的时候,完全不知道 Zookeeper 有什么用.且很多资料都是将 Zookeeper 描述成一个"类 Unix ...

  3. ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...

    本文是"Java秒杀系统实战系列文章"的第十六篇,本文我们将继续秒杀系统的优化之路,采用统一协调调度中心中间件ZooKeeper控制秒杀系统中高并发多线程对于共享资源~代码块的并发 ...

  4. 基于ZooKeeper的分布式锁和队列

    分布式锁的几种实现: 1.zookeeper分布式锁,基于自增节点 2.Redis分布式锁,基于setnx命令, 基于Redis实现分布式锁:http://blog.csdn.net/daiyudon ...

  5. zookeeper实现分布式锁的原理及具体使用案例

    zookeeper跟redis一样,也是基于内存的. 官网: http://zookeeper.apache.org/ zookeeper是分布式系统的协调服务,提供配置管理.分布式协同.命名的中心化 ...

  6. 技术分享| 基于 Etcd 的分布式锁实现原理及方案

    1. 为什么选择 Etcd 据官网介绍,Etcd 是一个分布式,可靠的 Key-Value 存储系统,主要用于存储分布式系统中的关键数据.初见之下,Etcd 与 NoSQL 数据库系统有几分相似,但作 ...

  7. 第09课:基于 Etcd 的分布式锁实现原理及方案

    Etcd 最新版本已经提供了支持分布式锁的基础接口(可见官网说明),但本文并不局限于此. 本文将介绍两条实现分布式锁的技术路线: 从分布式锁的原理出发,结合 Etcd 的特性,洞见分布式锁的实现细节: ...

  8. 基于Zookeeper的分布式锁

    实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,其中前两种方案网络上有很多资料可以参考,本文不做展开.我们来看下使用Zookeeper如何实现分布式锁. 什么是 ...

  9. 基于tair的分布式锁实现原理

    分布式锁概述 分布式锁的实现主要分为三种方式: 1.基于Mysql的行锁实现 优点: 实现简单,不需要额外的中间件来协助实现 缺点: 增大了数据库的读写压力 可能增大数据库的死锁的产生.例如:如果琐是 ...

  10. Zookeeper:基于Zookeeper的分布式锁与领导选举

    本文转发自技术世界,原文链接 http://www.jasongj.com/zookeeper/distributedlock/ 1.Zookeeper特点 1.1 Zookeeper节点类型 如上文 ...

最新文章

  1. 设置RGBColor
  2. java B2B2C springmvc mybatis电子商务平台源码-Consul服务发现原理...
  3. 一次单核CPU占用过高问题的处理
  4. linux 内核 三天吐血,编译安装——吐血经验,内附脚本
  5. python 结尾回车_理解不了Python正则表达式?我帮你搞定
  6. python 命令行运行 多进程_Python初学——多进程Multiprocessing
  7. talib python文档_GitHub - HuaRongSAO/talib-document: talib学习 talib中文翻译 talib中文文档...
  8. Qt Qml 开发超高清 4K、8K 视频直播视频客户端
  9. 超快激光啁啾放大技术的原理及应用
  10. 【解决问题】RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton
  11. 《计算机网络》第7版——知识摘要总结
  12. 在我们使用vue-admin-templete进行二次开发的时候,我们会发现有些是英文,比如分页里面的每页尺码。
  13. 电角速度和机械角速度
  14. 自定义控件---继承ViewGroup类方式(循序渐进之第3步效果----图片左右拖动+RadioGroup切换效果)
  15. 2009年 奥巴马胜选演说
  16. 红米note8pro微信无法连接服务器,在红米Note8Pro微信浏览网页background-image图片无法加载?...
  17. list 字典 元组及常用字符串方法
  18. java 正数减去负数,Java中正数与负数操作、的区别
  19. 视频理解TSM的训练与使用
  20. hadoop主节点(NameNode)备份策略以、恢复方法、操作步骤

热门文章

  1. git fork的项目与原作者同步
  2. 衔着树枝飞跃太平洋的傻鸟!(童话版)
  3. 【Vegas原创】控制文件损坏,使用trace文件恢复DB
  4. java string内部实现_Redis知识总结--string的内部实现
  5. KVM 001 -- 简介及安装
  6. 文件系统和裸块设备的page cache问题
  7. [RK3288][Android6.0] 如何配置MIPI DSI Clock和PCLK
  8. dwcs6连接不上access数据库_dw连接access数据库的技巧
  9. python中的或运算_python入门:if语句中的逻辑运算符
  10. python中实用的collections模块