ZooKeeper 核心知识全解析:架构、角色、节点与应用

1.ZooKeeper 分布式锁怎么实现的

ZooKeeper 是一个高效的分布式协调服务,它提供了简单的原语集来构建更复杂的同步原语和协调数据结构。利用 ZooKeeper 实现分布式锁主要依赖于它的顺序节点(Sequential Node)特性以及临时节点(Ephemeral Node)机制。

以下是使用 ZooKeeper 实现分布式锁的基本步骤:

  • 创建锁节点:

    • 所有想要获取锁的客户端都会在同一个预先约定的父节点下创建自己的临时顺序节点。
    • 例如,所有客户端都试图在 /lock 路径下创建子节点,如 /lock/lock-0000000001。
  • 检查前驱节点:

    • 创建完节点后,每个客户端会获取当前 /lock 路径下的所有子节点列表,并根据节点名称中的序列号排序。
    • 如果发现自己创建的节点是排序后的第一个节点,则认为自己获得了锁。
    • 否则,监听比自己创建的节点序列号小的第一个节点的删除事件,等待前驱节点被删除。
  • 持有锁:

    • 当某个客户端获得锁之后,可以在执行相应的临界区代码的同时保持与 ZooKeeper 的会话连接,以确保其临时节点不会因为长时间没有心跳而被自动删除。
  • 释放锁:

    • 完成临界区的操作后,客户端主动删除自己创建的临时顺序节点,这将释放锁,允许下一个等待的客户端获取锁。
    • 如果持有锁的客户端意外断开连接或崩溃,由于它是临时节点,ZooKeeper 会在会话超时后自动删除该节点,从而释放锁。
  • 处理异常情况:

    • 如果在等待过程中前驱节点突然消失(即前驱客户端崩溃),那么当前客户端应该重新获取最新的子节点列表并再次判断是否获得了锁。

这种实现方式可以保证在任何时刻最多只有一个客户端持有锁,即使在网络分区、客户端故障等情况下也能正确工作。此外,ZooKeeper 的 Watcher 机制使得等待锁的客户端能够及时响应锁状态的变化,提高了系统的响应速度。

2.了解Zookeeper的系统架构吗?

ZooKeeper 是一个分布式应用程序协调服务,它的设计目标是简化和可靠地实现分布式系统中的常见任务。ZooKeeper 的架构主要由以下几个组件构成:

  1. 客户端(Client):

    • 客户端通过网络与 ZooKeeper 服务器进行通信。每个客户端可以连接到集群中的任意一台服务器,并且可以在服务器之间自动切换以保持连接的高可用性。
  2. 服务器(Server):

    • ZooKeeper 集群通常由奇数个服务器组成(如3、5或7),以确保在投票过程中能够达成多数同意。每个服务器都保存了一份数据副本,这保证了系统的高可用性和容错性。
  3. 领导者(Leader):

    • 在 ZooKeeper 集群中,选举出一个领导节点来处理所有的写请求。领导者负责将更新广播给其他跟随者(Follower),并确保所有服务器的数据状态一致。
  4. 跟随者(Follower):

    • 非领导者的其他服务器被称为跟随者。它们接受来自领导者的消息并应用这些消息到自己的状态机上。跟随者还参与领导者选举过程,在必要时投票选出新的领导者。
  5. 观察者(Observer):

    • 观察者是一种特殊的跟随者,它不参与选举也不参与写操作的投票。观察者的存在是为了增加读取性能,因为它们可以响应只读请求而不影响写入路径的一致性协议。
  6. ZAB 协议(ZooKeeper Atomic Broadcast):

    • 这是 ZooKeeper 使用的原子消息广播协议,用于在服务器之间同步状态。ZAB 确保所有事务按全局顺序执行,并且只有当大多数服务器同意后才会提交更改。
  7. 内存数据库(In-Memory Database):

    • ZooKeeper 将所有数据存储在内存中,以提供快速的读写访问。同时,它也会定期将快照和日志持久化到磁盘上,以便恢复。
  8. Watcher 机制:

    • Watcher 是 ZooKeeper 提供的一种回调机制,允许客户端订阅特定事件(例如节点变化)。一旦触发条件满足,ZooKeeper 会通知相应的客户端。
  9. ACLs(Access Control Lists):

    • ACLs 用来控制哪些客户端可以对特定的 znode 执行什么样的操作,提供了安全性和权限管理的功能。

ZooKeeper 的架构设计使其成为一个高性能、高可靠的分布式协调服务,适用于构建分布式应用程序中的各种协调任务,比如配置管理、命名服务、分布式锁等。

3.Zookeeper为什么要这么设计?

