zookeeper简介
一、什么是zookeeper
Apache zookeeper是一种用于分布式应用程序的高性能协调服务,提供一种集中式信息存储服务。
特点:数据存在内存中,类似文件系统的树性结构(文件和目录),高吞吐量和低延时,集群高可靠。
作用:基于zookeeper可以实现腹部是统一配置中心、服务注册中心、分布式锁等功能。
下载:https://archive.apache.org/dist/zookeeper/
解压后在conf目录中复制zoo_sample.cfg重命名为zoo.cfg
启动服务:bin/zkServer.sh start
测试,客户端连接 bin/zkCli.sh -server 127.0.0.1:2181
二、常见指令
ls [/] 获取子节点
create 创建节点
delete 删除节点
exists 测试节点是否存在
get data 从指定节点获取数据
set data 将数据存入节点
get children 查询所有子节点
sync 等待数据进行同步
三、核心概念
1.session
a.一个客户端连接一个会话,由zk分配唯一会话id;
b.客户端以特定的时间间隔发送心跳,以保证会话有限,tickTime;
c.超过会话时长未收到客户端心跳,则判定客户端挂了(默认2倍tickTime)
d.会话中的请求按照FIFO顺序执行
2.数据模型
a.层次命名空间
类似unix文件系统,以(/)为根
区别:节点可以包含与之关联的数据以及自节点(即文件也是文件夹)
节点的路径总是表示为规范的、绝对的、斜杠分割的路径
b.znode
名称唯一、命名规范
节点类型:持久、顺序、临时、临时顺序
节点数据构成
C.znode-节点类型
持久节点
create /app1 1234,数据被持久化
临时节点
create -e /app2 233,客户端断开连接时,数据丢失
顺序节点
create -s /app3 4378
临时顺序节点
create -s -e /app4 345
3.watch监听机制
客户端可以在znodes上设置watch,监听znode的变化
两类watch
data watch监听数据变更
child watch监听节点变化
触发watch事件
Created event 触发exists事件
Delete event 触发exists、getData、getChildren
Change evnet 触发exists、getData
Child event 触发getChildren
Watch 重要特性
一次性触发:watch触发后即被删除,要持续监控变化需要持续设置watch
有序性:客户端先得到watch通知后,才会看到变化结果
Zookeeper特性:
顺序一致性:保证客户端操作时按顺序生效的
原子性:更新成功或者失败,没有部分结果
单个系统映象:无论连接到哪个服务器,客户端看到相同的内容
可靠性:数据的变更不会丢失,除非被客户端覆盖修改
及时性:保证系统的客户端当时读取到的数据时最新的
四、Zookeeper典型应用场景
1.数据发布订阅(配置中心)
2.命名服务
3.Master选举
4.集群管理
5.分布式队列
6.分布式锁
1.配置中心
2.命名服务
如何解决服务A可以动态得到服务B的调用地址?
3.master选举
实现原理:
1.多个服务同时去创建master这个临时znode,创建成功的服务器被注册为master(同时监听),创建失败的服务器增加master的watch,当master被删除时可以去抢master
2.所有服务启动时都往servers注册自己的服务信息方便调用
4.分布式队列
5.分布式锁
锁缺点:惊群效应,某时刻会有大量线程同时强锁,不适合大并发情况
6.分布式锁2