关于你对 Zookeeper 的理解

看看普通人和高手是如何回答这个问题的?

普通人

Zookeeper 是一种开放源码的分布式应用程序协调服务

是一个分布式的小文件存储系统

一般对开发者屏蔽分布式应用开发过过程种的底层细节

用来解决分布式集群中应用系统的一致性问题

高手

对于 Zookeeper 的理解,我觉得可以从分布式系统中的三种典型应用场景说起:

第一种:集群管理

在多个节点组成的集群中,为了保证集群的 HA 特性,每个节点都会冗余一份据副本。这种情况下需要保证客户端访问集群中的任意一个节点都是最新的数据。

一个 Zookeeper 集群通常由一组机器组成,一般3~5台集群就可以组成一个 Zookeeper 集群。集群拓扑图基本如下:

在这里插入图片描述

Zookeeper 集群中每一个节点都会在内存中维护当前的节点状态,并且彼此之间保持着通信。这里说明一点,只要集群中存在过半的节点正常工作,整个集群就能够对外提供服务。

如上图,在 Zookeeper 集群中,有 Leader、Follower 和 Observer 三种类型的角色。

Leader

Leader 节点整个 Zookeeper 集群工作机制中的核心,主要工作是处理客户端的读写请求,及集群内部各服务的调度。注意只有 leader 能够处理写请求。

Follower

处理客户端的读请求,将写请求转发给 leader。参与 leader 选举投票等。

Observer

这是自 Zookeeper 3.3.0 版本引入的一个新的角色,主要是为了解决大规模 Server 场景下因 leader 选举投票成本增加导致写性能下降的问题。Observer 的工作原理和 follower 基本一致。处理客户端的读请求,将写请求转发给leader。和 follower 唯一的区别在于,Observer 不参与任何形式的选举,包括 leader 选举。

一般而言,中小型规模的 Zookeeper 集群中只包含 leader 和 follower 两个角色,这容易让我们忽略 observer 角色的存在。配置一个节点为 observer 也很简单,只需如下两步:

# 在observer节点的配置文件中添加如下配置
peerType=observer# 在每个节点的配置文件中,给observer节点添加:observer标识
# 例如:
server.1:localhost:2181:3181:observer

至此,相信你对 Zookeeper 的集群架构与相关角色有了一定认识。

第二种:分布式锁

如何保证跨进程的共享资源的并发安全性,对于分布式系统来说也是一个比较大的挑战,而为了达到这样一个目的,必须要使用跨进程的锁也就是分布式锁来实现。

不同节点上的服务,可能需要同时访问一个资源,这时可能需要一把分布式锁。使用 Zookeeper 实现分布式锁主要基于以下特性:

  • ZooKeeper 的强一致性,保证只有一个客户端能够创建锁成功。
  • 锁的独占性,创建 ZNode 成功的客户端才能得到锁,其他客户端只能等待,当客户端用完释放锁时,其他客户端再次尝试创建 ZNode,获取分布式锁。

第三种: Master 选举

在多个节点组成的集群中,为了降低集群数据同步的复杂度,一般会存在 Master和 Slave 两种角色的节点,Master 负责事务和非事务请求处理,Slave 负责非事务请求处理。但是在分布式系统中如何确定某个节点是 Master 还是 Slave,也成了一个难度不小的挑战。

基于这三类常见场景的需求,所以产生了 Zookeeper 这样一个中间件。它是一个分布式开源协调组件,简单来说,就是类似于一个裁判员的角色,专门负责协调和解决分布式系统中的各类问题。

Master 选举是一个分布式系统中非常常见的场景,这里是利用 Zookeeper 的强一致性,保证只有一个客户端能够创建节点成功。

在这里插入图片描述

比如,针对上述描述的问题,Zookeeper 都可以解决。

\1. 集群管理

Zookeeper 提供了 CP 的模型,来保证集群中的每个节点的数据一致性,当然Zk 本身的集群并不是 CP 模型,而是顺序一致性模型,如果要保证 CP 特性,需要调用 sync 同步方法。

\2. 分布式锁

Zookeeper 提供了多种不同的节点类型,如持久化节点、临时节点、有序节点、容器节点等,其中对于分布式锁这个场景来说,Zookeeper 可以利用有序节点的特性来实现。除此之外,还可以利用同一级节点的唯一性特性来实现分布式锁。

\3. Master 选举

Zookeeper 可以利用持久化节点来存储和管理其他集群节点的信息,从而进行Master 选举机制。或者还可以利用集群中的有序节点特性,来实现 Master 选举。

目前主流的 Kafka、Hbase、Hadoop 都是通过 Zookeeper 来实现集群节点的主从选举。

