上篇文章 我们已经安装上了zookeeper,也简单的体验了一把,但是如果让你给别人介绍下zookeeper,可能也是说不出来。本篇文章就参考了网上各位优秀博主的文章,整理出自己更能理解的内容

优秀博文

    1. sunddenly的zookeeper系列

http://www.cnblogs.com/sunddenly/category/620563.html

    1. 程序员小灰zookeeper系列

https://mp.weixin.qq.com/s/Gs4rrF8wwRzF6EvyrF_o4A

简介

Zookeeper是一种分布式协调服务

之前的工作都是单机部署应用,并没有接触过zookeeper,现在 的新公司动不动就集群,什么主从,分布式,渣渣的我听得一脸蒙蔽,项目中也使用zookeeper进行应用配置以及使用了elasticjob。

应用场景

  • 1.分布式锁(利用Zookeeper的临时顺序节点,可以轻松实现分布式锁)
  • 2.服务注册和发现
  • 3.共享配置和状态信息

数据模型

Zookeeper的数据模型如同文件系统的目录。

Zookeeper的数据存储是基于节点,这种节点叫做Znode。

data

Znode存储的数据信息。

ACL

记录Znode的访问权限,即哪些人或哪些IP可以访问本节点。

stat

包含Znode的各种元数据,比如事务ID、版本号、时间戳、大小等等。

child

当前节点的子节点引用

Zookeeper是为读多写少的场景所设计。Znode并不是用来存储大规模业务数据,而是用于存储少量的状态和配置信息,每个节点的数据最大不能超过1MB。

Zookeeper的基本操作和事件通知

Zookeeper包含了哪些基本操作呢?这里列举出比较常用的API:

  • create 创建节点

  • delete 删除节点

  • exists 判断节点是否存在

  • getData 获得一个节点的数据

  • setData 设置一个节点的数据

  • getChildren 获取节点下的所有子节点

这其中,exists,getData,getChildren属于读操作。Zookeeper客户端在请求读操作的时候,可以选择是否设置Watch。

Watch是什么意思呢?

我们可以理解成是注册在特定Znode上的触发器。当这个Znode发生改变,也就是调用了create,delete,setData方法的时候,将会触发Znode上注册的对应事件,请求Watch的客户端会接收到异步通知。

具体交互过程如下:

1.客户端调用getData方法,watch参数是true。服务端接到请求,返回节点数据,并且在对应的哈希表里插入被Watch的Znode路径,以及Watcher列表。

2.当被Watch的Znode已删除,服务端会查找哈希表,找到该Znode对应的所有Watcher,异步通知客户端,并且删除哈希表中对应的Key-Value。

版权声明:本文为zhenghengbin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhenghengbin/p/11533963.html