【Zookeeper】(一)概述与内部原理
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 应用场景
- 统一命名服务:对应用、服务进行统一命名
- 统一配置管理:即配置文件的同步和配置管理
- 一般要求一个集群中,所有节点的配置信息是一致的,如Kafka集群
- 对配置文件修改后,希望能够快速同步到各个节点上
- 统一集群管理
- 服务节点动态上下线
- 软负载均衡
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 服务器写数据流程
主要是客户端向服务端写数据,怎么保证数据在集群上的同步:
- Client向Zookeeper的Server1上发送写请求
- 如果Server1不是Leader,则会把请求进一步转发给Leader,然后Leader会将请求广播给各个Server,每个Server写成功之后就会通知Leader
- Leader收到半数以上的Follower写成功的通知后,就会告诉最开始接收到写请求的Server1数据写入成功
- Server1会进一步通知Client数据写入成功,这时就认为整个写入操作成功了
【Zookeeper】(一)概述与内部原理的更多相关文章
- JVM 内部原理系列
JVM 内部原理(一)— 概述 JVM 内部原理(二)— 基本概念之字节码 JVM 内部原理(三)— 基本概念之类文件格式 JVM 内部原理(四)— 基本概念之 JVM 结构 JVM 内部原理(五)— ...
- Zookeeper【概述、安装、原理、使用】
目录 第1章 Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4应用场景 第2章 Zookeep安装 2.1 下载地址 2.2 本地模式安装 1. 安装前准备 2. 配置修改 ...
- 【Zookeeper】结构、应用、安装部署与参数、客户端命令行操作、API应用、内部原理(选举机制、写数据、监听器)
一.Zookeeper入门 1.概述 分布式服务管理框架(存储和管理数据) Zookeeper=文件系统+通知机制 2.特点 主从集群 半数以上,正常工作 请求顺序执行 数据更新具有原子性 3.数据结 ...
- JVM 内部原理(一)— 概述
JVM 内部原理(一)- 概述 介绍 版本:Java SE 7 图中显示组件将会从两个方面分别解释.第一部分涵盖线程独有的组件,第二部分涵盖独立于线程的组件(即线程共享组件). 目录 线程独享(Thr ...
- 学习Zookeeper之第3章Zookeeper内部原理
第 3 章 Zookeeper 内部原理 3.1 选举机制 3.2 节点类型 3.3 stat 结构体 3.4 监听器原理 1)监听原理详解 2)常见的监听 3.5 写数据流程 第 3 章 Z ...
- ZooKeeper学习笔记(二)——内部原理
zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...
- 深入理解javascript作用域系列第一篇——内部原理
× 目录 [1]编译 [2]执行 [3]查询[4]嵌套[5]异常[6]原理 前面的话 javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域.作用域 ...
- Apache Storm内部原理分析
转自:http://shiyanjun.cn/archives/1472.html 本文算是个人对Storm应用和学习的一个总结,由于不太懂Clojure语言,所以无法更多地从源码分析,但是参考了官网 ...
- 批处理引擎MapReduce内部原理
批处理引擎MapReduce内部原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce作业生命周期 MapReduce作业作为一种分布式应用程序,可直接运行在H ...
- ZooKeeper分布式锁的实现原理
七张图彻底讲清楚ZooKeeper分布式锁的实现原理[石杉的架构笔记] 文章转载自:https://juejin.im/post/5c01532ef265da61362232ed#comment(写的 ...
随机推荐
- Crypto入门 (四)不仅仅是Morse(Morse+Bacon)
前言: 前面我们刚刚学过了解Morsecode,现在我们将继续学习 不仅仅是Morse: 题目:--/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--. ...
- kvm虚拟机添加在线快照
1-1.创建默认快照--一般为一串数字 virsh snapshot-create 虚拟机名称 1-2.创建自定义名称快照 virsh snapshot-create-as 虚拟机名称 快照名称 2. ...
- (6) JavaScript - Math对象与日期对象
1 认识对象 概念:对象就是一种类型,一种引用类型,而对象则是引用类型的实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,通常它也被称作类. 面向过程思想:只考虑过程 ...
- Exception processing template "index": An error happened during template rendering
问题所在 brandList[0].brandId出错,要不就改正,要不就把他删了,注释也会报错.
- 【Beat】Scrum Meeting 3
时间:2021年6月28日 1.各个成员今日完成的任务以及贡献小时数 姓名 今日完成任务 贡献小时数 鑫 进行软件测试,修改bug 4 荣娟 进行软件测试,修改bug 4 亚楠 进行软件测试,修改bu ...
- 钉钉获取第三方token时提示签名时间戳参数超时的处理方法
今天在更新平台功能时,碰到一个问题,从钉钉跳转到平台,始终不能成功.查看日志发现,出现了 签名时间戳参数超时 的错误. 想着没有动过相对应的代码,应该不是代码的问题. 查询官方文档,没有给出明确的答复 ...
- Spring源码分析之注册BeanDefinition
测试代码 public class ContextApplication { public static void main(String[] args) { ClassPathXmlApplicat ...
- PHP 循环语句
循环机构,在一定的控制下,对此执行. 在PHP中,有以下几种循环 for循环.while循环.do-while循环.forech循环(针对数组) for 循环 语法 for (条件1;条件2;条件3) ...
- Javaweb基础复习------JSON相关知识
JSON(JavaScript对象表示法) 首先,我们需要知道的是,要使用json语法的话,就需要在Maven项目中导入相关的包,可以参考我之前发过的那个Maven导包那个网址,在里面找到这个页面: ...
- PicGo + Gitee(码云)实现markdown图床 (转载)
https://zhuanlan.zhihu.com/p/102594554 备忘录 我配置图床的时候参考的是这篇文章.我暂时使用的是这种方案. 因为考虑到有的文章要多平台发布,我建议你选择markd ...