Zookeeper概述

1 概述

  • Zookeeper是一个开源的、分布式的,为分布式应用提供协调服务的Apache项目。

  • Zookeeper从设计模式的角度来看,是一个基于观察者模式设计的分布式服务管理框架

  • 它负责管理大家都关心的数据,然后接收观察者的注册

  • 一旦数据发生变化,Zookeeper就负责通知那些注册在Zookeeper的观察者做出响应的反应

2 特点

  • 一个领导者(Leader)多个跟随者(Follower)组成的集群

  • 集群中只要有半数以上的节点存活,Zookeeper集群就能正常服务

  • 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到那个Server,数据都是一致的

  • 更新请求顺序,来自同一个Client的更新请求按照其发送顺序依次执行

  • 数据更新原子性:一次数据更新要么成功要么失败

  • 实时性:在一定时间范围内,Client能读到最新的数据

3 Zookeeper数据结构

Zookeeper数据模型结构与Unix文件系统类似,整体可以看做是一棵树,每个节点称作一个Znode每一个Znode默认能够存储1Mb的数据,每个Znode都能通过路径进行唯一标识

4 应用场景

Zookeeper内部原理

1 选举机制

  • 半数机制:半数以上的机器存活,集群可用,所以Zookeeper适合安装奇数台服务器
  • 优先选择自己,不能选出则选节点id最大的那个

2 节点类型

  • 持久:客户端和服务器端断开连接后,创建的节点不删除,持久化节点又分为两类:

    • 持久化目录节点:客户端和服务器端断开连接后,创建的节点不删除

    • 持久化顺序编号目录节点:客户端和服务器端断开连接后,创建的节点不删除,只是Zookeeper对节点名称进行顺序编号

      创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。

      在分布式系统中,顺序号可以用于为所有的事件进行全局排序,这样客户端可以根据顺序号来推断事件的顺序

  • 短暂:客户端和服务器端断开连接够,创建的节点自己删除,短暂节点也分为两类:

    • 临时目录几点
    • 临时顺序编号目录节点

3 Stat结构体

每次修改Zookeeper节点状态都会收到一个zxid形式的时间戳,也就是Zookeeper事务ID。事务ID是Zookeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2则说明1在2前面发生。

  • dataLength-znode的数据长度
  • numChild-znode子节点数量

4 监听器原理

  • 首先一个main线程用于创建Zookeeper客户端

  • 然后在main线程中创建客户端,客户端会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)

  • 通过connet线程将监听事件发送给Zookeeper,然后在Zookeeper的注册监听列表中会将注册的监听事件添加到列表中

    监听事件包含客户端的ip、端口号以及监听路径等信息

  • Zookeeper监听到有数据或者路径发生变化,就会把这个消息发送给客户端listener线程,listener线程内部调用process()方法

5 服务器写数据流程

主要是客户端向服务端写数据,怎么保证数据在集群上的同步:

  1. Client向Zookeeper的Server1上发送写请求
  2. 如果Server1不是Leader,则会把请求进一步转发给Leader,然后Leader会将请求广播给各个Server,每个Server写成功之后就会通知Leader
  3. Leader收到半数以上的Follower写成功的通知后,就会告诉最开始接收到写请求的Server1数据写入成功
  4. Server1会进一步通知Client数据写入成功,这时就认为整个写入操作成功了

