Zookeeper 分布式协调服务

应用之处:发布、订阅,命名服务,分布式协调和分布式锁

对比 Chubby:

Chubby 被定义为 分布式的锁服务

为分布式系统提供 松耦合、粗粒度 的分布式锁功能

其由两部分组成

提供数据的读写接口并管理相关配置数据的服务端

另一部分是客户端使用的 SDK

为对外提供稳定服务,每一个 Chubby 单元都由一组服务器组成,使用共识算法从集群中选举出主节点

实现原理:

文件系统:

Zookeeper 也使用文件系统组织系统中存储的资源

  • /parent

  • /parent/node1

  • /parent/node2

  • /parent/node3

其并没有文件和文件夹的概念,只有 Znode 概念,它既可以作为容器存储数据,也可以持有其他 Znode 形成父子关系

Znode 有四种类型:

  1. PERSISTENT:持久

  2. persistent_sequential:持久且有序

  3. ephemeral:临时

  4. ephemeral_sequential:临时且有序

临时节点:

客户端连接 Z 时才会保持存在的节点,当客户端和服务端连接中断,则当前连接持有的所有节点都会被删除

持久节点:

与临时节点相反,不会随会话连接的中断而删除,需要客户端主动删除

顺序性:

如果使用 Z 的顺序节点,那么所有节点就会在名字的末尾附加一个序列号,序列号是由父节点维护的单调递增计数器生成

临时/持续节点:

通知实现原理:

实现分布式排他锁:

第一种,通过创建临时 Znode 简单实现:

第二种,通过创建临时顺序 Znode 实现:

第三种,解决第二种的羊群效应:

  1. 客户端连接 Zookeeper,并在 /lock 下创建临时且有序(即EPHEMERAL_SEQUENTIAL)的子节点,如,第一个子节点为 /lock/lock-000,第二个为 /lock/lock-001,以此类推;

  2. 创建成功后,获取 /lock 下的子节点列表,判断刚创建的子节点在列表中是否是序号最小的子节点,如果是,则认为是获得锁,否则,监听刚创建的子节点的前一位子节点的删除消息,等获得该子节点的变更通知后,重复此步骤,直至获得锁为止;

  3. 执行业务代码;

  4. 完成业务代码后,删除对应子节点释放锁;

与 Redis 实现分布式锁比较:

  1. Redis 需要自己实现重试逻辑,比较消耗性能;

  2. zk 重试获取锁,对节点注册监听器即可,不需要主动尝试,性能开销小;

  3. 如果 Redis 获取锁的客户端挂了,就不能主动删除 key,只能等待 key 的超时到期,而 zk 会主动发现客户端断连,并将临时 znode 删除,触发后面的监听器逻辑

参考

实现分布式共享锁:

扩展:

DNS:

  • DNS(Domain Name System,域名系统),万维网上作为域名和 IP 地址相互映射的一个分布式数据库,方便用户访问互联网,无需记住能够被机器直接读取的 IP 数串。

  • 通过域名,最终得到该域名对应的 IP 地址的过程叫做域名解析。

  • DNS 协议运行在 UDP 协议智商,使用端口号 53。

共识算法:

Raft

参考

https://draveness.me/zookeeper-chubby

详解Zookeeper原理与应用场景的更多相关文章

  1. AspectJWeaver文件写入gadget详解和两种应用场景举例

    目录 0 前言 1 环境 2 gadget解析 2.1 高版本Commons-Collections的防御措施 2.2 获取AspectJWeaver的调用链 2.3 gadget详解 3 两种应用场 ...

  2. 分布式大牛详解Zookeeper底层原理

    很多学员都在反馈,说zk很难学,学的不是很明白,在这里,我继续带着大家详解一遍Zookeeper 首先zk是什么呢首先肯定是一个个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用 ...

  3. 丰富图文详解B-树原理,从此面试再也不慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 本篇原计划在上周五发布,由于太过硬核所以才拖到了这周五.我相信大家应该能从标题当中体会到这个硬核. 周五的专题是大数据和分布式,我最初的打算 ...

  4. [转]Zookeeper原理及应用场景

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...

  5. 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)

    原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解    By 岩之痕 目录: 一:综述 ...

  6. nmap详解之原理与用法

    前言 nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称.Nmap最初是由 ...

  7. P2P技术详解(一):NAT详解——详细原理、P2P简介

    1. IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联网发 ...

  8. ThreadLocal类详解:原理、源码、用法

    以下是本文目录: 1.从数据库连接探究 ThreadLocal 2.剖析 ThreadLocal 源码 3. ThreadLocal 应用场景 4. 通过面试题理解 ThreadLocal 1.从数据 ...

  9. Percona-xtrabackup 使用详解与原理

    现在有个需求需要对使用 innodb 的数据库进行热备.网上查了很多工具皆推荐 Percona-xtrabackup 于是就仔细了解调研一番. 我们可以前往 https://www.percona.c ...

随机推荐

  1. 【Excel】SUMIF 或用 筛选器 实现挑选含有某些字段的值,然后把这些值所对应的后面某列上的值相加

    Background: 挑选含有某些字段的值,然后把这些值所对应的后面某列上的值相加.比如挑选下表中,所有带有“MX104”这个字段的值,然后把它的后面total那一列的值相加. Solution: ...

  2. jquery 1.7.2源码解析(二)构造jquery对象

    构造jquery对象 jQuery对象是一个类数组对象. 一)构造函数jQuery() 构造函数的7种用法: 1.jQuery(selector [, context ]) 传入字符串参数:检查该字符 ...

  3. 2190 ACM 数学概率论的乘法和加法原则

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2190 思路:明显我们要寻找 边长为n和边长为n-1,n-2,n-3·····的规律,这样得出一个递推公式就 ...

  4. 【DWM1000】 code 解密6一TAG 状态机第一步

    我们前面分析过,不论ANCHOR 还是TAG,前面变量的初始化基本都是一样的,只是状态机必须明确区分不同的设备类型.我们从开始看TAG.由于初始化TAG的 testAppState一样初始化为TA_I ...

  5. 关于数据ajax请求

    默认设置下,所有请求均为异步请求.如果需要发送同步请求,请将此选项设置为 false.注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行. var temp; $.ajax({ asy ...

  6. JavaScript踩坑

    1 //这样做会抛出错误 alert(ttt); //这样做不会,只是会弹出undefine而已 alert(window.ttt); 当然可以try catch如此捕获异常 try { //这样做会 ...

  7. C++程序设计方法3:函数重写

    派生类对象包含从基类继承类的数据成员,他们构成了“基类子对象”基类中的私有成员,不允许在派生类成员函数中被访问,也不允许派生类的对象访问他们:真正体现基类私有,对派生类也不开放其权限:基类中的公有成员 ...

  8. Java中的public、private、protected,函数修饰符

    1.public:public表明该数据成员.成员函数是对所有用户开放的,项目中其他脚本都可以直接进行调用 2.private:private表示私有,私有的意思就是除了脚本之外,项目中其他类都不可以 ...

  9. PAT基础6-2

    6-2 多项式求值 (15 分) 本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑​i=0​n​​(a[i]×x​i​​) 在x点的值. 函数接口定义: dou ...

  10. 1. cs231n k近邻和线性分类器 Image Classification

    第一节课大部分都是废话.第二节课的前面也都是废话. First classifier: Nearest Neighbor Classifier 在一定时间,我记住了输入的所有的图片.在再次输入一个图片 ...