文档章节

Zookeeper的投票机制及分布式事务锁原理

 最胖的瘦子
发布于 04/13 15:39
字数 710
阅读 7
收藏 0
  1. Zookeeper的分布式事务锁
    1. 首先,zk下有个locker持久节点,持久节点下可以创建多个临时节点node_n。当客户端期望获得分布式锁的时候,他会在locker下通过create()方法创建一个临时节点node_n
    2. 然后,客户端通过getChildren(“locker”)方法获取到当前locker下的所有临时节点
    3. 接下来开始判断,自己创建的node_n节点是否是所有节点中最小的,如果是,则获取到锁,如果不是,则创建一个watcher监听,来监听比自己node_n小一级的临时节点

注:之所以只监听比自己小的node_n节点,而不是全部节点的原因是,若是全部监听,当某个节点被使用完毕删除后,当前node不知道此节点是否只自己的之前节点,此时locker下的所有临时节点都会被全部唤醒,一起去抢节点,极易造成阻塞

             4.当客户端监听到比自己小的node_n节点被释放了以后,就会再调用一次getchildren方法,获取到当前的所有node临时节点,然后再比较一次,若是发现自己是最小节点,则获得锁,若依旧不是,则继续重复上述行为

  1. Zookeeper的全局一致性

接下来我就产生了一个问题,在集群分布下,如何保证这个znode是保证有序自增的,而不会出现并发情况下出现相同的临时node情况呢?

 

后经查阅,发现zookeeper有个非常重要的特性,就是在做写操作的时候,一个service上处理的请求,会经过所有zk下的service同意一致后才会返回成功,否则返回失败。这就是zookeeper的一致性,所有的更新必定是全局有序的

 

  1. Zk分布式锁和redis的区别 

 

    redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能

 

  zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小

 

  另外一点就是,如果是redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁;而zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁

© 著作权归作者所有

上一篇: 重新认识JVM
粉丝 4
博文 34
码字总数 19073
作品 0
杭州
私信 提问
亲 , Zookeeper了解一下 : 概述

在学习的过程中,我们总需要一个来自灵魂的拷问: 为什么? 为什么会产生Zookeeper 这个问题有深度,那要从五百万年说起,在遥远的塞伯坦星球..... 扯远了... 在遥远在单机单服务的时代 , 想要扩展...

ol_O_O_lo
2018/11/12
15
0
分布式锁服务ZooKeeper

ZooKeeper的安装和配置: 下载ZooKeeper 解压:tar -xzvf zookeeper-3.4.3.tar.gz 在conf目录下创建一个配置文件zoo.cfg,tickTime=2000 dataDir=/opt/zookeeper/data dataLogDir=/opt/zooke......

Stefan555
2014/01/24
153
1
Zookeeper笔记3——原理及其安装使用

Zookeeper到底能干什么? 1.配置管理:这个好理解。分布式系统都有好多机器,Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴...

狂小白
2018/01/25
0
0
阿里P8架构师谈:Zookeeper的原理和架构设计,以及应用场景

随着信息化水平的不断提高,企业级应用系统变得越来越庞大,性能随之下降,用户抱怨频频。拆分系统是目前我们可选择的解决系统可伸缩性和性能问题的唯一行之有效的方法。但是拆分系统同时也带...

mikechen优知
01/17
99
0
三、Zookeeper的原理和详解

1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行...

xp_zyl
2018/04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
33分钟前
2
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
7
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
1
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
2.8K
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部