zookeeper学习整理

概述

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

http://www.javashuo.com/article/p-acbzudyc-bo.html算法

核心概念

节点

zk的命名空间是由一系列数据节点组成的,节点上能够包含数据。安全

类型

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

建立过程当中经过组合有如下4种:app

  • CreateMode.PERSISTENT :永久性节点框架

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

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

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

只有叶子节点能够是临时节点,其余节点必须是永久性节点。htm

状态信息

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

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

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

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

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

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

Watcher-数据变动的通知

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

ACL--保障数据的安全

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

客户端

原生

http://www.javashuo.com/article/p-pckbzquq-gr.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服务

分布式队列/屏障

相关文章
相关标签/搜索