ZooKeeper 的设计初衷是为了简化分布式系统的协调任务,同时确保这些任务能够以一种可靠、高效且易于使用的方式执行。以下是 ZooKeeper 设计背后的一些关键考虑因素:

  1. 简单性:

    • ZooKeeper 提供了一个简单的文件系统风格的数据模型,其中每个节点(znode)都可以存储少量数据,并可以拥有子节点。这种结构使得开发者更容易理解和实现复杂的分布式协调算法,如选举、锁和屏障等。
  2. 高可用性和容错性:

    • ZooKeeper 通过复制来提高系统的可用性。集群中的每个服务器都保存了一份完整的数据副本。如果一台服务器失败,其他服务器仍然可以继续服务请求。此外,ZooKeeper 使用 ZAB 协议来保证所有服务器在事务处理上的一致性,即使在网络分区或某些服务器故障的情况下也能正常工作。
  3. 顺序一致性:

    • 所有更新操作都是全局有序的,这意味着对于所有的客户端来说,它们看到的操作顺序是一样的。这对于维护分布式系统的状态一致非常重要。
  4. 原子性:

    • 更新要么完全成功,要么完全失败,不存在部分成功的状态。这保证了系统的可靠性。
  5. 快速读取:

    • ZooKeeper 将所有数据存储在内存中,使得读取操作非常快,这对于许多需要频繁查询的应用程序来说至关重要。
  6. 持久性和临时节点:

    • 支持创建持久节点和临时节点。持久节点在创建后会一直存在直到被显式删除;而临时节点在创建它的客户端断开连接时自动删除。这样的机制有助于实现各种协调原语,比如领导者选举和分布式锁。
  7. 事件通知(Watchers):

    • 客户端可以设置监听器(Watcher),当指定的数据发生变化时会触发相应的回调函数。这种方式可以让应用程序及时响应配置变更或其他重要事件。
  8. 轻量级通信:

    • ZooKeeper 的 API 和协议设计得尽可能简单,以减少网络传输的负担并提高效率。
  9. 线性扩展性:

    • 虽然 ZooKeeper 不是为大规模水平扩展设计的(因为随着集群大小的增长,性能可能会下降),但在大多数情况下,一个小型的 ZooKeeper 集群(通常由3到7个节点组成)已经足够满足需求,并能提供良好的性能和可靠性。

综上所述,ZooKeeper 的设计目的是为了在分布式环境中提供一个健壮、高效的服务,用于管理和协调多个组件之间的交互,同时保持操作的一致性和正确性。它特别适用于那些需要强一致性而非高吞吐量的场景。

4.你知道Zookeeper中有哪些角色?

在 ZooKeeper 中,主要存在三种角色:Leader(领导者)、Follower(跟随者)和 Observer(观察者)。这些角色在集群中扮演不同的职责,以确保系统的高可用性和性能。

  1. Leader (领导者)

    • 领导者是负责处理所有写请求的服务器。当客户端发起创建、删除节点或更新数据等操作时,这些请求会被转发给领导者。领导者会按照全局顺序为每个事务分配一个唯一的编号(Zxid),然后将该事务广播给所有的跟随者和观察者。
    • 领导者还负责协调选举过程,在当前领导者失效时,集群中的其他成员会启动新的领导者选举来选出一个新的领导者。
  2. Follower (跟随者)

    • 跟随者接收来自领导者的提案,并参与投票以确认提案。对于写请求,跟随者会应用从领导者接收到的更新,并在本地执行相同的变更。
    • 在读请求方面,跟随者可以直接响应客户端的查询,因为它们的数据状态与领导者保持同步。
    • 跟随者也参与到领导者选举过程中,通过投票帮助确定下一个领导者。
  3. Observer (观察者)

    • 观察者是一种特殊的跟随者,它不参与任何投票活动,包括领导者选举和写操作的提交确认。这意味着观察者不会影响到集群达成一致的速度。
    • 它的主要作用是分担读负载,因为它也可以像跟随者那样直接回应读请求。由于不需要参与投票,理论上可以添加更多的观察者来增加系统的读取吞吐量而不降低写入性能。

除了上述三种角色外,还有两种概念性的角色:

  1. Client (客户端)

    • 客户端是指连接到 ZooKeeper 集群的应用程序或用户。它们向 ZooKeeper 发送请求(如读写操作)并接收响应。客户端通常与集群中的任意一台服务器建立连接,并可以在服务器故障时自动切换到另一台健康的服务器上。
  2. Elector (选举器)

    • 选举器并不是一个独立的角色,而是指集群中用于进行领导者选举的逻辑组件。每个服务器都包含了这个功能,以便在需要时能够共同决定谁应该成为新的领导者。

