zookeeper学习整理
概述
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学习整理的更多相关文章
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- TweenMax学习整理--特有属性
TweenMax学习整理--特有属性 构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- !!对python列表学习整理列表及数组详细介绍
1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
- Wix学习整理(5)——安装时填写注册表
原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...
- Wix学习整理(6)——安装快捷方式
原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...
- Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式
原文:Wix学习整理(7)--在开始菜单中为HelloWorld添加卸载快捷方式 通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些 ...
- Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析
原文:Wix学习整理(4)--关于WiX文件格式和案例HelloWorld的分析 关于WiX文件格式 .wxs是WiX的源文件扩展名..wxs文件以类XML文件的格式来指定了要构造Windows In ...
随机推荐
- PHP截取字符串函数substr()函数实例用法详解
在PHP中有一项非常重要的技术,就是截取指定字符串中指定长度的字符.PHP对于字符串截取可以使用PHP预定义函数substr()函数来实现.下面就来介绍一下substr()函数的语法及其应用. sub ...
- LOJ P10002 喷水装置 题解
每日一题 day35 打卡 Analysis 先将不符合条件的区间去掉(即半径小于W,不然宽度无法符合),将符合条件的按区间存入节点中.区间的左边界是x-sqrt(r*r-W*W/4.0),要计算x轴 ...
- H5页面中判断是安卓手机还是ios手机的方法;APP页面中嵌套的H5跳转到APP其他页面的方法。
(一).在H5页面中,可以直接利用如下的方法来进行判断是安卓还是ios. var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linu ...
- vlang module 使用
vlang 支持module,概念以及使用类似rust 以及golang 的gopath(从当前的文档以及使用来说),但是还不完整 以及是够用,但是有问题 v module 试用 项目结构 ├── ...
- nginx 添加用户认证
nginx 添加用户认证 nginx 配置文件添加: 配置代理添加用户认证:server { listen ; server_name localhost; location ...
- rollup node.js 打包工具
最近在做一个提供给浏览器和node同时使用的js的url模板工具类,在用什么打包工具上纠结了一段时间,正好有一天在知乎上看到了关于rollup的介绍,在自己试了试之后,就决定用rollup.js来打包 ...
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)
译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...
- javascript巧用注释保存html文本结构
在js中,肯定会遇到js代码里面有html接口的时候,骚年们都有哪些写法? 刚学JS的写法: <script> var strHtml="<div id=\"te ...
- USACO 重排干草&&BZOJ1045
USACO 重排干草&&BZOJ1045 Description 约翰订购了很多干草,他在农场里标记了 N 个位置.这些位置近似地构成一个圆环.他原打算 让送货司机在 i 号位卸下 B ...
- USACO 2009 Open 干草塔 Tower of Hay
USACO 2009 Open 干草塔 Tower of Hay Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草 包会从传送带上运来,共会出现N包 ...