详解Zookeeper原理与应用场景
Zookeeper 分布式协调服务
应用之处:发布、订阅,命名服务,分布式协调和分布式锁
对比 Chubby:
Chubby 被定义为 分布式的锁服务
为分布式系统提供 松耦合、粗粒度 的分布式锁功能
其由两部分组成
提供数据的读写接口并管理相关配置数据的服务端
另一部分是客户端使用的 SDK
为对外提供稳定服务,每一个 Chubby 单元都由一组服务器组成,使用共识算法从集群中选举出主节点
实现原理:
文件系统:
Zookeeper 也使用文件系统组织系统中存储的资源
/parent
/parent/node1
/parent/node2
/parent/node3
其并没有文件和文件夹的概念,只有 Znode 概念,它既可以作为容器存储数据,也可以持有其他 Znode 形成父子关系
Znode 有四种类型:
PERSISTENT:持久
persistent_sequential:持久且有序
ephemeral:临时
ephemeral_sequential:临时且有序
临时节点:
客户端连接 Z 时才会保持存在的节点,当客户端和服务端连接中断,则当前连接持有的所有节点都会被删除
持久节点:
与临时节点相反,不会随会话连接的中断而删除,需要客户端主动删除
顺序性:
如果使用 Z 的顺序节点,那么所有节点就会在名字的末尾附加一个序列号,序列号是由父节点维护的单调递增计数器生成
临时/持续节点:
通知实现原理:
实现分布式排他锁:
第一种,通过创建临时 Znode 简单实现:
第二种,通过创建临时顺序 Znode 实现:
第三种,解决第二种的羊群效应:
客户端连接 Zookeeper,并在 /lock 下创建临时且有序(即EPHEMERAL_SEQUENTIAL)的子节点,如,第一个子节点为 /lock/lock-000,第二个为 /lock/lock-001,以此类推;
创建成功后,获取 /lock 下的子节点列表,判断刚创建的子节点在列表中是否是序号最小的子节点,如果是,则认为是获得锁,否则,监听刚创建的子节点的前一位子节点的删除消息,等获得该子节点的变更通知后,重复此步骤,直至获得锁为止;
执行业务代码;
完成业务代码后,删除对应子节点释放锁;
与 Redis 实现分布式锁比较:
Redis 需要自己实现重试逻辑,比较消耗性能;
zk 重试获取锁,对节点注册监听器即可,不需要主动尝试,性能开销小;
如果 Redis 获取锁的客户端挂了,就不能主动删除 key,只能等待 key 的超时到期,而 zk 会主动发现客户端断连,并将临时 znode 删除,触发后面的监听器逻辑
实现分布式共享锁:
扩展:
DNS:
DNS(Domain Name System,域名系统),万维网上作为域名和 IP 地址相互映射的一个分布式数据库,方便用户访问互联网,无需记住能够被机器直接读取的 IP 数串。
通过域名,最终得到该域名对应的 IP 地址的过程叫做域名解析。
DNS 协议运行在 UDP 协议智商,使用端口号 53。
共识算法:
参考
https://draveness.me/zookeeper-chubby
详解Zookeeper原理与应用场景的更多相关文章
- AspectJWeaver文件写入gadget详解和两种应用场景举例
目录 0 前言 1 环境 2 gadget解析 2.1 高版本Commons-Collections的防御措施 2.2 获取AspectJWeaver的调用链 2.3 gadget详解 3 两种应用场 ...
- 分布式大牛详解Zookeeper底层原理
很多学员都在反馈,说zk很难学,学的不是很明白,在这里,我继续带着大家详解一遍Zookeeper 首先zk是什么呢首先肯定是一个个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用 ...
- 丰富图文详解B-树原理,从此面试再也不慌
本文始发于个人公众号:TechFlow,原创不易,求个关注 本篇原计划在上周五发布,由于太过硬核所以才拖到了这周五.我相信大家应该能从标题当中体会到这个硬核. 周五的专题是大数据和分布式,我最初的打算 ...
- [转]Zookeeper原理及应用场景
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...
- 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
- nmap详解之原理与用法
前言 nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称.Nmap最初是由 ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介
1. IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联网发 ...
- ThreadLocal类详解:原理、源码、用法
以下是本文目录: 1.从数据库连接探究 ThreadLocal 2.剖析 ThreadLocal 源码 3. ThreadLocal 应用场景 4. 通过面试题理解 ThreadLocal 1.从数据 ...
- Percona-xtrabackup 使用详解与原理
现在有个需求需要对使用 innodb 的数据库进行热备.网上查了很多工具皆推荐 Percona-xtrabackup 于是就仔细了解调研一番. 我们可以前往 https://www.percona.c ...
随机推荐
- Eclipse纯净版安装web插件
打开 Help -> Install New Software. 在Install界面板中,点击Add按钮输入:然后在输入http://download.eclipse.org/releases ...
- 用STM32CudeMX 配置用到的函数(记住他!)
1.设置PB5的电平:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, 0);2.读取PB5的电平值:int a = HAL_GPIO_ReadPin(GPIOB, GPIO_ ...
- Linux下redis 的部署、主从与集群
老男孩Python全栈6期——redis--------------------------Linux 操作系统 默认的内存管理机制RSS:page cache:anno page:Linux操作系统 ...
- mongodb副本集与分片结合
1.在三个不同服务器上,分别建立副本集: 202服务器: 192.8.123.202:27017 replSet = r202 192.8.123.202:27018 replSet = r202 1 ...
- ReactNative bug:Application XXX has not bean registered.
故障现象 当react-native init新项目之后运行react-native run -android/ios时手机报错 Application XXX has not bean regist ...
- jsp下载文件的实现方法及注意事项 (转)
jsp中实现文件下载,最简单的方式是在网页上做超级链接,如:<a href="music/abc.mp3">点击下载</a>. 但是,这样服务器上的目录资源 ...
- lettcode笔记--Valid Parentheses
20.Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
- [转]开源.net 混淆器ConfuserEx介绍
今天给大家介绍一个开源.net混淆器——ConfuserEx http://yck1509.github.io/ConfuserEx/ 由于项目中要用到.net 混淆器,网上搜寻了很多款,比如Dotf ...
- 从注册表清理 IE10,IE11 用户代理字符串(UserAgent)中的垃圾信息
某一天,我发现我的 IE User Agent 字符串里面竟然含有刷机大师.百度浏览器等许多垃圾,国货流氓见怪不怪了. 微软自家的.NET CLR也占据了一大片,看着也不爽. 决定清理一下,但是却没找 ...
- Windows7下安装与破解IntelliJ IDEA2017
IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具( ...