【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(写的 ...
随机推荐
- 国际化vue-i18n 向语言包中传入参数
模板 <span>{{$t('el.table.total', { pagetotal: 123 })}}</span> js代码中 this.$t('el.table.num ...
- Python笔记(4)——元组(Python编程:从入门到实践)
元组 1. 元组:不可变的列表.元组一经创建不能被修改. 2. 表示:用圆括号()来表示,并用逗号来分隔其中的元素.可通过索引访问其元素. 3. 访问:访问列表元素,指出元组的名称,再指出元素的索引, ...
- String类、StringBuffer类、StringBuilder类
String类.StringBuffer类.StringBuilder类 String类的创建 // 方式一 直接赋值 String s = "woshihaoren"; // 方 ...
- 关于JSP无法使用静态引用的问题案例
问题描述: 在写项目时,对于头部信息,尾部信息,分页信息等出现频率高,又很雷同的部分进行抽取时,使用到了jsp的静态引用功能,但之前我每次使用,都会导致程序报错,甚至出现tomcat无法正常启动的情况 ...
- Integer类自动拆箱,装箱解析
1.自动拆箱 例1: int i1 = 10; Integer i2 = new Integer(10); System.out.println(i1 == i2); 这个结果是true i1为基本数 ...
- C# EF框架的入门使用
如何构建数据模型 新建项 ADO.NET 实体模型 设置链接 链接字符串需要选择"是,包含敏感数据 注意:EF的框架引用的表应该要存在主键,程序引用中要包含 using System.Dat ...
- Swagger UI教程 API 文档神器 搭配Node使用 web api 接口文档 (转)
http://www.68idc.cn/help/makewebs/qitaasks/20160621620667.html 两种方案 一.Swagger 配置 web Api 接口文档美化 二.通过 ...
- spring事件发布与监听
一.组成部分 spring的事件监听有三个部分组成,事件(ApplicationEvent).监听器(ApplicationListener)和事件发布操作. 二.具体实现 事件 事件对象就是一个简单 ...
- angularJS:一个页面多个ng-app
var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $rootScope) { $scop ...
- maven 多模块项目的测试覆盖率分析 - jacoco 聚合分析
前言 对于大多数 maven 多模块化工程,可以使用 Jacoco 这款工具,关于 Jacoco 这款工具,ChatGPT 对它的描述是这样的: JaCoCo(Java Code Coverage)是 ...