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 提供了一个强大的基础来构建分布式应用程序所需的协调服务,如配置管理、命名服务、分布式锁和集群管理等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark任务提交流程

当包含在application master中的spark-driver启动后,会与资源调度平台交互获取其他执行器资源,并通过反向注册通知对应的node节点启动执行容器。此外,还会根据程序的执行规划生成两个非常重要的东西,一个是根据spark任务执行计划生…

54,【4】BUUCTF WEB GYCTF2020Ezsqli

进入靶场 吓我一跳,但凡放个彭于晏我都不说啥了 提交个1看看 1 and 11 1# 还尝试了很多,不过都被过滤了,头疼 看看别人的WP 竟然要写代码去跑!!!,不会啊,先用别人的代码吧&#xf…

从零搭建一套远程手机的桌面操控和文件传输的小工具

从零搭建一套远程手机的桌面操控和文件传输的小工具 --ADB连接专题 一、前言 前面的篇章中,我们确定了通过基于TCP连接的ADB控制远程手机的操作思路。本篇中我们将进行实际的ADB桥接的具体链路搭建工作,从原理和实际部署和操作层面上,从零…

【深度学习实战】kaggle 自动驾驶的假场景分类

本次分享我在kaggle中参与竞赛的历程,这个版本是我的第一版,使用的是vgg。欢迎大家进行建议和交流。 概述 判断自动驾驶场景是真是假,训练神经网络或使用任何算法来分类驾驶场景的图像是真实的还是虚假的。 图像采用 RGB 格式并以 JPEG 格式…

如何使用MaskerLogger防止敏感数据发生泄露

关于MaskerLogger MaskerLogger是一款功能强大的记录工具,该工具可以有效防止敏感数据泄露的发生。 MaskerLogger旨在保护目标系统的日子安全,此格式化程序可确保你的日志安全并防止敏感数据泄露。例如使用此格式化程序,打印下列数据&#x…

【网络协议】RFC3164-The BSD syslog Protocol

引言 Syslog常被称为系统日志或系统记录,是一种标准化的协议,用于网络设备、服务器和应用程序向中央Syslog服务器发送日志消息。互联网工程任务组(IETF)发布的RFC 3164,专门定义了BSD Syslog协议的规范和实现方式。通…

oracle使用case when报错ORA-12704字符集不匹配原因分析及解决方法

问题概述 使用oracle的case when函数时,报错提示ORA-12704字符集不匹配,如下图,接下来分析报错原因并提出解决方法。 样例演示 现在有一个TESTTABLE表,本表包含的字段如下图所示,COL01字段是NVARCHAR2类型&#xff0…

springboot医院信管系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…

LabVIEW 实现线路板 PCB 可靠性测试

在电子设备制造领域,线路板 PCB(Printed Circuit Board)的可靠性直接影响产品的整体性能和使用寿命。企业在生产新型智能手机主板时,需要对 PCB 进行严格的可靠性测试,以确保产品在复杂环境下能稳定运行。传统的测试方…

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…

【Redis 源码】压缩链表结构

压缩链表结构 文章目录 压缩链表结构1. ziplist 由来2. 组成3. ziplist对象3.1 ziplist对象创建3.2 创建一个空的ziplist3.3 创建对象3.4 字符编码指定 4. 总结 1. ziplist 由来 ​ 在说压缩链表前,我先拿数组和链表来做个引子,来更好理解为什么ziplist…

【Java数据结构】二叉树相关算法

第一题:获取二叉树中结点个数 得到二叉树结点个数,如果结点为空则返回0,然后再用递归计算左树结点个数根结点(1个)右树结点个数。 public int nodeSize(Node root){if (root null)return 0;return nodeSize1(root.l…

PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片

目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列,由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品,可实现…

debian中apt的配置与解析

引言 在系统使用过程中,我们可能会遭遇 apt update 操作出现问题,或者 apt upgrade 速度迟缓的情况。这往往是由于所使用软件源本身存在诸如服务器性能不佳、维护不及时等质量问题,同时,软件源服务器与我们所处地理位置的距离较远…

深度学习 Pytorch 张量的线性代数运算

pytorch中并未设置单独的矩阵对象类型,因此pytorch中,二维张量就相当于矩阵对象,并且拥有一系列线性代数相关函数和方法。 在实际机器学习和深度学习建模过程中,矩阵或者高维张量都是基本对象类型,而矩阵所涉及到的线…

ESP8266-01S、手机、STM32连接

1、ESP8266-01S的工作原理 1.1、AP和STA ESP8266-01S为WIFI的透传模块,主要模式如下图: 上节说到,我们需要用到AT固件进行局域网应用(ESP8266连接的STM32和手机进行连接)。 ESP8266为一个WiFi透传模块,和…

简历_基于 Cache Aside 模式解决数据库与缓存一致性问题。

系列博客目录 文章目录 系列博客目录缓存更新策略总结案例:给查询商铺的缓存添加超时剔除和主动更新的策略 说到解决数据库与缓存一致性的问题,其实就是要解决缓存更新的问题。 缓存更新策略 业务场景: 低一致性需求:使用内存淘汰机制。例如店铺类型的…

XML在线格式化 - 加菲工具

XML在线格式化 打开网站 加菲工具 选择“XML 在线格式化” 输入XML,点击左上角的“格式化”按钮 得到格式化后的结果

python学opencv|读取图像(三十八 )阈值自适应处理

【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学opencv|读取图像(三十四&#…

数据可视化:让数据讲故事的艺术

目录 1 前言2 数据可视化的基本概念2.1 可视化的核心目标2.2 传统可视化手段 3 数据可视化在知识图谱中的应用3.1 知识图谱的可视化需求3.2 知识图谱的可视化方法 4 数据可视化叙事:让数据讲故事4.1 叙事可视化的关键要素4.2 数据可视化叙事的实现方法 5 数据可视化…