关于你对 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.rhkb.cn/news/209527.html

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

相关文章

win10使用copilot(尝试中)

一、 Microsoft account | Sign In or Create Your Account Today – Microsoft 一路next全部点好【1】 二、 查看当前win10的版本,cmd输入命令winver 三、 修改区域为美国 四、更新和安全 Reference 【1】完美|在 Win10 强行开启 Win11 的独有功能…

IDEA2023找不到 Allow parallel run

我的idea版本:2023.1.4 第一步:点击Edit Configrations 第二步:点击Modify options 第三步:勾选Allow multiple instances 最后点击Apply应用一下 ok,问题解决!

COMP4121Advanced Algorithms

COMP4121Advanced Algorithms WeChat:yj4399_ Sina Visitor System

使用凌鲨进行内网穿透

为了方便在本地进行开发和调试工作,有时候需要安全地连接内网或Kubernetes集群中的服务。 在net proxy server中可以限制访问用户,也可以设置端口转发的密码。 使用 连接端口转发服务 列出可转发端口 可转发端口是服务端设置的,不会暴露真…

开会做笔记的时候用什么软件比较好?

在工作生涯中,会经历很多大大小小的会议,而如何快速准确记录下会议上重要的内容,成了很多上班族的必修课。在会上做笔记,选择什么样的工具才能事半功倍,成了一个值得深思的问题。而经过一段时间的测评后,我…

策略梯度简明教程

策略梯度方法 (PG:Policy Gradient) 是强化学习 (RL:Reinforcement Learning) 中常用的算法。 1、从库里的本能开始 PG的原理很简单:我们观察,然后行动。人类根据观察采取行动。 引用斯蒂芬库里的一句话: 你必须依靠…

【C++初阶】六、类和对象(初始化列表、static成员、友元、内部类)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【C初阶】五、类和对象 (日期类的完善、流运算符重载函数、const成员、“&”取地址运算符重载)-CSDN博客 目录 ​​​​​​​一 . 初始化列表 构造函数…

UiPath学习笔记

文章目录 前言RPA介绍UiPath下载安装组件内容 前言 最近有一个项目的采集调研涉及到了客户端的采集,就取了解了一下RPA和UIPATH,记录一下 RPA介绍 RPA(Robotic Process Automation:机器人处理自动化),是…

Ubuntu systemd-analyze命令(系统启动性能分析工具:分析系统启动时间,找出可能导致启动缓慢的原因)

文章目录 Ubuntu systemd-analyze命令剖析目录简介systemd与systemd-analyze工作原理 安装和使用命令参数详解用例与示例显示启动时间(systemd-analyze time)返回信息解读 列出启动过程中各个服务的启动时间(systemd-analyze blame&#xff0…

OpenCvSharp从入门到实践-(06)创建图像

目录 1、创建图像 1.1实例1-创建黑色图像 1.2实例2-创建白色图像 1.3实例3-创建随机像素的雪花点图像 2、图像拼接 2.1水平拼接图像 2.2垂直拼接图像 2.3实例4-垂直和水平两种方式拼接两张图像 在OpenCV中,黑白图像其实就是一个二维数组,彩色图像…

并发编程笔记

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

Fiddler抓包工具之fiddler的composer可以简单发送http协议的请求

一,composer的详解 右侧Composer区域,是测试接口的界面: 相关说明: 1.请求方式:点开可以勾选请求协议是get、post等 2.url地址栏:输入请求的url地址 3.请求头:第三块区域可以输入请求头信息…

全球与中国工业冰箱市场:增长趋势、竞争格局与前景展望

工业制冷机是用来维持储运容器内低温冷藏环境,以防止食品饮料、药品、化学品等对温度敏感的产品腐败变质的系统。此外,冷冻机、热交换器等冷冻系统也用于在工业机械运作过程中保持冷却。工业冷冻系统的需求成长主要是由食品和饮料产业的成长所推动的。 冷…

蓝桥杯每日一题2023.12.3

题目描述 1.移动距离 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题需要对行列的关系进行一定的探究,所求实际上为曼哈顿距离,只需要两个行列的绝对值想加即可,预处理使下标从0开始可以更加明确之间的关系,奇数行时这一行的数字需…

排序算法介绍(一)插入排序

0. 简介 插入排序(Insertion Sort) 是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常…

计算机组成学习-指令系统总结

复习本章时,思考以下问题: 1)什么是指令?什么是指令系统?为什么要引入指令系统?2)一般来说,指令分为哪些部分?每部分有什么用处?3)对于一个指令系统来说,寻址方式多和少…

龙芯loongarch64服务器编译安装maturin

前言 maturin 是一个构建和发布基于 Rust 的 Python 包的工具,但是在安装maturin的时候,会出现如下报错:error: cant find Rust compiler 这里记录问题解决过程中遇到的问题: 1、根据错误的提示需要安装Rust Compiler,首先去其官网按照官网给的解决办法提供进行安装 curl…

SocialSelling社交销售1+5+1方法论系列:社交销售价值何在

社交销售作为差异化的社媒社交营销模式,在实际运营操作过程中需要实现个人、部门与系统的融合打磨,并非只是应用工具那么简单。为了更高效地服务赋能客户,傲途基于实战提炼出社交销售151方法论,在近期系列内容中,我们将…

浅谈安科瑞无线测温设备在挪威某项目的应用

摘要:安科瑞无线温度设备装置通过无线温度收发器和各无线温度传感器直接进行温度值的传输,并采用液晶显示各无线温度传感器所测温度。 Absrtact:Acre wireless temperature device directly transmits the temperature value through the wireless temp…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Prop@Link@State状态装饰器(十二)

文章目录 一、哪些是状态装饰器二、StatePropLink状态传递的核心规则三、状态装饰器练习 一、哪些是状态装饰器 1、State:被装饰拥有其所属组件的状态,可以作为其子组件单向和双向同步的数据源。当其数值改变时,会引起相关组件的渲染刷新。 …