数据模型

ZooKeeper数据模型是一个树状的数据结构,类似于文件系统;和文件系统的区别在于树中的每一个节点(叶子节点与非叶子节点)都可以保存数据,且每个节点的访问都必须从根节点开始,以斜线作为分隔的访问路径,如 /root/a/b/,它没有相对路径的概念,所有的节点都必须通过绝对路径来访问;

Znode

ZooKeeper树中的节点被称之为znode,znode维护了一个stat结构,其中包含了版本号和时间戳;版本号是一直递增的,每一次znode中包含的数据被更新,版本号也会发生改变;

当客户端尝试去更新或者删除一个znode的时候,必须提供它要更新/删除的znode的当前版本号,如果版本号不正确,这个更新/删除就会失败(有点类似于数据库操作的乐观锁)。

观察者

客户端可以给znode添加一个观察者(类似于事件),当znode发生改变时,这个观察者会被触发,相应的客户端就会收到一个通知;

Zookeeper客户端可以给三个操作设置观察者:exists、getChildren、getData:

操作 触发的时间点
getChildren

当znode的子节点被创建或者删除、当znode自身被删除时触发

exists 当znode被创建、删除,或者数据被更新时触发
getData 当znode被删除或znode的数据被更新时触发

观察者只会被触发一次,如果想被多次触发,则需要在触发之后重新注册;观察者的常用地方在于,使用ZooKeeper作为一个配置中心,各个客户端(应用程序)通过观察者监听znode从而获取最新的配置;

顺序性Znode

当创建一个Znode时,你可以要求ZooKeeper添加一个单调递增的计数器到这个znode上,这样你就可以在同一个父节点下创建多个相同的znode,而每个znode会以一串数字结尾,并单调递增;

这个计数器只在同一个父节点下唯一,最大值为2147483647,超过之后则会溢出;

暂时性Znode

Znode包含两种类型:暂时性znode持久性znode;当创建这个znode的客户端session超时时,暂时性znode会被删除,而持久性的znode与客户端session无关,只能被显式的删除;

暂时性Znode不能有子节点,但它对所有的客户端是可见的;

顺序性Znode和暂时性Znode相结合可以作为分布式锁,具体操作为:创建顺序性znode的最小值的客户端作为分布式锁的获得者,当这个客户端关闭Session时,其创建的znode会被删除,而剩下的顺序性znode最小值的创建者将捕获这个分布式锁;为避免惊群效应,每一个客户端只需要在比它稍小的那个znode上设置一个观察者,这样当znode被删除时,只会唤醒一个客户端。

一致性

选举

ZooKeeper使用Master/Slave模式,通过ZAB算法实现Leader的选举机制;

ZooKeeper的所有机器可以分为三类:Leader、Follower、Learner,Learner主要用于同步Znode数据,选举主要在多个Follower之间进行;选举的目的主要用于在多个Follower中选举出持有zxid和myid(ZooKeeper服务器的标识ID)相对较大(比较过半数即可)的那个机器作为Leader;

在ZooKeeper集群中的每一个更新操作都会有一个全局的唯一性标识,这个标识叫做zxid,又称之为ZooKeeper事务ID,它永远是递增的;

Zxid是一个64位的数字,包含两部分:任期(epoch)和计数器(counter),高32位为任期,低32位为计数器;当一个新的Leader选举出来之后,任期会加1,在同一个Leader任期内保持计数器递增,通过此种方式记录操作的顺序性。

ZAB算法的核心在于多个Follower之间两两比较,如果一个Follower的zxid + myidn/2+1(n为Follower的总数)个Follower都大,则会被选举出来作为Leader;

正因为选举需要比较过半数的Follower,如果过半数的Follower宕机,则集群崩溃。

写操作

ZooKeeper集群的写操作都是由Leader来完成的,然后再通过Leader同步到Follower,Zookeeper在返回结果到客户端之前并不会保证同步到所有的Follower,只要过半(n/2+1)Follower同步成功即可;