总的来说,Zookeeper 就是经典的分布式数据一致性解决方案,致力于为分布式应用提供高性能、高可用,并且具有严格顺序访问控制能力的分布式协调服务。 它底层通过基于 Paxos 算法演化而来的 ZAB 协议实现。

Zookeeper 数据模型

Zookeeper 的数据模型是一棵类似 Unix 文件系统的 ZNode Tree 即 ZNode 树,但是没有引入传统文件系统的目录或者文件等概念,而是使用了称为 “数据节点” 的概念,术语叫做 ZNode。ZNode 是 Zookeeper 存储数据的最小单元,每个 ZNode 可以保存数据,也可以挂载子节点,其中根节点是 /。示意图如下:

在这里插入图片描述

使用过 Zookeeper 的同学应该都知道,Zookeeper 主要提供了两个核心功能:

  • 管理(存储、读取)客户端提交的数据;
  • 为客户端提供数据节点的监听服务;

这里就涉及到 Zookeeper 的两个重要特性,就是它的 ZNode 模型与 Watcher 机制。

ZNode 模型

前面讲到 Zookeeper 是由数据节点 ZNode 构成的,Zookeeper 中的每个数据节点都是有生命周期的,其生命周期的长短取决于 ZNode 的节点类型。ZNode 根据其生命周期和特点可分为 4 类。

在这里插入图片描述

分别是:

  • 持久性节点(PERSISTENT):客户端与 Zookeeper 断开会话后,该节点依旧存在,直到执行删除操作才会清除节点。
  • 持久性顺序节点(PERSISTENT_SEQUENTIAL):另一种持久节点,Zookeeper 会给该节点名称加上一个数字后缀,进行顺序编号。
  • 临时节点(EPHEMERAL):节点的生命周期和客户端的会话绑定在一起,客户端与 Zookeeper 断开会话后,该节点就会被自动删除。各个场景中很多都是利用 Zookeeper 临时节点这个特性的。
  • 临时顺序节点(EPHEMERAL_SEQUENTIAL):概念和上面类似,Zookeeper 也会给该节点进行顺序编号。

前面提及了 ZNode 是存储数据的最小单元,除了存储用户数据外,ZNode 还有以下特点:

  • 包含 ZNode 修改/访问的时间、事务id(zxid),ACL 权限、版本等状态信息;
  • 所有的事务请求在 ZNode 端都是顺序和原子性的;
  • 数据主要存储在内存中,磁盘中保存事务日志、快照数据等;

Watcher 机制

Watcher 机制也称监听机制,它是 Zookeeper 的关键特性,是通过 ZooKeeper 实现分布式发布/订阅、分布式锁、集群管理等功能的基础。

在这里插入图片描述

如上图所示,Zookeeper 允许客户端向服务端注册一个 Watcher 监听器,当服务端的一些指定事件触发了该监听,比如节点创建、删除,节点数据变更等事件,Zookeeper 就会向注册了监听器的客户端发送相应的事件通知。

以上就是我对于 Zookeeper 的理解。

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

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

相关文章

并发编程笔记

1、前言 这篇笔记是我花的20多天跟着⿊⻢的并发编程学习做的笔记,地址是b站 ⿊⻢ 并发编程 ,也是我第⼀次 学习并发 编程,所以如果有很多原理讲不清楚的,知识点不全的,也请多多包涵 中间多数图都是直接截⽼师的笔记…

基于Java SSM框架+Vue实现疫情期间医院门诊网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现疫情期间医院门诊网站演示 摘要 21世纪的到来,国家的方方面面、各行各业都在努力与现代的先进技术接轨,智能科技时代崛起的优势,医院门诊管理系统当然也不能排除在外。疫情期间医院门诊管理系统是以实际运用为开发背…

【JVM系列】Class文件分析

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

网工学习6-配置和管理 VLAN

6.1VLAN概念 1> 什么是 VLAN? VLAN 是一种在交换机上划分逻辑网段的二层技术。 2> 为什么要通过交换机划分网段? ① 因为交换机的端口密度比路由器高,并且价格比路由器低,所以组网成本更低。 ② 因为交换机划分网段比…

终端安全管理软件是监控软件吗

有些人在后台问,终端安全管理软件是监控软件吗? 先回答,是监控软件。 因为它具有监控的功能,在很大程度上,是可以用来当做监控软件来用的。 终端安全管理软件是一种集中管理终端设备的软件工具,可以在企业…

猜数字赢金币

