Zookeeper概念详解 zookeeper到底是什么
yuyutoo 2024-10-16 15:46 8 浏览 0 评论
一.Zookeeper是什么?
Zookeeper是一个开源的分布式协调服务,其致力于分布式数据一致性解决方案。因此,分布式应用程序可以基于zookeeper实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、master选举、分布式锁和分布式队列等功能。
Zookeeper也可以作用于服务生产者和服务消费者的注册中心,即服务生产者可以将服务注册到zookeeper中心,服务消费者在调用服务的时候会先到zookeeper中心查找服务,获取到服务生产者的详细信息后,再调用服务生产者的数据。
二.zookeeper概念
2.1 读在前面
Zookeeper本身就是一个分布式程序,所以只要半数的节点存活,那么zookeeper就能正常提供服务。
为了保证高可用,需要以集群的形式来部署zookeeper,这样即使某台机器发生故障,zookeeper也是可用的。
Zookeeper将数据保存在内存中,这样可以保证高吞吐和低延迟。
Zookeeper的高性能体现在"读",由于"写"存在服务器间数据及状态的同步,因此"写"性能低于"读"性能。
Zookeeper存在临时节点的概念,当创建临时节点的客户端会话一直保持活动,则临时节点就会一直存在,而当会话终结后,临时节点则会被删除。
持久节点一旦被创建,除非主动执行节点(ZNode)的移除操作,否则这个节点将一直保存在zookeeper上。
Zookeeper提供了以下功能,一是存储、读取用户程序提交的数据,二是为用户程序提交数据节点监听服务。
2.2 会话(Session)
Session指的是zookeeper服务器与客户端会话。在zookeeper中,一个客户端连接是指客户端和服务端之间的一个TCP长连接。
客户端启动的时候,首先会与zookeeper服务器建立一个tcp长连接,从第一次连接建立开始,客户端会话的生命周期也开始。通过这个连接,客户端能够通过心跳机制与服务器保持有效的会话,也能够向zookeeper服务器发送请求病接收响应,同时还能够通过该连接接收来自服务器的watch事件通知。
SessionTimeout值用来设置客户端会话的超时时间,当由于服务器压力过大、网络故障或客户端主动断开连接等各种原因所导致客户端连接断开的,只要在sessionTimeout规定的时间内能够重新连接上集群中任意一台服务器,则之前创建的会话仍然有效。
在为客户端创建会话前,服务端会为每个客户端都分配一个全局唯一的sessionID,此sessionID是zookeeper会话的重要标识,许多与会话相关的运行机制都是基于此的。
2.3 ZNode
在zookeeper中,节点可以分为两类,一是构成集群的机器,称之为机器节点,二是数据模型中的数据单元,称之为数据节点(ZNode)。
Zookeeper将所有数据存储内存中,数据模型是一棵树(Znode Tree),其是由斜杠(/)进行分割的路径,如/foo/path就是一个Znode。每个Znode都会保存自己的数据内容,同时还会保存一系列属性信息。
Zookeeper还允许用户为每个节点添加一个特殊的属性:SEQUENTIAL,一旦节点被标记上这个属性,那么在这个节点被创建的时候,zookeeper会自动在其节点名后面追加一个整型数字,这个整型数字是一个由父节点维护的自增数字。
2.4 version
对于每个ZNode,zookeeper都会维护一个stat的数据结构
Stat记录ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)、aversion(当前ZNode的ACL版本)
2.5 Watcher(事件监听器)
Zookeeper允许用户在指定节点上注册一些watcher,并且在一些特定事件触发的时候,zookeeper服务端会将事件通知到感兴趣的客户端去,该机制是zookeeper实现分布式协调服务的重要特性。
2.6 ACL(AccessControlLists)
zookeeper采用ACL(AccessControlLists)策略来进行权限控制。
CREATE:创建子节点的权限(针对子节点)
READ:获取节点数据和子节点列表的权限
WRITE:更新节点数据的权限
DELETE:删除子节点的权限(针对子节点)
ADMIN:设置节点ACL的权限
2.7 zookeeper特性
顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到zookeeper中。
原子性:所有事务请求的处理结果在整个集群中的所有机器上的应用情况是一致的,要么整个集群中所有的机器都成功应用了某个事务,要么都没有应用。
单一系统映像:无论客户端连到哪个zookeeper服务器上,其看到的服务端数据模型都是一致的。
可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。
三.zookeeper设计目标
3.1 简单的数据模型
命名空间由Znode组成,类似于文件和目录。
3.2 构建集群
客户端在使用zookeeper时,需要知道集群中机器列表,通过与集群中的某一台机器建立TCP连接来使用服务。
客户端使用这个TCP连接来发送请求、获取结果、获取监听事件以及发送心跳包,如果这个连接异常断开了,那么客户端就可以连接到另一个机器上。
上图中每一个 Server 代表一个安装 ZooKeeper 服务的服务器。组成 ZooKeeper 服务的服务器都会在内存中维护当前的服务器状态,并且每台服务器之间都互相保持着通信。
集群间通过 Zab 协议(Zookeeper Atomic Broadcast)来保持数据的一致性。
3.3 顺序访问
对于来自客户端的每个更新请求,ZooKeeper 都会分配一个全局唯一的递增编号。
这个编号反应了所有事务操作的先后顺序,应用程序可以使用 ZooKeeper 这个特性来实现更高层次的同步原语。这个编号也叫做时间戳—zxid(ZooKeeper Transaction Id)。
四.zookeeper集群角色
Zookeeper集群角色可分为Leader、Follower、Observer
Follower和Observer唯一的区别在于Observer机器不参与Leader的选举过程,也不参与写操作的"过半写成功"策略,因此,Observer机器可以在不影响写性能的情况下提升集群的读性能。
Leader(领导者),负责进行投票的发起和决议,更新系统状态
Follower(跟随者),用于接收客户请求并向客户端返回结果,在选主过程中参与投票
Observer(观察者),接收客户端连接,将写请求转发给Leader节点,但不参与选主的投票,只同步Leader的数据状态。
您的关注是我的持续动力,咱们下期再见bye~
相关推荐
- pdf,word,ppt,rar,mp4等等文档在线预览
-
背景:移动端的智能化已经被大多数人接受了,但是有时一些文件格式要在移动端打开,需要安装特定的软件才行,这个就是很多人不喜欢的,要看个文档还要下载安装一个app,实在麻烦,那能不能直接在线就预览文件呢具...
- Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像
-
一、前言用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_alaw...
- 全能下载神器文件蜈蚣体验(全能文件王)
-
文件蜈蚣是一款开源免费的软件,在GitHub上公布了所有源代码,自身非常绿色环保,没有流氓后台也没广告,和莫名弹窗的同行相比,可算得上是一股清流。文件蜈蚣的使用很简单,解压后运行一次其中的exe,完成...
- 支持HLS和mp4在线播放的源码(hls支持的视频编码格式)
-
今天安利的一套在线视频播放源码,它不是安卓端,也不是PC端。你只需要部署一下这个单页面源码即可。使用php+mysql+nginx即可。任何版本都能运行。HLSDOWNLOAD网页打开服务器地址:1...
- 大模型微调知识与实践分享(模具微调结构)
-
一、微调相关知识介绍...
- IOS遇到的几个H5坑、h5键盘弹起遮挡输入框的处理
-
一、IOS遇到的几个H5坑1、ios端兼容input光标高度 问题描述:input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上当点击输入的时候,光标的高度和父盒子的高度一样。例如下图,左...
- 实用技巧:如何在win10中安装没有管理员权限的软件
-
通常,我们可能会遇到需要在Windows10电脑上安装软件,但在该电脑上没有管理员权限的情况,由于不是管理员,所以无权在在电脑上安装软件,这让人非常苦恼。事实上,这是微软专门设计的一个安全功能,它的...
- 基于ENVI的Landsat 7遥感影像处理与多种大气校正方法对比
-
1数据导入与辐射定标关于数据的下载,网络中相关资源很多,这里不再赘述。...
- 在 Python 中为无服务器应用设计安全租户隔离
-
软件即服务(SaaS)已经成为当今一种非常普遍的软件交付方式。虽然这方便了用户访问,而且消除了用户的运营开销,但这也改变了以前的模式,将实现SLA以及现代云原生组织所期望的所有安全和数据隐私要求的...
- 基于JFinal的后台业务框架通用模块
-
jcbase是基于JFinal2.x的后台业务框架通用模块,包括系统权限模块、APP版本管理、日志管理、数据字典等使用的技术要点后端使用JFinal2.x前端页面是基于acev1.3模板改造的,更方便...
- PHOTOSHOP图层技巧(掌握photoshop合并图层技巧)
-
你会图层吗?不会?喔,那你肯定不会PHOTOSHOP。为什么那么说呢?因为图层可以说是PHOTOSHOP的核心,几乎PHOTOSHOP所有的应用都是基于图层的,很多强劲的图像处理功能也是图层所提供的,...
- Cadence Allegro背钻设置详细介绍教程
-
CadenceAllegro背钻设置详细介绍教程...
- Pt中间层显著降低PEM水电解电子传输阻抗
-
在质子交换膜水电解(PEMWE)中,阳极OER的Ir基催化剂成本高昂,成为制约产业化的重要瓶颈。虽然非晶态IrOx具有高OER活性,但其电导率较差、与多孔钛PTL之间接触不良,往往导致催化剂层利用率低...
- GIMP 教程:制作 Duotone 双色调效果
-
今天我们学习如何使用GIMP这款强大的开源图像编辑器,制作流行的Duotone(双色调)效果。Duotone效果的核心原理,是将图像的色调信息映射到两种主要颜色上。通常,一种颜色用于图像的亮部...
- CAD打印的时候线条没了?原来是这些设置出了错
-
每当我们辛辛苦苦绘制完一张图纸之后,打印出图的时候总会出现各种各样的问题,不知道大家有没有遇到这种情况:在预览的时候还一切正常,但是打印出来之后就会发现很多线条都会不见了或者部分缺失。那么到底是怎么一...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)