zookeeper的作用介绍

一、什么是zookeeper?

zookeeper是一个开源的Apache组件,作为分布式协调服务,主要用于解决分布式系统中多个进程间的同步制约问题,避免出现脏读现象。zookeeper将数据存储在内存中,这使其具备极高的效率。其内部存储方式与文件存储结构颇为相似,采用分层存储结构。不过,与传统文件存储结构不同的是,zookeeper的各个节点允许存储数据。需要注意的是,zookeeper的每个节点所存储的数据量不能超过1MB 。

它的内存数据结果如下图:

端口:

  • 2181端口:是zookeeper默认的客户端连接端口,用于客户端与服务端之间的通信,负责协调和管理分布式系统的各个节点。
  • 2888端口:是zookeeper集群内follower(从)和leader(主)通信的端口,leader监听此端口来与 Follower 进行数据同步和其他通信操作。
  • 3888端口:是zookeeper集群的选举端口,当leader出现故障或其他情况导致集群需要重新选举leader时,会使用这个端口进行选举相关的通信。

二、zookeeper的作用

主要应用于分布式系统中。它充当协调者的角色,具备集群管理、配置管理、命名服务等功能,能够有效解决分布式系统中的一致性问题 。

软件设计架构:

|-----------|----------------------------------------------------------------------|
| 单体架构 | 所有的业务模块集成在一起的,不利于项目更新、维护、扩展 |
| SOA架构/分布式 | 根据业务的功能模块将完整的项目划分成多个独立模块,便于扩展、更新,需要提供集中式的服务管理、配置管理、集群管理。数据一致性功能拆分粒度粗 |
| 微服务架构 | 相对于SOA架构来,拆分粒度细,但是管理难度加大 |

(拆分粒度:拿下面的图片为例,比如SOA把一个软件的功能拆分成订单、会员、前台、后台、搜索等多个模块分别进行管理,那么微服务就是在这程度上进一步的细化,比如把订单再拆成新订单、退的订单、旧订单等多个模块,所以这个拆分粒度就是指的将功能拆分的程度)

zookeeper是来管理SOA、微服务架构中的这些分散服务的。就是一些被独立出来的功能服务,拿上面的图来说,就是被分隔开的订单、会员、前台这些功能,它集中管理这些服务配置的,支持配置的变更通知。提供命名服务,关联服务名与 IP 地址,方便服务或使用者查找服务地址。还支持服务注册与发现,便于监控服务状态及故障处理 。

三、zookeeper的应用程序编程接口

zookeeper只提供了几个简单的api(应用程序编程接口),但是我们可以通过灵活使用这些api的组合,来实现我们复杂的业务要求:

1)create:创建一个新节点,通过指定路径的方式创建节点,例如创建路径为/A/A1/demo,则会在A1节点下创建一个demo节点;

2)delete:删除节点,通过路径的方式删除节点,如果删除路径为/A/A1/demo,则会删除A1节点下的demo节点;

3)exists:判断指定路径下的节点是否存在,例如判断路径为/A/A1/demo,则会判断A1节点下的demo节点是否存在;

4)get:获取指定路径下某个节点的值是什么,例如获取路径为/A/A1/demo,则会获取A1节点下的demo节点的值什么;

5)set:为指定路径的节点进行赋值操作,例如修改路径为/A/A1/demo,则会修改A1节点下的demo节点的值;

6)get children:获取指定路径节点下的子节点信息,例如获取路径为/A,则会获取A节点下的A1和A2节点;

7)sync:获取到同步数据,这个涉及到了zookeeper的原理,zookeeper集群属于最终一致性,调用该方法,可以获取到最终的结果值,如果不使用该方法,在查询的时候可能获取到的值是中间值

四、zookeeper的znode节点类型

zookeeper中创建的节点分为两大类:永久性节点和临时性节点。永久性节点即创建以后,在不执行delete命令的前提下,该节点是永久存在的;而临时节点与session(会话)有关,每个客户端与zookeeper建立链接的时候会生成一个session,这个session不会因为链接zookeeper服务器节点的变化而变化,只有当客户端断开连接以后,该session才会消失,而临时节点会随着session的消失而消失 。

而根据生命周期可以分为四类:

  • 持久节点:创建后一直存在,除非手动删除,用于长期存储数据。
  • 持久顺序节点:创建后持久存在,节点名按顺序编号,利于排序。
  • 临时节点:会话结束自动删除,适合保存临时状态信息。
  • 临时顺序节点:会话结束即删,节点名带顺序号,用于顺序任务。

五、zookeeper的监视机制

zookeeper拥有watch机制,也就是监视机制,可以支持响应式编程模式,它可以对某个路径的终节点及其子节点的变更进行监视,当其发生变更以后,会调用注册的callback方法,然后进行具体的业务逻辑。例如监测路径为/A/A1,那么它会加测A1节点,以及附属于A1的所有子节点,这个子不单单只一层子节点,是指所有层的子节点。

六、zookeeper的特征

zookeeper拥有以下几个重要特性:

1)顺序一致性:来自客户端的相关指令会按照顺序执行,不会出现乱序的情况,客户端发送到服务的指令1->2->3->4,那个这些指令就会按照顺序执行;

2)原子性:更新只有成功和失败,没有中间状态;

3)可靠性:也可以称之为持久性,节点更新以后,在下次更新之前,它的数据不会发生变更;

4)准实时性:也可以称之为最终一致性,在zk集群中,一个客户端修改了其中的一个节点,一定时间以后,所有可用的服务对应的节点都会变成更新以后的值


zookeeper集群的选举机制以及数据一致性-CSDN博客

zookeeper集群部署-CSDN博客

相关推荐
纪元A梦1 小时前
分布式锁算法——基于ZooKeeper的分布式锁全面解析
java·分布式·算法·zookeeper
拾荒的小海螺2 小时前
JAVA:使用 Curator 进行 ZooKeeper 操作的技术指南
java·zookeeper·java-zookeeper
小样vvv2 小时前
【分布式】Hystrix 的核心概念与工作原理
分布式·hystrix
喝醉的小喵3 小时前
分布式环境下的主从数据同步
分布式·后端·mysql·etcd·共识算法·主从复制
阿里云云原生4 小时前
Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现
云原生
酷爱码4 小时前
hive相关面试题以及答案
hive·分布式
阿里云云原生4 小时前
当实时消费遇到 SPL:让数据处理更高效、简单
云原生
老友@4 小时前
Kafka 全面解析
服务器·分布式·后端·kafka
阿里云云原生6 小时前
大模型 Token 的消耗可能是一笔糊涂账
云原生
HongXuan-Yuan6 小时前
系统设计:高并发策略与缓存设计
java·分布式·高并发