详解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 ...
随机推荐
- python基础一 ------装饰器的作用
装饰器: 本质属性:为函数增加新功能的函数,只是有个语法糖,显得高大上而已 #装饰器 #引子 计算斐波那契数列,第50 项 import time def fibonacci(num): if num ...
- swagger常用注解说明
常用到的注解有: Api ApiModel ApiModelProperty ApiOperation ApiParam ApiResponse ApiResponses ResponseHeader ...
- 防止APACHE解析漏洞
一.PHP端,规范代码,加强尾缀验证 二.Apache端,在httpd.conf中加上如下代码: <Files~"\.(p|P)(h|H)(p|P)."> Deny f ...
- flask内容学习之蓝图以及单元测试
蓝图的概念: 简单来说,蓝图是一个存储操作方法的容器.这些操作在这个蓝图被注册到一个应用之后就可以被调用.Flask可以通过蓝图来制止URL以及处理请求.Flask使用蓝图来让应用实现模块化,在Fla ...
- history.go(-1)和History.back()的区别
简单的说就是:go(-1): 返回上一页,原页面表单中的内容会丢失:back(-1): 返回上一页,原页表表单中的内容会保留,一般还是back(-1)用的多
- VB编写的程序加入防火墙的例外中
在工程中要先引入: NetCon 1.0 Type Library NetFwTypeLib Option Explicit Const NET_FW_SCOPE_ALL = 0 Const NET_ ...
- 命令 上传项目到git中
点击Clone or dowload会出现一个地址,copy这个地址备用. 接下来就到本地操作了,首先右键你的项目,如果你之前安装git成功的话,右键会出现两个新选项,分别为Git Gui Here, ...
- angular 2 - 003 typescript
http://www.typescriptlang.org/docs/index.html var book: string = "hellp angular 2"; var nu ...
- 一步步教你轻松学KNN模型算法
一步步教你轻松学KNN模型算法( 白宁超 2018年7月24日08:52:16 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解. ...
- html5学习笔记2——新元素
一:H5的改变 <canvas> 新元素 标签 描述 <canvas> 标签定义图形,比如图表和其他图像.该标签基于 JavaScript 的绘图 API 新多媒体元素 标签 ...