博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解 zookeeper
阅读量:6592 次
发布时间:2019-06-24

本文共 3330 字,大约阅读时间需要 11 分钟。

hot3.png

理解 zookeeper

Zookeeper 主要用来解决分布式应用中经常遇到的一些数据管理,如统一命名服务器、状态同步服务、集群管理、分布式应用配置项的管理。

节点特性

  1. 同一时刻多台机器创建同一个节点,只有一个会争抢成功。利用这个特性可以做分布式锁。
  2. 临时节点的生命周期与会话一致,会话关闭则临时节点删除。利用这个特性经常来做心跳,动态监控,负载等动作。
  3. 顺序节点保证节点名全局唯一。这个特性可以用来生成分布式环境下的全局自增长id。

zookeeper 提供的服务

  1. 创建节点
  2. 删除节点
  3. 更新节点
  4. 获取节点信息
  5. 权限控制
  6. 事件监听

Zookeeper的集群对server进行了归类:

  • Leader
  • Follower
  • Observer

Zookeeper 作用(使用场景)

  1. 配置中心 -- Zookeeper 的目录结构比较特殊,可以这个特性作为分布式的配置中心,当配置内容发生更新可以及时通知各服务器进行更新
  2. 集群选举 -- 当某一个服务宕机或者整个服务重启,可根据Zookeeper节点的顺序一致性来选择最大节点或者最小节点作为leader
  3. 分布式锁 -- 原理同集群选举,根据节点的顺序一致性来选择最小节点对应的那个服务获得锁,当服务执行完成删除节点就会释放锁,再由其他服务去争取锁。
  4. 注册中心 -- Zookeeper的目录以及子节点。主要通过对节点的管理做到发布以及事件监听做到订阅。
  5. 队列管理
    1. 同步队列 当一个队列的队员都聚齐时,队列才可用,否则一直等待所有的成员到达,这种是同步队列
      创建一个父目录 /synchronizing ,每个成员都监控标志(Set Watch)位目录 /synchronizing/start 是否存在,然后每个成员都加入这个队列,加入队列的方式就是创建 /synchronizing/member_i 的临时目录节点,然后每个成员获取 、synchronizing 目录的所有目录节点,也就是 member_i,判断 i 的值是否已经是成员的目录,如果小于成员个数就等待 synchronizing/start 的出现,如果相等就创建synchronizing/start
    2. 异步队列 队列按照FIFO方式进行入队和出队操作,例如实现生产者和消费者模型。
      保证所有成员加入队列时都是有编号的,出队是通过getChildren() 方法可以返回当前所有的队列元素,然后消费其中最小的元素。

Zookeeper 在分布式中的作用:

使用Zookeeper提供分布式锁机制,从而实现分布式的一致性处理。

  • Barrier
  • Queue
  • Lock
  • 2PC

Java Api 接口

String create(String path, byte data[], List
acl, CreateMode createMode)void create(String path, byte data[], List
acl, CreateMode createMode, StringCallback cb, Object ctx)void delete(String path, int version)void delete(String path, int version, VoidCallback cb, Object ctx)Stat setData(String path, byte data[], int version)void setData(String path, byte data[], int version, StatCallback cb, Object ctx)Stat setACL(String path, List
acl, int version)void setACL(String path, List
acl, int version, StatCallback cb, Object ctx)Stat exists(String path, Watcher watcher)Stat exists(String path, boolean watch)void exists(String path, Watcher watcher, StatCallback cb, Object ctx)void exists(String path, boolean watch , StatCallback cb, Object ctx)byte[] getData(String path, Watcher watcher, Stat stat)byte[] getData(String path, boolean watch , Stat stat)void getData(String path, Watcher watcher, DataCallback cb, Object ctx)void getData(String path, boolean watch , DataCallback cb, Object ctx)List
getChildren(String path, Watcher watcher)List
getChildren(String path, boolean watch )void getChildren(String path, Watcher watcher, ChildrenCallback cb, Object ctx)void getChildren(String path, boolean watch , ChildrenCallback cb, Object ctx)List
getChildren(String path, Watcher watcher, Stat stat)List
getChildren(String path, boolean watch , Stat stat)void getChildren(String path, Watcher watcher, Children2Callback cb, Object ctx)void getChildren(String path, boolean watch , Children2Callback cb, Object ctx)

接口说明

  • 每一种安同步还是异步
  • 添加指定watcher还是默认watcher分为4中。默认watcher在Zookeeper 初始化中进行指定。
  • 如果包含boolean watch 的读方法传入true,则将默认为watcher注册为所关注事件的watch。如果传入false则不注册watch。

CreateMode

  • PERSISTENT 持续的。相比与EPHEMERAL,不会随着client session的close或者expire而消失
  • PERSISTENT_SEQUENTIAL
  • EPHEMERAL 短暂的,生命周期依赖于client session、对应session close/expire 后其znode也会消失。
  • EPHEMERAL_SEQUENTIAL SEQUENTIAL意为顺序的。

Zookeeper 为了解决数据的一致性,使用Watcher的异步回调接口,将服务器znode的变化以事件的形式通知给客户端,主要是一种方向推送的机制,让客户端可以做出及时响应。比如及时更新后端的可用集群服务列表。

参考网站

Watcher/Callback 参考网站

ACL

集群管理

Zookeeper 官方文档

TODO

Zookeeper 一致性

转载于:https://my.oschina.net/shichangcheng/blog/1553733

你可能感兴趣的文章
数据库操作
查看>>
samba介绍和安装
查看>>
利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)-----转载
查看>>
51nod 1179:最大的最大公约数
查看>>
函数的原型对象和原型链?
查看>>
flash TweenMax用法
查看>>
hdu4185+poj3020(最大匹配+最小边覆盖)
查看>>
hdu4489(递推dp)
查看>>
Shell脚本基础
查看>>
spring rabbitmq集成
查看>>
sed用法点滴
查看>>
TIBCO ActiveMatrix BPM 生成daa包脚本
查看>>
位运算之二进制中1的个数
查看>>
cygwin sshd服务启动不了的解决方案(转)
查看>>
语音识别实践 之 科大讯飞
查看>>
cassandra的命令
查看>>
pta l2-20(功夫传人)
查看>>
python基础知识--标志位的设定
查看>>
ECMAScript 基础(一)-语法
查看>>
python_excel
查看>>