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博客

相关推荐
孔令飞13 小时前
知己知彼,百战不殆:AI SKILL 实现原理剖析
云原生·go·ai编程
这个DBA有点耶14 小时前
分布式集群的“最后一公里”:分片集群与透明分布式集群的工程代价拆解
数据库·分布式·架构
一条闲鱼_mytube16 小时前
分布式 ID 生成方案:雪花算法与号段模式
分布式·算法·wpf
分布式存储与RustFS16 小时前
把 LSM 引擎直接架在对象存储上:slatedb 能不能跑在 RustFS 上?
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
科学熊17 小时前
Java 分布式理论与高并发编程
java·开发语言·分布式
时间售卖铺19 小时前
MySQL 日志管理
运维·数据库·mysql·云原生
老郭a19 小时前
流量一涨 Pod 扩不出来?K8s HPA 弹性伸缩配置避坑指南
云原生
xianyuCcCcCCCcc20 小时前
Kubernetes Service 与网络代理
网络·云原生·kubernetes
我不会起名字32221 小时前
PV/PVC 一直 Pending:StorageClass 与绑定条件的 4 个检查点
云原生·kubernetes·pvc·排查
XMAIPC_Robot1 天前
NXP i.MX95 + FPGA 异构计算平台 — 工业多域融合 AI 加速嵌入式控制解决方案
人工智能·分布式·fpga开发·能源·rk3576+fpga