zookeeper初识

1.什么是zookeeper

(1)ZooKeeper是一个分布式的 、开放源码的分布式应用程序协调服务 ,是一个为分布式应用提供一致性服务的软件,作为Apache的顶级项目,最初是为Hadoop的分布式协调而设计,主要用来解决分布式集群中应用系统的一致性问题

(2)简单来说,ZooKeeper 可以被看作是一个分布式系统中的"协调者"或"中介者" ,它维护着一些关键的数据和状态信息,使得系统中的各个组件能够协调一致地工作。

(3)ZooKeeper的数据模型在结构上借鉴了传统文件系统的层次化、树状结构 ,每个节点(在ZooKeeper中称为znode )都可以包含数据以及子节点 ,从而形成一个树状的数据模型

2.zookeeper的重要作用

(1)实现集群管理/主节点选举

在分布式系统中,如分布式数据库、消息队列等,通常需要选举一个主节点来处理写操作或协调其他节点。ZooKeeper 的选举机制(如基于 Paxos 算法的 Leader 选举)可以确保在主节点故障时,快速、无冲突地选举出新的主节点,从而保证系统的连续性和可用性。

(2)用于服务注册与发现

在微服务架构中,服务的注册与发现是一个重要的环节。ZooKeeper可以作为一个中心化的服务注册表 ,允许服务提供者注册其服务信息,并允许服务消费者查询和发现所需的服务。通过这种方式,ZooKeeper简化了服务的动态发现和调用过程。

ZooKeeper整体遵循一致性(CP)原则,采用ZAB(ZooKeeper Atomic Broadcast)协议 来保证数据的一致性,并通过多数投票机制进行Leader选举,确保系统在节点故障时能够继续提供服务,这使得ZooKeeper在高可用性和数据一致性方面 表现出色。

虽然ZooKeeper在某些情况下可能牺牲一定的一致性来换取更高的可用性(这取决于其配置和使用方式),但它通常能够在大多数场景下保持数据的一致性 (强一致性保障)。

2.1.与Eureka对比 :Eureka遵循AP原则(可用性和分区容错性),能够在网络分区时保证服务的可用性,通过心跳机制来检测服务的存活状态,并具备自我保护模式以防止因网络问题导致的误删服务 ,Eureka的客户端缓存和服务器端之间的这种最终一致性模型 使得它在某些情况下可能不是强一致性的,但服务的可用性更高。

2.2.与Nacos对比:Nacos使用RAFT协议,这是一种具有强一致性保证 的分布式一致性协议,同时支持AP(可用性和分区容错性)和CP(一致性和分区容错性)两种模式,因此Nacos在设计上更加灵活,可以根据实际需求调整 一致性级别。对比之下,对于传统的分布式系统场景 ,ZooKeeper可能是一个更好的选择;而对于微服务架构和云原生场景,Nacos则可能更具优势。

在传统分布式系统中,如果不需要特别高的可用性,而更看重数据一致性,那么ZooKeeper的重要性就体现出来了

(3)用作配置管理工具

1.结构

分布式系统通常包含多个节点,这些节点需要共享和同步配置信息,ZooKeeper提供了一个集中式的配置管理平台 ,由于其数据结构基于 znode,类似于一个小型文件系统,可以创建层次化的节点来存储配置信息 ,这种结构使得配置信息的组织和管理变得直观和灵活。

2.Watch 机制

提供了 Watch 机制,允许客户端订阅配置节点的变化,当配置发生变化时,ZooKeeper 会主动通知订阅了该节点的客户端,从而实现配置的实时更新。

3.与其他的配置管理工具对比

3.1etcd

etcd 是一款高性能的键值存储系统 ,特别适用于存储配置信息。它提供了快速的读写操作和高效的复制机制,以确保配置数据的高可用性和一致性;tcd 支持 TLS/SSL 加密和身份验证 ,可以确保配置数据在传输和存储过程中的安全性;与 ZooKeeper 类似,etcd 也提供了 Watch 机制 ,允许客户端订阅配置变化并实时接收更新通知。

3.2Spring Cloud Config Server

是 Spring Cloud 生态系统中的一个组件,与 Spring Cloud 的其他组件(如 Eureka、Zuul 等)紧密集成 ,这使得在 Spring Cloud 应用中使用 Config Server 来管理配置变得非常方便;支持多种存储后端 ,Config Server 支持多种存储后端来存储配置信息,包括 Git、文件系统、数据库等,用户可以根据自己的需求选择合适的存储方案;由于支持 Git 等版本控制系统作为存储后端,Config Server 可以轻松地实现配置的版本控制 和历史追踪。

3.3Nacos

提供了动态配置管理服务,支持配置的动态更新和推送,这使得在微服务架构中,服务的配置可以随着业务需求的变化而灵活调整。

(4)提供分布式锁的支持

在分布式系统中,多个节点可能同时需要访问或修改同一份资源,这时就需要分布式锁来协调这些访问。ZooKeeper 提供了分布式锁的支持 ,主要依赖于其提供的临时顺序节点和Watcher监听器机制 ,允许多个节点在共享资源上进行协调,从而避免并发访问冲突。
与其他工具对比分析

4.1与redis对比

Redis分布式锁的优点是实现简单,性能较高;缺点是依赖于Redis服务器的稳定性和可靠性 ,如果Redis服务器宕机,可能会导致锁失效或数据不一致。

4.2与etcd对比

etcd支持分布式锁的功能,通过其提供的lease和watch机制来实现。etcd分布式锁的优点是稳定、可靠,支持高可用配置;缺点是相对于ZooKeeper,其在分布式协调服务方面的功能可能略少一些。

相关推荐
分布式存储与RustFS2 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun2 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
Thomas.Sir3 天前
第21课:PyTorch|GPU多卡训练与分布式训练基础【让多卡并行成为你的加速引擎】
人工智能·pytorch·分布式
Cicada1283 天前
库存消息消费的正确性设计——从幂等窗口到批量流水线
分布式·系统架构
不吃香菜kkk、3 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove3 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21
春天花会开1313 天前
Supabase 自部署 Edge Functions 超时从 60s 延长到 360s 完整复盘
运维·云原生
Francek Chen4 天前
【大数据处理与分析】数据仓库Hive:04 数据仓库Hive概述
大数据·数据仓库·hive·hadoop·分布式