总结来说,ZooKeeper 的设计使得领导者负责写操作的一致性管理,而跟随者和观察者则共同承担了读请求的服务工作,从而实现了高效且可靠的分布式协调服务。

5.你熟悉Zookeeper节点ZNode和相关属性吗?

是的,ZooKeeper 的核心概念之一是 ZNode(ZooKeeper Node),它是 ZooKeeper 数据模型的基本单元。每个 ZNode 都可以存储少量的数据,并且可以有子节点。ZooKeeper 的命名空间类似于文件系统,但它的结构和行为与传统文件系统有所不同。以下是关于 ZNode 和其相关属性的一些重要信息:

ZNode 类型

  1. 持久节点 (PERSISTENT)

    • 一旦创建,这些节点将一直存在,直到它们被显式删除。
  2. 临时节点 (EPHEMERAL)

    • 这些节点与创建它们的会话绑定。如果会话结束(例如客户端断开连接),那么这个节点就会自动删除。临时节点不能有子节点。
  3. 顺序节点 (SEQUENTIAL)

    • 创建时,ZooKeeper 会在节点路径的末尾附加一个递增的序列号。这可以用于实现分布式队列等特性。顺序节点可以是持久的也可以是临时的。
  4. 临时顺序节点 (EPHEMERAL_SEQUENTIAL)

    • 结合了临时节点和顺序节点的特点,即具有临时性并且创建时带有递增序列号。

ZNode 属性

  • dataLength:存储在该节点上的数据字节数。

  • ctime:节点创建的时间戳,以毫秒为单位。

  • mtime:节点最后一次更新的时间戳,以毫秒为单位。

  • version:节点内容版本号,每当节点数据被修改时,此值加1。

  • cversion:子节点版本号,每当子节点列表发生改变时,此值加1。

  • aversion:ACL 版本号,每当 ACL 列表被修改时,此值加1。

  • ephemeralOwner:如果是临时节点,则表示创建该节点的会话ID;如果不是临时节点,则此字段为0。

  • data:实际存储在节点中的数据,大小限制为1MB左右。

ZNode 操作

  • Create:创建一个新的 ZNode。
  • Delete:删除一个存在的 ZNode。
  • Exists:检查某个 ZNode 是否存在。
  • Get Data:获取指定 ZNode 上的数据。
  • Set Data:设置或更新指定 ZNode 上的数据。
  • Get Children:列出指定 ZNode 下的所有子节点。

ACL(Access Control List)

  • 每个 ZNode 都有关联的访问控制列表(ACL),用来定义哪些客户端可以对它执行特定的操作。ACL 包含权限和身份验证方案两个部分。权限可以包括 CREATE、READ、WRITE、DELETE 和 ADMIN 等操作。

通过上述特性和功能,ZooKeeper 提供了一个强大的基础来构建分布式应用程序所需的协调服务,如配置管理、命名服务、分布式锁和集群管理等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954948.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

npm发布工具包+使用

