概述

zookeeper是一个高可用的分布式数据管理与协调框架,基于ZAB算法实现,主要解决分布式一致性问题。

https://www.cnblogs.com/felixzh/p/5869212.html

核心概念

节点

zk的命名空间是由一系列数据节点组成的,节点上可以包含数据。

类型

节点类型分为:持久节点、临时节点、顺序节点。

创建过程中通过组合有以下4种:

  • CreateMode.PERSISTENT :永久性节点

  • CreateMode.PERSISTENT_SEQUENTIAL :永久性序列节点

  • CreateMode.EPHEMERAL :临时节点,会话断开或过期时会删除此节点

  • CreateMode.PERSISTENT_SEQUENTIAL :临时序列节点,会话断开或过期时会删除此节点

只有叶子节点可以是临时节点,其他节点必须是永久性节点。

状态信息

Stat类中包含了数据节点的所有状态信息。

版本-保证分布式数据原子性操作

zk中数据节点具有3种类型的版本信息:

  • version : 当前数据节点数据内容的版本号

  • cversion: 当前数据节点子节点的版本号

  • aversion: 当前数据节点ACL变更版本号

Watcher-数据变更的通知

zk内部一个重要的特性就是可以监听节点的变化状态。

ACL--保障数据的安全

zk提供了一套完善的Access Control List权限控制机制来保障数据的安全。

客户端

原生

https://www.cnblogs.com/zpb2016/p/5791641.html

http://blog.csdn.net/jiuqiyuliang/article/details/56012027

zkClient.jar

http://blog.csdn.net/wo541075754/article/details/68929512

Curator

全世界使用最广泛的zk客户端之一。

对事件监听、分布式锁、分布式计数器、master选举、分布式Barrier有很好的支持。

应用场景

分布式锁

锁包括排他锁和共享锁,排他锁又成为写锁、独占锁,加锁期间只允许一个事务对其操作。共享锁又成为读锁,当一个事务对数据对象加上共享锁,事务就只能进行数据读取,其他事务也只能对数据对象加共享锁,直到此对象上所有共享锁被释放。

分布式锁实现流程:

1.在/app下创建临时节点lock

2.获取/app下所有子节点

3.判断是否是写请求,如果是写请求获取排他锁,自己的lock节点序号节点最小占有锁,然后执行、释放,否则监听比自己序号小的节点,等待锁;

4.如果是读请求,判断自己的lock节点是否是最小的,或者比自己小的都是读请求,如果是占有锁,否则监听比自己序号小的节点,等待锁。

master选举

利用zk的强一致性,能够保证高并发下节点的创建一定能全局唯一性。

实现流程:

N台服务在同一时刻同时对/app节点下创建"master"临时子节点,只有其中一台可以创建成功,此时创建成功的便是master,其他服务队/app节点上注册子节点变更的watcher,如果master挂了,其他服务重新进行选举。

配置中心

配置中心也可以叫做数据发布/订阅系统。zk内部采用的是推拉相结合的方式:客户端向服务端注册需要关注的节点,一旦节点数据发生变更,服务端就会向相应的客户端发送watcher事件通知,客户端接收到消息后,需要主动到服务端获取最新的数据。

命名服务

在zk中,每一个数据节点都能够维护一份子节点的顺序顺列,当客户端对其创建一个顺序子节点的时候zk会自动以后缀的形式在其子节点上添加一个序号,命名服务即使利用zk的这种特性。

动态DNS服务

分布式队列/屏障

zookeeper学习整理的更多相关文章

  1. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  2. TweenMax学习整理--特有属性

    TweenMax学习整理--特有属性   构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...

  3. HttpClient学习整理

    HttpClient简介HttpClient 功能介绍    1. 读取网页(HTTP/HTTPS)内容    2.使用POST方式提交数据(httpClient3)    3. 处理页面重定向    ...

  4. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

  5. Java设计模式(学习整理)---命令模式

    设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...

  6. Wix学习整理(5)——安装时填写注册表

    原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...

  7. Wix学习整理(6)——安装快捷方式

    原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...

  8. Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式

    原文:Wix学习整理(7)--在开始菜单中为HelloWorld添加卸载快捷方式 通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些 ...

  9. Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析

    原文:Wix学习整理(4)--关于WiX文件格式和案例HelloWorld的分析 关于WiX文件格式 .wxs是WiX的源文件扩展名..wxs文件以类XML文件的格式来指定了要构造Windows In ...

随机推荐

  1. django-登录后得个人信息

    Web请求中的认证:https://yiyibooks.cn/xx/django_182/topics/auth/default.html Django使用会话和中间件来拦截request 对象到认证 ...

  2. ReactiveX 学习笔记(30)操作符辨析

    RxJava: merge/concat/switch RxJS: merge/concat/switch/exhaust RxSwift: merge/concat/switchLatest mer ...

  3. Uva11762 Race to 1——有向无环图&&记忆化搜索

    题意 给出一个整数 $N$,每次可以在不超过 $N$ 的素数中等概率随机选择一个 $P$,如果 $P$ 是 $N$ 的约数,则把 $N$ 变成 $N/P$,否则 $N$ 不变.问平均情况下需要多少次随 ...

  4. java正则表达式——规则表

    常用正则规则: 构造 匹配 字符 \\ 反斜线字符 \r 回车符 ('\u000D') \n 新行(换行)符 ('\u000A') 字符类 [abc] a.b 或 c [^abc] 任何字符,除了 a ...

  5. LeetCode 1049. Last Stone Weight II

    原题链接在这里:https://leetcode.com/problems/last-stone-weight-ii/ 题目: We have a collection of rocks, each ...

  6. 认识Nodejs

    一.概念 ①JavaScript运行环境:Node.js不是一门语言,不是库也不是框架,是一个JavaScript运行环境,简单点来讲就是Node.js可以解析执行JavaScript代码,也就是说J ...

  7. PHP.INI生成环境配置文件

    extension_dir = /home/php/lib/php/extensions/no-debug-zts- zend_extension = opcache.so extension = p ...

  8. QQ for Mac聊天纪录怎么查找??

    在你Mac上打开你的QQ,选择任意聊天窗口,打字的上面有6个图表快捷键,第6个就是查看聊天记录的功能键

  9. MATLAB 线性规划实例应用

    线性规划 线性规划函数 功能:求解线性规划问题 语法 x = linprog(f,A,b):求解问题 min fx,约束条件为 Ax <= b x = linprog(f,A,b,Aeq,beq ...

  10. P1099 树网的核——模拟+树形结构

    P1099 树网的核 无根树,在直径上找到一条长度不超过s的路径,使得最远的点距离这条路径的距离最短: 首先两遍dfs找到直径(第二次找的时候一定要吧father[]清零) 在找到的直径下枚举长度不超 ...