Zookeeper的基础知识是什么

技术Zookeeper的基础知识是什么本篇文章为大家展示了Zookeeper的基础知识是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。简介Apache ZooKeeper是一

本文向您展示了Zookeeper的基本知识,简洁易懂。它一定会让你的眼睛发光。希望通过这篇文章的详细介绍,你能有所收获。

简介

Apache ZooKeeper是一个分布式、开源的分布式应用协调服务,由Client和Server组成。服务器提供一致的复制和存储服务。客户端包含一个简单的原语集,基于这个原语集,分布式应用程序可以实现同步服务、配置维护和命名服务等。ZooKeeper的设计非常容易编程。ZooKeeper维护了一个分层的名称空间,它采用了类似于树的数据结构,类似于标准的文件系统。因为从头开始实现一个分布式的协同服务是非常困难的。最常见的问题是竞争条件和死锁。Apache ZooKeeper的目标是封装复杂易错的关键服务,为用户提供易于使用的高性能稳定功能的接口和系统。

Zookeepr的数据存储在内存中(更新后的数据会持久化到磁盘上),所以它的吞吐量会很高,延迟会很低。ZooKeeper的实现更加注重高性能、高可用和严格有序的访问。Zookeeper的性能使其能够在大规模分布式系统中使用,高可用性可以避免单点故障,严格有序的访问可以使Client实现复杂的同步原语。

Zookeeper系统模型

Zookeeper的基础知识是什么

上图中的哪些服务器组成了Zookeeper服务,每个服务器都知道对方的存在。这些服务器在内存中保存状态的镜像,并通过事务日志和快照保存到硬盘上。只要集群中的大多数服务器都可以访问,ZooKeeper服务就可以使用。

客户端将连接到动物园管理员服务器。客户机和服务器保持一个长的TCP连接。通过这种TCP长连接,客户端可以发送请求、获取响应、获取观察事件和发送心跳(客户端和服务器通过心跳保持连接,即会话)。如果与服务器的长TCP连接断开,则客户端将连接到另一台服务器。

Zookeeper是有序的:的动物园管理员使用邮票作为所有交易的顺序。

Zookeeper是非常快的:特别是在面向读取的情况下,Zookeeper应用可以在数千台机器上运行,读写比为1033601时性能最好。

Zookeeper数据模型

Zookeeper的基础知识是什么

ZooKeeper数据模型的结构与Unix文件系统非常相似,可以看作是一个整体的树,每个节点称为一个ZNode。每个ZNode可以存储少量数据(默认为1M,可以通过配置修改,一般不建议在ZNode上存储大量数据)。以下是动物园管理员的一些重要概念:

1、Znode

1.Zookeeper节点称为Znode,每个节点都有一个唯一的路径标记。氧化锌有两种类型:1 .普通Znode2、短暂的(暂时的)节点

2.Znode维护stat结构,其中包含数据、ACL更改的版本号和时间戳,以允许缓存验证和协调更新。当znode的数据发生变化时,版本号会增加。

3.Znode可以有子节点,Znode可以存储数据,但是短暂(临时)的Znode不能有子节点。

4.Znode数据可以有多个版本,客户端可以根据版本获取该节点的数据。

5.如果创建临时节点的客户端和服务器之间的连接丢失,零节点将被自动删除。

6、Znode可以自动编号。

7.可以在Znode中添加watch,用于监控该节点中存储的数据是否被修改,以及子节点目录的变化等。一旦发生更改,就可以通知监控客户端。

8.Znode的读写操作是原子的,每个Znode都有一个访问控制列表(ACL)来控制谁可以做什么操作。

第二,会议

客户端和动物园管理员之间的通信需要创建一个会话,该会话将会超时。因为Zookeeper集群将保存客户端的会话信息,所以在会话到期之前,客户端和Zookeeper服务器之间的连接可以在ZooKeeper服务器之间透明地移动。

在实际应用中,如果客户机和服务器之间的通信足够频繁,会话的维护就不需要其他额外的消息。否则,如果客户机2T/3毫秒不发送心跳信号,动物园管理员客户机将每T/3毫秒向服务器发送一次心跳信号

