【zookeeper】
功能:是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等。
Zookeeper 提供了一个类似于Linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息(纯内存数据),完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控与通知机制。
zk集群必须部署奇数台:选举需要,zookeeper中的过半机制保证了zookeeper集群的数据一致性。
leader选举算法采用了paxos协议::当多数server写成功,则任务数据写成功。如果有3个server则2个写成功即可,当有4个或5个server,则3个写成功即可。
角色划分:
Leader:支持读写,唯一支持写的节点,
它会发起并维护与各Follwer及Observer 间的心跳。所有的写操作必须要通过Leader 完成再由Leader 将写操作广播给其它服务器。只要有超过半数节点(不包括observeer 节点)写入成功,该写请求就会被提交(类 2PC 协议)。
Follower:只读,支持选举
存在多个Follower,它会响应Leader 的心跳
Follower 可直接处理并返回客户端的读请求,同时会将写请求转发给Leader 处理;
负责在Leader 处理写请求时对请求进行投票。
Observer:只读,无选举权
Zookeeper 需保证高可用和强一致性,为了支持更多的客户端,需要增加更多Server; Server增多,投票阶段延迟增大,影响性能;引入Observer,Observer 不参与投票; Observers 接受客户端的连接,并将写请求转发给leader 节点; 加入更多Observer 节点, 提高伸缩性,同时不影响吞吐率。
数据同步ZAB协议:实现分布式数据一致性
- 消息广播:
- Zookeeper 使用单一的主进程 Leader 来接收和处理客户端所有事务请求;
- 采用 ZAB 协议的原子广播协议,将事务请求以 Proposal 提议广播到所有 Follower 节点,当集群中有过半的Follower 服务器进行正确的 ACK 反馈,那么Leader就会再次向所有的 Follower 服务器发送commit 消息,将此次提案进行提交。这个过程可以简称为 2pc 事务提交,整个流程可以参考下图,注意 Observer 节点只负责同步 Leader 数据,不参与 2PC 数据同步过程。
- 崩溃恢复:重新选择Leader
但是一旦 Leader 服务器出现崩溃,或者由于网络原理导致 Leader 服务器失去了与过半 Follower 的通信,那么就会进入崩溃恢复模式,需要选举出一个新的 Leader 服务器。在这个过程中可能会出现两种数据不一致性的隐患,需要 ZAB 协议的特性进行避免。
-
- Leader 服务器将消息 commit 发出后,立即崩溃
- Leader 服务器刚提出 proposal 后,立即崩溃
ZAB 协议的恢复模式使用了以下策略:
1、选举 zxid 最大的节点作为新的 leader
2、新 leader 将事务日志中尚未提交的消息进行处理
集群脑裂问题:
使用约束:
zNode:
zNode存储数据量较小:通常不大于1M
有四种形式的目录节点
1. PERSISTENT:持久的节点。
2. EPHEMERAL:暂时的节点。
3. PERSISTENT_SEQUENTIAL:持久化顺序编号目录节点。
4. EPHEMERAL_SEQUENTIAL:暂时化顺序编号目录节点。
应用:分布式锁原理,参考:https://www.runoob.com/w3cnote/zookeeper-locks.html
应用:服务注册:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)