Zookeeper(1)基本概念

378 阅读3分钟

目录

1.Zookpeeper的作用

Zookeeper是一个分布式协调服务,可以为分布式应用提供一致性服务,基于zookeeper的文件系统通知机制,可以实现消息的发布订阅,负载均衡,全局唯一性id,集群管理等,master选举等功能

主要的应用有如下几点:

(一)维护配置信息

分布式系统中,要使得每一个服务拥有相同的配置信息,使用Zookeeper来维护配置信息

(二)分布式锁服务

可以在分布式的系统中控制不同的服务对同一资源的访问顺序

(三)集群管理

通过zookeeper可以将集群中服务的运行情况通知给其他正常的服务,及时的调整任务的分配与执行等,此外Zookeeper可以对集群中的服务进行诊断和尝试修复

(四)生成分布式的唯一id

可通过在zookeeper在分布式环境下生成唯一的全局id,保证数据在分库分表下的唯一性,做法如下:每次生成一个新的id时,在zookeeper下创建一个持久的顺序节点,创建操作返回的节点号,就是新的id,然后删除比自己小的节点

2.Zookeeper的数据模型

(一)zookeeper的结构

zookeeper的数据节点可以视为树状结构(或者目录),树中的节点称为Znode,可以使用路径访问某一个znode

Znode:兼具目录和文件夹两种特点,既想文件夹一样维护着数据,元信息,ACL,时间戳等数据结果,也像文件夹一样可以作为路径的标识符

znode节点

(二)Znode节点的描述

Znode节点可以分为三个部分

(1)节点的数据(Znode data):包含节点的path,节点的data,关系与java map中的key-value关系相似

(2)节点的子节点(Childern)

(3)节点的状态(state):用来描述节点的创建,修改记录,包括cZxid,ctime等

在zookeeper shell中可以通过get命令来查看指定路径节点的data,stat信息

[zk: localhost:2181(CONNECTED) 7] get /ns-1/tenant
cZxid = 0x6a0000000a					//数据节点,创建时的事物id
ctime = Wed Mar 27 09:56:44 CST 2019                 //节点创建时的时间
mZxid = 0x6a0000000a        //节点最后一次更新时的id                                              
mtime = Wed Mar 27 09:56:44 CST 2019 	//最后一次更新时的时间
pZxid = 0x6a0000000e	//数据节点最后一次被修改时的id
cversion = 2	//子节点更改次数
dataVersion = 0		//节点数据被修改的次数
aclVersion = 0			//节点的 ACL 的更改次数
ephemeralOwner = 0x0			//如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则该属性值为 0
dataLength = 0			//节点数据的长度
numChildren = 2			//包含子节点的个数

(4)节点的类型:

  • 临时节点:节点的生命周期依赖于节点的会话,一旦会话结束,节点就可以被删除,也可以手动的删除。临时节点虽然与会话绑定,但是对其他节点可见。临时节点不可以拥有子节点。

  • 持久化节点:该节点的生命周期不依赖与会话,并且只有在客户端显示的执行删除操作时,才能够被删除