1.初始化package包 npm init -y {"name": "common-cjs-tools","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" &&…

WXML模版语法-事件绑定

知识点1:什么是事件 事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。 知识点2:小程序中常用的事件 类型绑定方式事件描述tapbindtap或bind:tap手指触摸后马上离开,类似于…

Uniapp-运行到手机安卓基座报错

1、运行报错 2、解决adb冲突,显示设备列表,说明手机与电脑连接成功 3、重新运行,还是找不到,就多刷新几下即可。

ESP8266固件烧录

一、烧录原理 1、引脚布局 2、引脚定义 3、尺寸封装 4、环境要求 5、接线方式 ESP8266系列模块集成了高速GPI0和外围接口,这可能会导致严重的开关噪声。如果某些应用需要高功率和EMI特性,建议在数字I/0线上串联10到100欧姆。这可以在切换电源时抑制过冲…

紫光无人机AI飞控平台介绍

随着无人机技术的迅猛发展,无人机飞控平台的智能化需求不断提升。紫光无人机AI飞控平台作为一款创新型产品,为用户提供了从飞行控制到任务管理的一站式解决方案,尤其在AI实时识别和事件分析方面具有显著优势。本文将介绍平台的核心功能、技术…

【SpringBoot】Spring 一站式解决方案:融合统一返回结果、异常处理与适配器模式

前言 🌟🌟本期讲解关于统一功能处理的详细介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话…

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法,用于处理…

【C语言】内存函数详解与模拟实现

文章目录 拓展:Ⅰ. memcpy -- 内存拷贝1、函数介绍与使用2、模拟实现 Ⅱ. memmove -- 内存拷贝1、函数介绍与使用(与memcpy函数的区别)2、模拟实现 Ⅲ. memcmp -- 内存比较1、函数介绍与使用2、模拟实现 Ⅳ. memset -- 内存设置1、函数介绍与…

解析OVN架构及其在OpenStack中的集成

引言 随着云计算技术的发展,虚拟化网络成为云平台不可或缺的一部分。为了更好地管理和控制虚拟网络,Open Virtual Network (OVN) 应运而生。作为Open vSwitch (OVS) 的扩展,OVN 提供了对虚拟网络抽象的支持,使得大规模部署和管理…

解密AIGC三大核心算法:GAN、Transformer、Diffusion Models原理与应用

在当今数字化时代,人工智能生成内容(AIGC)技术正以前所未有的速度改变着我们的生活和工作方式。从创意无限的文本生成,到栩栩如生的图像创作,再到动听的音乐旋律,AIGC的魔力无处不在。而这一切的背后&#…

艾体宝干货丨网络故障排除基本指南

一、确保网络可视性以有效排除故障 有效的网络故障排除要求对穿越网络的数据具有完全的可见性,以便迅速识别和解决潜在问题。本指南深入探讨了一种结构化的网络分析方法,旨在提高故障排除的效率。首先,提出正确的问题至关重要,它…

汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮

故障现象  一辆2007款法拉利599 GTB车,搭载6.0 L V12自然吸气发动机(图1),累计行驶里程约为6万km。该车因发动机故障灯异常点亮进厂检修。 图1 发动机的布置 故障诊断 接车后试车,发动机怠速轻微抖动,…

浪潮海岳 UploadListFile文件上传致RCE漏洞

一、漏洞简介 浪潮云财务系统的/cwbase/EP/ListContent/UploadListFile.ashx接口存在任意文件上传漏洞,未经身份验证的攻击者可以通过该漏洞上传恶意脚本文件,从而控制目标服务器。 二、漏洞影响 三、网络测绘: fofa: body"/cwbase/w…

高等数学学习笔记 ☞ 不定积分的积分法

1. 第一换元积分法 1. 基础概念:形如的过程,称为第一换元积分法。 2. 核心思想:通过对被积函数的观察(把被积函数的形式与积分表的积分公式进行比较),把外部的部分项拿到的内部(求原函数), 然后进行拼凑,…

Spring Boot 整合 Shiro详解

文章目录 Spring Boot 整合 Shiro详解一、引言二、整合步骤1、创建项目并引入依赖2、配置Shiro2.1、自定义Realm2.2、配置SecurityManager和ShiroFilterFactoryBean 三、使用示例四、总结 Spring Boot 整合 Shiro详解 一、引言 在现代的Web应用开发中,用户认证和授…

win10 Outlook(new) 企业邮箱登录 登录失败。请在几分钟后重试。附移除办法

windows系统经常弹出使用Outlook(new),自动切过去。 但是登录企业的内网邮箱,折腾了好几次都使用不了。排查网络等问题,在社区找到了答案。 推出一年多不支持企业账户,所以之前的折腾都是浪费时间。 因为这个答案不太…

tomcat状态一直是Exited (1)

docker run -di -p 80:8080 --nametomcat001 你的仓库地址/tomcat:9执行此命令后tomcat一直是Exited(1)状态 解决办法: 用以下命令创建运行 docker run -it --name tomcat001 -p 80:8080 -d 你的仓库地址/tomcat:9 /bin/bash最终结果 tomcat成功启动

Golang Gin系列-1:Gin 框架总体概述

本文介绍了Gin框架,探索了它的关键特性,并建立了简单入门的应用程序。在这系列教程里,我们会探索Gin的主要特性,如路由、中间件、数据库集成等,最终能使用Gin框架构建健壮的web应用程序。 总体概述 Gin是Go编程语言的…

实现linux硬盘smart检测

一、下载交叉编译libatasmart库 下载链接:https://www.linuxfromscratch.org/blfs/view/svn/general/libatasmart.html libatasmart库编译依赖libudev库,交叉编译器前先准备依赖的libudev: 设置libudev的环境变量,并通过configure编译文件生…

【GIS操作】使用ArcGIS Pro进行海图的地理配准(附:墨卡托投影对比解析)

文章目录 一、应用场景二、墨卡托投影1、知识点2、Arcgis中的坐标系选择 三、操作步骤1、数据转换2、数据加载3、栅格投影4、地理配准 一、应用场景 地理配准是数字化之前必须进行的一项工作。扫描得到的地图数据通常不包含空间参考信息,需要通过具有较高位置精度的…