当前位置: 首页 > news >正文

Zookeeper(分布式RPC调用和分布式文件储存)

目录

一、存储结构介绍

(一)核心存储模型:树形结构(Data Tree)

(二)内存存储与持久化机制

(三)关键组件与运行流程

(四)存储结构的应用场景

(五)存储结构的优势

二、监听通知机制

(一)Watcher 机制的核心概念

(二)Watcher 的类型与触发条件

(三)Watcher 的工作原理

(四)关键实现细节

(五)在分布式 RPC 调用中的应用

(六)在分布式文件存储中的应用

(七)Watcher 机制的优缺点

(八)最佳实践

三、单机与集群安装

(一)Zookeeper 单机版安装

(二)Zookeeper 集群版安装

(三)关键配置说明

四、常用命令

(一)基础操作命令

(二)分布式 RPC 调用相关命令

(三)分布式文件存储相关命令

(四)集群维护命令

(五)高级命令

(六)常见场景示例

(七)注意事项


一、存储结构介绍

Zookeeper 作为分布式协调服务框架,其存储结构以树形模型为核心,结合内存存储与持久化机制,为分布式系统提供高效、可靠的数据管理服务。以下是 Zookeeper 存储结构的详细介绍:

(一)核心存储模型:树形结构(Data Tree)

Zookeeper 的数据模型类似于文件系统,采用层次化的树形结构,每个节点称为 Znode。这种设计便于表达数据间的层级关系,并为不同应用分配独立的命名空间。

  1. Znode 的特性:
    • 路径唯一标识:每个 Znode 通过唯一路径(如 /app/config)访问。
    • 数据存储:每个 Znode 可存储最多 1MB 的数据(通常用于存储状态或配置信息)。
    • 版本控制:每个 Znode 包含版本号(version),用于实现乐观并发控制。
    • 访问控制列表(ACL):定义客户端对 Znode 的读写权限。
  2. Znode 的类型:
    • 持久节点(PERSISTENT):创建后一直存在,除非显式删除。
    • 临时节点(EPHEMERAL):与客户端会话绑定,会话结束后自动删除。
    • 持久顺序节点(PERSISTENT_SEQUENTIAL):持久节点基础上,名称自动附加唯一递增编号。
    • 临时顺序节点(EPHEMERAL_SEQUENTIAL):临时节点基础上,名称自动附加唯一递增编号。
    • 容器节点(Container Nodes):子节点全部删除后自动删除自身(3.5.3 版本新增)。
    • TTL 节点(Time-To-Live Nodes):带生存时间的临时节点,超时未交互则自动删除(需配置支持)。

(二)内存存储与持久化机制

Zookeeper 通过内存存储与磁盘持久化结合,确保数据的高效访问与可靠性。

  1. 内存存储:
    • DataTree:内存中维护完整的树形结构,包含所有 Znode 路径、数据及 ACL 信息。
    • DataNode:数据存储的最小单元,记录节点数据、ACL、状态及父子节点引用。
    • 高性能保障:内存存储支持快速读写,满足分布式系统低延迟需求。
  2. 持久化存储:
    • 事务日志(Transaction Log):
      • 记录所有写操作(如节点创建、数据更新),用于崩溃恢复。
      • 采用磁盘空间预分配策略,避免频繁扩容影响性能。
      • 日志文件按 64MB 大小预分配,写入时先序列化事务头和事务体,再生成校验和(Checksum)确保完整性。
    • 数据快照(Snapshot):
      • 定期将内存数据全量保存到磁盘,生成快照文件。
      • 快照过程异步执行,避免影响主流程,采用过半随机策略避免集群节点同时快照。
      • 快照文件包含内存数据库的全量数据及会话信息。
  3. 恢复机制:
    • 启动时,Zookeeper 通过事务日志和快照文件恢复内存数据库。
    • 若检测到非 Leader 节点的事务 ID 非法(比 Leader 大),则执行日志截断(TRUNC)以保持数据一致。

(三)关键组件与运行流程

  1. Database(ZKDatabase):
    • 管理所有会话、DataTree 存储及事务日志。
    • 定时向磁盘 dump 快照数据,确保数据持久化。
  2. 写操作流程:
    • 客户端发起写请求(如创建节点、更新数据)。
    • 请求写入事务日志,并更新内存中的 DataTree。
    • 定期生成快照,保存内存数据到磁盘。
  3. 读操作流程:
    • 客户端发起读请求(如获取节点数据)。
    • 直接从内存中的 DataTree 读取数据,无需访问磁盘。