读操作

客户端可以连接到集群中任何一台机器进行读操作,但不能保证都能读到最新的数据,因此在getData之前最好调用sync操作同步最新的数据再读取。

ZooKeeper基础知识总结的更多相关文章

  1. zookeeper基础知识整理

    http://blog.csdn.net/pelick/article/details/7269670 http://zookeeper.apache.org/doc/trunk/javaExampl ...

  2. zookeeper基础知识

    Zookeeper简介 ZooKeeper设计目的 最终一致性client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能. 可靠性具有简单.健壮.良好的性能,如 ...

  3. ZooKeeper_基础知识学习

    ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...

  4. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

  5. 《两地书》--Kubernetes(K8s)基础知识(docker容器技术)

    大家都知道历史上有段佳话叫“司马相如和卓文君”.“皑如山上雪,皎若云间月”.卓文君这么美,却也抵不过多情女儿薄情郎. 司马相如因一首<子虚赋>得汉武帝赏识,飞黄腾达之后便要与卓文君“故来相 ...

  6. HBASE基础知识总结

    HBASE基础知识总结 一,概要说明 文章首先回顾HBase 的数据模型和数据层级结构,对数据的每个层级的作用和架构进行了详细阐述:随后介绍了数据写入和读取的详细流程.先把架构图和流程图来坐镇. 架构 ...

  7. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  8. SpringCloud(1) 架构演进和基础知识简介

    一.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive 1.单体应用:开发速度慢.启动时间长.依赖庞大.等等 2.微服务:易开发.理 ...

  9. 最全的spark基础知识解答

    原文:http://www.36dsj.com/archives/61155 一. Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduc ...

随机推荐

  1. Set、Map、WeakSet 和 WeakMap 的区别

    先总结: Set1.  成员不能重复2. 只有健值,没有健名,有点类似数组.3. 可以遍历,方法有add, delete,hasweakSet 1. 成员都是对象 2. 成员都是弱引用,随时可以消失. ...

  2. IDEA2021.2安装与配置

    https://blog.csdn.net/qq_37242720/article/details/119349394

  3. FastJson简介

    FastJson简介 首先,介绍一下fastjson.fastjson是由alibaba开源的一套json处理器.与其他json处理器(如Gson,Jackson等)和其他的Java对象序列化反序列化 ...

  4. String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?

    原理知识: 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的 值不会改变原始的值. 如果参数类型是引用类型,那 ...

  5. promise ,async 小记

    Promise Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值. 摇色子游戏,随机1-6的一个整数,并且将其返回. function fn() { retur ...

  6. 【力扣】454. 四数相加 II

    给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单化,所有的 A ...

  7. SQL 基础知识终极指南

    什么是数据库? 数据库是以电子方式从系统中存储和检索的大量数据集合. 存储在数据库中的结构化数据被处理.操纵.控制和更新以执行各种操作. 行业中使用的一些流行数据库是 Oracle.MySQL.Pos ...

  8. Windows 10 彻底关闭 Antimalware Service Executable 降低内存占用

    概述 最近给内网的一台电脑安装 Windows 10 专业版系统,由于此电脑不会涉及到不安全因素,所以杀毒软件非必须. 以最大限度节省系统资源考虑,默认安装的 Micoroft Defender 占用 ...

  9. 第四届“传智杯”全国大学生IT技能大赛题解

    目录 A B C D E F G 今年题目难度普遍偏低.只有 D,F 还好. A 按题目给的公式计算即可.注意应在最后的答案中去掉小数部分. B 按照题意模拟即可.注意答案要与 \(0\) 取 \(\ ...

  10. CF1064A Make a triangle! 题解

    Content 有三条长度分别为 \(a,b,c\) 的线段.你可以在一个单位时间内将一条线段的长度增加 \(1\),试求出能使这三条线段组成一个三角形的最短时间. 数据范围:\(1\leqslant ...