【Zookeeper】(一)概述与内部原理的更多相关文章

  1. JVM 内部原理系列

    JVM 内部原理(一)— 概述 JVM 内部原理(二)— 基本概念之字节码 JVM 内部原理(三)— 基本概念之类文件格式 JVM 内部原理(四)— 基本概念之 JVM 结构 JVM 内部原理(五)— ...

  2. Zookeeper【概述、安装、原理、使用】

    目录 第1章 Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4应用场景 第2章 Zookeep安装 2.1 下载地址 2.2 本地模式安装 1. 安装前准备 2. 配置修改 ...

  3. 【Zookeeper】结构、应用、安装部署与参数、客户端命令行操作、API应用、内部原理(选举机制、写数据、监听器)

    一.Zookeeper入门 1.概述 分布式服务管理框架(存储和管理数据) Zookeeper=文件系统+通知机制 2.特点 主从集群 半数以上,正常工作 请求顺序执行 数据更新具有原子性 3.数据结 ...

  4. JVM 内部原理(一)— 概述

    JVM 内部原理(一)- 概述 介绍 版本:Java SE 7 图中显示组件将会从两个方面分别解释.第一部分涵盖线程独有的组件,第二部分涵盖独立于线程的组件(即线程共享组件). 目录 线程独享(Thr ...

  5. 学习Zookeeper之第3章Zookeeper内部原理

    第 3 章 Zookeeper 内部原理 3.1 选举机制 3.2 节点类型 3.3 stat 结构体 3.4 监听器原理   1)监听原理详解   2)常见的监听 3.5 写数据流程 第 3 章 Z ...

  6. ZooKeeper学习笔记(二)——内部原理

    zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...

  7. 深入理解javascript作用域系列第一篇——内部原理

    × 目录 [1]编译 [2]执行 [3]查询[4]嵌套[5]异常[6]原理 前面的话 javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域.作用域 ...

  8. Apache Storm内部原理分析

    转自:http://shiyanjun.cn/archives/1472.html 本文算是个人对Storm应用和学习的一个总结,由于不太懂Clojure语言,所以无法更多地从源码分析,但是参考了官网 ...

  9. 批处理引擎MapReduce内部原理

    批处理引擎MapReduce内部原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce作业生命周期 MapReduce作业作为一种分布式应用程序,可直接运行在H ...

  10. ZooKeeper分布式锁的实现原理

    七张图彻底讲清楚ZooKeeper分布式锁的实现原理[石杉的架构笔记] 文章转载自:https://juejin.im/post/5c01532ef265da61362232ed#comment(写的 ...

随机推荐

  1. Crypto入门 (四)不仅仅是Morse(Morse+Bacon)

    前言: 前面我们刚刚学过了解Morsecode,现在我们将继续学习 不仅仅是Morse: 题目:--/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--. ...

  2. kvm虚拟机添加在线快照

    1-1.创建默认快照--一般为一串数字 virsh snapshot-create 虚拟机名称 1-2.创建自定义名称快照 virsh snapshot-create-as 虚拟机名称 快照名称 2. ...

  3. (6) JavaScript - Math对象与日期对象

    1 认识对象 概念:对象就是一种类型,一种引用类型,而对象则是引用类型的实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,通常它也被称作类. 面向过程思想:只考虑过程 ...

  4. Exception processing template "index": An error happened during template rendering

    问题所在 brandList[0].brandId出错,要不就改正,要不就把他删了,注释也会报错.

  5. 【Beat】Scrum Meeting 3

    时间:2021年6月28日 1.各个成员今日完成的任务以及贡献小时数 姓名 今日完成任务 贡献小时数 鑫 进行软件测试,修改bug 4 荣娟 进行软件测试,修改bug 4 亚楠 进行软件测试,修改bu ...

  6. 钉钉获取第三方token时提示签名时间戳参数超时的处理方法

    今天在更新平台功能时,碰到一个问题,从钉钉跳转到平台,始终不能成功.查看日志发现,出现了 签名时间戳参数超时 的错误. 想着没有动过相对应的代码,应该不是代码的问题. 查询官方文档,没有给出明确的答复 ...

  7. Spring源码分析之注册BeanDefinition

    测试代码 public class ContextApplication { public static void main(String[] args) { ClassPathXmlApplicat ...

  8. PHP 循环语句

    循环机构,在一定的控制下,对此执行. 在PHP中,有以下几种循环 for循环.while循环.do-while循环.forech循环(针对数组) for 循环 语法 for (条件1;条件2;条件3) ...

  9. Javaweb基础复习------JSON相关知识

    JSON(JavaScript对象表示法) 首先,我们需要知道的是,要使用json语法的话,就需要在Maven项目中导入相关的包,可以参考我之前发过的那个Maven导包那个网址,在里面找到这个页面: ...

  10. PicGo + Gitee(码云)实现markdown图床 (转载)

    https://zhuanlan.zhihu.com/p/102594554 备忘录 我配置图床的时候参考的是这篇文章.我暂时使用的是这种方案. 因为考虑到有的文章要多平台发布,我建议你选择markd ...