收到来自Server的心跳回应,就会换到一个新的ZooKeeper Server上。这里T是用户配置的Session的超时时间。

三,Watcher
ZooKeeper支持一种Watch操作,Client可以在某个ZNode上设置一个Watcher,来Watch该ZNode上的变化。如果该ZNode上有相应的变化,就会触发这个Watcher,把相应的事件通知给设置Watcher的Client。需要注意的是,ZooKeeper中的Watcher是一次性的,即触发一次就会被取消,如果想继续Watch的话,需要客户端重新设置Watcher。

四,事务日志和快照

dataDir目录指定了Zookeeper的数据目录,用于存储Zookeeper的快照文件(snapshot)。

dataLogDir定义了Zookeeper的事务日志目录,目录存放Zookeeper的事务日志,正常情况下,所有的更新操作在返回客户端更新成功前,Zookeeper肯定已经将本次更新操作写入到事务日志了(即磁盘中)。事务日志的文件名是log.,zxid是写入这个文件的第一个事务id。在完成若干次事务后会一次数据快照,将当前Server上所有节点的状态以快照文件的形式dump到磁盘上去,即snapshot文件。

Zookeeper角色

Zookeepr角色分可以分为四类:

角色

描述

Leader

领导者负责进行投票的发起和决议,更新系统状态

Follower

1,Follower负责接收Client请求,并向客户端返回结果

2,在选Leader的过程中参与投票

Observer

ObServer可以接收客户端的连接,将写请求转发到Leader节点,但是ObServer不参与投票和选举,仅仅接收投票和选举的结果。它的作用主要是用来扩展系统,提高读取的速度。ObServer是zookeeper-3.3.0新加的角色。

Client

请求发起方

Server的状态可以分为如下四种:

leading:当前Server为Leader。

following:当前Server为Follower。

observing:当前Server为Observer。

looking:当前Server不知道leader是谁,正在搜寻。

Zookeeper特性

顺序一致性:按照客户端发送请求的顺序更新数据。Zookeeper是不属于强一致性,因为watcher没办法扑捉到每次的变化。
原子性:更新要么成功,要么失败,不会出现部分更新。
单一系统映像 :无论客户端连接哪个server,都会看到同一个视图。
可靠性:具有简单、健壮、良好的性能,如果消息被到一台服务器接受,那么它将被所有的服务器接受。
时效性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新数据,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。

ZooKeeper原理

Zookeeper的核心是原子广播,通过Zab协议保证各个Server之间数据的同步。Zab协议有两种模式,分别是恢复模式(选举Leader)和广播模式(同步)。服务启动或者Leader崩溃后,Zab就会进入了恢复模式,当Leader被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了Leader和Server具有相同的系统状态。

为了保证事务的顺序一致性,Zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

每个Server在工作过程中有四种状态:
    LOOKING:当前Server不知道leader是谁,正在搜寻。
    LEADING:当前Server即为选举出来的leader。
    FOLLOWING:leader已经选举出来,当前Server与之同步。
    OBSERVING:不选举,只从Leader同步状态。

Zookeeper API

Zookeeper的一个设计目标是提供简单的编程接口,仅仅支持如下操作:

create:创建一个Znode。path是其路径,data是要存储在该Znode上的数据,createMode包括:PERSISTEN,PERSISTENT_SEQUENTAIL,EPHEMERAL,EPHEMERAL_SEQUENTAIL。

delete:删除一个Znode。可以删除指定版本的Znode,如果version设置为-1的话,就删除所有的版本。

exists:判断Znode是否存在,设置是否Watch这个Znode。

get data:读取指定Znode上的数据,并设置是否watch这个Znode。

set data:更新指定Znode的数据,并设置是否Watch这个Znode。

get children:更新指定ZNode的数据,并设置是否Watch这个Znode。

sync:把sync之前的更新操作都同步过来。

set acl:设置指定ZNode的Acl信息

get acl:获取指定ZNode的Acl信息

其他