充值金币后开始游戏,猜中奖励10金币退出,不中扣除1金币继续。 (笔记模板由python脚本于2023年12月03日 21:52:23创建,本篇笔记适合熟悉程序函数式编程,熟练掌握基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&…

c# datagridview 常用属性设置

1. 列宽自适应 设置属性DataGridViewAutoSizeColumnMode 为AllCells 其他属性值: 属性说明NotSet列的大小调整行为从DataGridView.AutoSizeColumnsMode 属性继承。None列宽不会自动调整。AllCells调整列宽,以适合该列中的所有单元格的内容,包…

linux常用命令-find命令与scp命令详解(超详细)

文章目录 前言一、find命令介绍1. find命令简介2. find命令的基本语法3. 常用的find命令选项和表达式 二、find命令示例用法1. 按照名称进行搜索2. 按照类型进行搜索3. 按照修改时间进行搜索4. 按照文件大小进行搜索5. 对搜索到的文件执行指定的命令6. 删除搜索到的文件 三、sc…

线程池怎么用?---实例讲解

线程池使用实例 先写一个配置类 /*** 线程池配置*/ Configuration public class ThreadPoolConfig {//定义线程前缀public static final String NAME_PRE"test";/*** ExecutorService 这个对象就是线程池,可以点进去他的源码看看* Bean,将ge…

26.Oracle11g的数据装载

Oracle11g的数据装载 一、数据装载概述1、数据装载是什么2、使用SQL*Loader进行数据装载 二、外部表1、外部表概念2、外部表的使用 三、使用外部表数据装载案例1、创建目标表2、准备数据源3、装载数据4、验证数据 一、数据装载概述 1、数据装载是什么 数据装载是指将数据从一…

2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷③

2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷③ 2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷③A模块基础设施设置/安全加固(200分)A-1任务一 登录安全加固(Wi…

400页Python学习PDF笔记,全面总结零基础入门看这一篇足够了

我们都知道Python入门比较简单,但仍有很多想要学习的新手依然卡在基础的安装阶段,尽管如此,网络上的大部分的教程却对这些基础内容都是一带而过,导致许多新手朋友对这些基础知识一知半解,往往一个小问题都需要在网上查…

2023 iOS 八股文

题集大全 1: 谈谈你对KVC的理解 2: iOS项目中引用多个第三方库引发冲突的解决方法 3: GCD实现多读单写 4: 讲一下atomic的实现机制;为什么不能保证绝对的线程安全? 5: Autoreleasepool所使用的数据结构是什么? 6: AutoreleasePoolPage结构体了解么? 7: iOS中内省的几个…

电脑回收站还原的文件在哪里找到?如何找回回收站还原的文件

电脑回收站是一种非常有用的功能,可以帮助我们恢复无意中删除的文件。然而,许多人可能不清楚还原的文件在哪里可以找到。本文将为您带来详细解答,并帮助您找回回收站还原的文件。 电脑回收站还原的文件在哪里找到 当我们使用电脑的回收站功…

element的el-date-picker时间控件,限制选择范围区间天数并且当前之后的日期不可选

element的el-date-picker时间控件&#xff0c;限制选择范围区间天数并且当前之后的日期不可选 HTML部分代码 <el-date-pickerv-model"dateRange"type"datetimerange"value-format"yyyy-MM-dd HH:mm:ss"range-separator"至"start-p…

前端知识笔记(二十三)———云服务器网站遇到HTTPS CC攻击了,有什么办法吗?

目前网站使用SSL证书&#xff0c;用443端口的情况非常普遍&#xff0c;大多数网站&#xff0c;用户都是会选择用证书&#xff0c;这样不仅可以提供数据传输的安全性&#xff0c;增强用户信任和品牌形象&#xff0c;还可以提高网站在搜索结果中的排名&#xff0c;从而增加流量和…

element 弹窗在弹出后鼠标还可以点击页面其他元素

文章目录 需求分析需求 如下图所示,在点击弹出弹框后,支持 鼠标可点击弹框外的其他地方可拖拽弹框弹出弹出后不可有遮挡弹出样式可自定义 分析 官网:https://vxetable.cn/v4/#/table/start/install 安装 vxe-table 引入import {App, createApp }

速达软件全系产品任意文件上传漏洞复现 [附POC]

文章目录 速达软件全系产品任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 速达软件全系产品任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技…

常见js hook脚本

一.js hook 过无限debugger var _constructor constructor; Function.prototype.constructor function(s) {if (s "debugger") {console.log(s);return null;}return _constructor(s); }//去除无限debugger Function.prototype.__constructor_back Function.pro…

centos安装Python3之后yum不能使用异常

场景&#xff1a; 需要在centos上安装Python3&#xff0c;但是安装Python3之后出现yum不能使用的问题。 问题描述 在centos上安装python3之后出现yum使用不了问题&#xff0c;使用yum会报如下信息&#xff1a; [roothadoop101~]# yum install wgetFile "/usr/bin/yum&q…