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,其在分布式协调服务方面的功能可能略少一些。

相关推荐
Data跳动4 小时前
Spark内存都消耗在哪里了?
大数据·分布式·spark
Java程序之猿6 小时前
微服务分布式(一、项目初始化)
分布式·微服务·架构
来一杯龙舌兰6 小时前
【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
分布式·rabbitmq·ruby·持久化·ack·消息确认
Karoku0667 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
节点。csn8 小时前
Hadoop yarn安装
大数据·hadoop·分布式
NiNg_1_2349 小时前
基于Hadoop的数据清洗
大数据·hadoop·分布式
隔着天花板看星星11 小时前
Spark-Streaming集成Kafka
大数据·分布式·中间件·spark·kafka
探索云原生12 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
启明真纳12 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
技术路上的苦行僧15 小时前
分布式专题(8)之MongoDB存储原理&多文档事务详解
数据库·分布式·mongodb