读、写(更新)模式:
Zookeeper集群中,客户端可以从任意一个ZooKeeper服务器读取,这一特点保证了ZooKeeper有比较好的读性能;

写的请求会先Forwarder到Leader,然后由Leader来通过ZooKeeper中的原子广播协议,将请求广播给所有的Follower,Leader收到一半以上的写成功的Ack后,就认为该写成功了,就会将该写进行持久化,并告诉客户端写成功了。

WAL(Write-Ahead-Log)和Snapshot:
ZooKeeper也有WAL,每一个更新操作,ZooKeeper都会先写WAL,然后再对内存中的数据做更新,最后向Client通知更新结果。

ZooKeeper还会定期将内存中的目录树进行Snapshot,落地到磁盘上。其实跟HDFS中的fsimage和edits log是类似的。这么做的主要目的,一当然是数据的持久化,二是加快重启之后的恢复速度,如果全部通过Replay WAL的形式恢复的话,会比较慢。

FIFO:
对于每一个ZooKeeper客户端而言,所有的操作都是遵循FIFO顺序的,这一特性是由下面两个基本特性来保证的:

一是ZooKeeper Client与Server之间的网络通信是基于TCP,TCP保证了Client/Server之间传输包的顺序;

二是ZooKeeper Server执行客户端请求也是严格按照FIFO顺序的。

线性化:
ZooKeeper包括全局有序和偏序两种:

全局有序是针对服务器端。例如:在一台服务器上消息A在消息B前发布,那么所有服务器上的消息A都将在消息B前被发布;

偏序是针对客户端。例如:在同一个客户端发送消息B在消息A后发布,那么执行的顺序必将是先执行消息A然后在是消息B;

所有的更新操作都有严格的偏序关系,更新操作都是串行执行的,这一点是保证ZooKeeper功能正确性的关键。

使用场景

1,数据发布与订阅

2,名空间服务

3,分布式通知/协调

4,分布式锁

5,集群管理

上述内容就是Zookeeper的基础知识是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/86832.html

(0)

相关推荐

  • 如何解决ios程序在ios5下出现黑屏的问题

    技术如何解决ios程序在ios5下出现黑屏的问题这篇文章给大家分享的是有关如何解决ios程序在ios5下出现黑屏的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 用xcode4.2生成的程

    攻略 2021年10月21日
  • 织梦火车站和discuz哪个好(织梦模板和discuz区别)

    技术织梦是如何与discuz论坛整合一起应用本篇文章为大家展示了织梦是如何与discuz论坛整合一起应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  成功在DedeCMS 5

    攻略 2021年12月22日
  • 远近闻名类似的词语,用下列词语编一个童话故事

    技术远近闻名类似的词语,用下列词语编一个童话故事卡尔是 远近闻名的制剑师摩尔的小儿子远近闻名类似的词语,他不仅剑制的的 好,剑术也是一流的,可以和国王的卫队相提并论。听说伯爵悬赏勇士去杀掉山上的恶龙,卡尔不假思索拿上最合

    生活 2021年10月25日
  • 韦编三绝是什么意思,韦编三绝的故事,简短些

    技术韦编三绝是什么意思,韦编三绝的故事,简短些早在春秋战国时期,由于纸尚未出现,人们用竹简通过熟牛皮串起来来写下书籍韦编三绝是什么意思。”韦编“就是熟牛皮的意思。韦编三绝顾名思义就是穿竹简的牛皮屡次断裂的意思。这其实是一

    生活 2021年10月24日
  • nginx中的两个模块的proxy_pass的区别是什么

    技术nginx中的两个模块的proxy_pass的区别是什么本篇内容介绍了“nginx中的两个模块的proxy_pass的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学

    攻略 2021年11月29日
  • Apache Flink POC漏洞示例分析CVE-2020-17518/17519

    技术Apache Flink POC漏洞CVE-2020-17518/17519的示例分析今天就跟大家聊聊有关 Apache Flink POC漏洞CVE-2020-17518/17519的示例分析,可能很多人都不太了解

    攻略 2021年12月22日