(四)存储结构的应用场景

  1. 分布式配置管理:
    • 将配置信息存储在 Znode 中,客户端监听配置节点变化,实现动态更新。
  2. 服务注册与发现:
    • 服务提供者创建持久节点存储服务信息,消费者监听节点变化实现服务发现。
  3. 分布式锁:
    • 利用临时顺序节点实现公平锁,通过节点创建顺序分配锁持有权。
  4. 集群管理:
    • 存储集群节点信息,通过监听节点变化实现动态扩容或缩容。
  5. 分布式队列:
    • 利用临时顺序节点实现 FIFO 队列,消费者按顺序处理节点数据。

(五)存储结构的优势

  1. 高效性:
    • 内存存储支持快速读写,满足分布式系统低延迟需求。
  2. 可靠性:
    • 事务日志和快照机制确保数据持久化,崩溃后可恢复。
  3. 一致性:
    • 通过版本控制和 ACL 机制保障数据一致性。
  4. 可扩展性:
    • 树形结构支持灵活的数据组织,适应不同应用场景。

二、监听通知机制

Zookeeper 的监听通知机制是其核心功能之一,通过 Watcher(监听器) 实现客户端对服务端数据或状态的实时感知。这一机制在分布式 RPC 调用和分布式文件存储场景中至关重要,能够高效协调集群行为、实现动态配置更新和服务发现。以下是详细解析:

(一)Watcher 机制的核心概念

  1. 定义:
    • Watcher 是 Zookeeper 提供的一种 事件监听与通知机制,允许客户端注册对特定 Znode 或事件的关注,当服务端数据或状态变化时,主动通知客户端。
  2. 特点:
    • 一次性触发:每个 Watcher 仅触发一次通知,客户端需重新注册以持续监听。
    • 轻量级:通知仅包含事件类型和路径,不传递完整数据,减少网络开销。
    • 异步传递:通知通过 TCP 连接异步发送,不阻塞客户端操作。
    • 服务端无状态:服务端不存储 Watcher 列表,依赖客户端会话(Session)维护监听关系。

(二)Watcher 的类型与触发条件

Watcher 可监听两类事件:节点事件 和 子节点事件,具体触发条件如下:

事件类型 触发条件 典型应用场景
NodeCreated 监听的 Znode 被创建(仅对持久节点有效,临时节点需结合其他事件使用) 服务注册、动态配置初始化
NodeDeleted 监听的 Znode 被删除 服务下线、临时节点失效通知
NodeDataChanged 监听的 Znode 数据内容被修改 配置更新、状态同步
NodeChildrenChanged 监听的 Znode 的子节点列表发生变化(新增或删除子节点) 服务发现、集群节点动态管理

(三)Watcher 的工作原理

  1. 注册阶段:
    • 客户端通过 
http://www.dtcms.com/a/350963.html

相关文章:

  • [小练习]100行不到使用Java Socket网络编程实现定向聊天
  • 从双重检查锁定的设计意图、锁的作用、第一次检查提升性能的原理三个角度,详细拆解单例模式的逻辑
  • 基于SpringBoot的网上点餐系统
  • OpenTenBase核心技术解密:突破OLTP与OLAP边界的分布式数据库革新
  • Flask模块如何使用
  • 浅谈技术顾问的转型困境
  • Web前端开发基础
  • windows 下 使用C++ 集成 zenoh
  • ArcGIS学习-9 ArcGIS查询操作
  • vLLM轻松通
  • ArcGIS学习-10 空间连接和矢量分析
  • 百度IOS客户端岗位--面试真题分析
  • 5G 三卡图传终端:应急救援管理的 “可视化指挥核心”
  • PostgreSQL诊断系列(3/6):性能瓶颈定位——缓冲池、I/O与临时文件
  • 【Linux系统】线程概念
  • 【R代码分析】甲烷排放绘制代码-参考论文
  • 【云原生】CentOS安装Kubernetes+Jenkins
  • RAW API 的 UDP 总结1
  • Android Glide常见问题解决方案:从图片加载到内存优化
  • [在实践中学习] 中间件理论和方法--Redis
  • 【JavaEE】了解volatile和wait、notify(三)
  • 08-引入AI编程插件(TRAE)编写单元测试并检查覆盖率
  • Cloudflare 推出 GenAI 安全工具,守护企业数据
  • 科普 | 5G支持的WWC架构是个啥(1)?
  • android 改机系列之-虚拟摄像头-替换相机预览画面
  • excel导出,多列合并表头
  • 运行node18报错
  • 【JVM】类加载器都有哪些?
  • ChromaDB向量数据库Python教程:从入门到实战完整指南(含游戏资源管理系统案例
  • Java大厂面试实战:从Spring Boot到微服务架构的全链路技术拆解