百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

Zookeeper概念详解 zookeeper到底是什么

yuyutoo 2024-10-16 15:46 4 浏览 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~

相关推荐

史上最全的浏览器兼容性问题和解决方案

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...

平面设计基础知识_平面设计基础知识实验收获与总结
平面设计基础知识_平面设计基础知识实验收获与总结

CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...

2025-02-21 16:01 yuyutoo

写作排版简单三步就行-工具篇_作文排版模板

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

写一个2048的游戏_2048小游戏功能实现

1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...

今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……

  最近的天气暖和得让很多小伙伴们喊“热”!!!  昨天的气温到底升得有多高呢?你家有没有榜上有名?...

CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式

之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...

柠檬科技肖勃飞:大数据风控助力信用社会建设

...

你的自我界限够强大吗?_你的自我界限够强大吗英文

我的结果:A、该设立新的界限...

行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?

行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...

让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华

去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...

2025-02-21 16:00 yuyutoo

今年国家综合性消防救援队伍计划招录消防员15000名

记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...

一起盘点最新 Chrome v133 的5大主流特性 ?

1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...

竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使

style="text-align:center;"data-mce-style="text-align:...

学物理能做什么?_学物理能做什么 卢昌海

作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...

你不知道的关于这只眯眼兔的6个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: