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

Zookeeper概念详解 zookeeper到底是什么

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

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: