zookeeper两大核心概念以及节点操作

前言

分布式系统

通常情况 下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来共同完成某项任务,一个分布式系统的本质是分布在不同网络或计算机上的程序组件,彼此通过信息传递来协同工作的系统,而Zookeeper正是一个分布式应用协调框架,在分布式系统架构中有广泛的应用场景

扩展点:集群和分布式的区别
分布式不一定就是不同的组件,同一个组件也可以,关键在于是否通过交换信息的方式进行协作。比如说Zookeeper的节点都是对等的,但它自己就构成一个分布式系统。也就是说,分布式是指通过网络连接的多个组件,通过交换信息协作而形成的系统。而集群,是指同一种组件的多个实例,形成的逻辑上的整体。可以看出这两个概念并不完全冲突,分布式系统也可以是一个集群,例子就是前面说的zookeeper等,它的特征是服务之间会互相通信协作,是分布式系统不是集群的情况。多个不同组件构成的系统;是集群不是分布式系统的情况,比如多个经过负载均衡的HTTP服务器,它们之间不会互相通信。
简单来说就是,集群的各个节点功能都一样,而分布式各个节点功能不一样,需要整体协作才能对外提供服务。

一、zookeeper的两大核心概念

1、zookeeper的简介

zookeeper是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同 步服务、集群管理、分布式应用配置项的管理等。
在这里插入图片描述

2、两大核心概念

zookeeper两大核心概念:文件系统数据结构监听通知机制

2.1、文件系统数据结构

zookeeper维护一个类似文件系统的数据结构:
在这里插入图片描述
每个子目录项都被称作为 znode(目录节点),和文件系统类似,我们能够自由的增加、删除znode,也可以在一个znode下增加、删除子znode。
(1)PERSISTENT持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他将永远存在。
(2)** PERSISTENT_SEQUENTIAL持久化顺序编号目录节点**:持久化目录节点,不过比持久化目录节点多了一个顺序编号。
(3)EPHEMERAL­临时目录节点:客户端与zookeeper断开连接后,该节点被删除。
(4)EPHEMERAL_SEQUENTIAL­临时顺序编号目录节点:临时节点,不过比临时节点多了一个顺序编号。
(5)Container(容器) 节点:3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认 60s 检查一次。
(6)TTL 节点默认禁用,只能通过系统配置 -Dzookeeper.extendedTypesEnabled=true 开启,不稳定,意思是就算到了TTL的时间,还是要看定时任务的执行情况。配置的地方为 zoo.cfg 文件,如下图所示:
在这里插入图片描述

2、监听通知机制

客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点
(1)如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知。
(2)如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应的客户端将被通知。
(3)如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。

:所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监听即被移除。递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触发一次。

二、zookeeper的节点操作

1、创建节点命令

create [-s] [-e] [-c] [-t ttl] path [data] [acl]
参数含义
-s代表即将创建顺序节点
-e代表即将创建临时节点
-c代表即将创建容器节点
-t ttl可以给节点添加过期时间,默认禁用,需要通过系统参数启用
path创建节点的路径,必须是全路径
data节点保存的数据
acl控制权限,控制哪个用户可以访问

(1)查看子节点

ls [-s] [-w] [-R] path

(2)删除节点

delete /test-node

2、节点状态参数详解

stat [-w] path
参数含义
cZxid创建znode的事务ID(Zxid的值)
ctime最后修改znode的事务ID
mZxid最后添加或删除子节点的事务ID(子节点列表发生变化才会发生改变)
mtimeznode创建时间
pZxidznode最近修改时间
cversionznode的当前数据版本
dataVersionznode的子节点结果集版本(一个节点的子节点增加、删除都会影响这个 版本)
aclVersion表示对此znode的acl版本
ephemeralOwnerznode是临时znode时,表示znode所有者的 session ID。 如果 znode不是临时znode,则该字段设置为零
dataLengthznode数据字段的长度
numChildrenznode的子znode的数量

在这里插入图片描述

3、针对节点的监听

一旦事件触发,对应的注册立刻被删除,所以事件监听是一次性的。

get ‐w /path // 注册监听的同时获取数据
stat ‐w /path // 对节点进行监听,且获取元数据信息

在这里插入图片描述在这里插入图片描述

4、针对路径的监听

(1)对单个路径的监听

也是一次性的

ls -w /path // 注册监听

在这里插入图片描述
(2)对当前路径下所有的节点都加一个监听,相当于一次性加了多个监听

也是一次性的

ls -R -w /test

在这里插入图片描述

三、Zookeeper应用场景

(1)分布式配置中心
(2)分布式注册中心
(3)分布式锁
(4)分布式队列
(5)集群选举
(6)分布式屏障
(7)发布/订阅

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值