[后端的秋招简历]Java后端简历模板,转疯了!

相信我们对 ZooKeeper 应该算不上孤单。但是你真的介绍 ZooKeeper 究竟G540用不?假如别人/辩手让你给他谈谈对 ZooKeeper 的认识,你能回答到甚么境地呢?

拿我他们来说吧!我生前曾采用 Dubbo 来做网络通讯工程项目的这时候,采用了 ZooKeeper 做为注册登记服务中心。为了保证网络通讯系统能够并行出访某一资源,我还采用 ZooKeeper 做过网络通讯锁。除此之外,我在学习 Kafka 的这时候,知道 Kafka 很多机能的同时实现倚赖了 ZooKeeper。

前两天,归纳工程项目经验的这时候,我突然问他们 ZooKeeper 究竟是个甚么东西?想了一会,脑子里只是单纯的能显露出这段话:

ZooKeeper 能被用于注册登记服务中心、网络通讯锁;ZooKeeper 是 Hadoop 生态系的核心人物;构筑 ZooKeeper 软件产业的这时候,采用的服务工程项目器最好是偶数台。

由此看来,我对 ZooKeeper 的认知实际上是逗留在了表层。

所以,通过责任编辑,希望带我们稍稍详尽的介绍呵呵 ZooKeeper 。假如没有段小宇 ZooKeeper ,所以责任编辑Sonbhadra是你进入 ZooKeeper 正门的塞雷县砖。假如你已经碰触过 ZooKeeper ,所以责任编辑将带你简述呵呵 ZooKeeper 的许多基础基本概念。

除此之外,责任编辑Ramerupt牵涉到 ZooKeeper 的许多基本概念,前面的该文会介绍到 ZooKeeper 常用指示的采用以及采用 Apache Curator 做为 ZooKeeper 的应用程序。

假如该文有任何需要改善和健全的地方,热烈欢迎在文章区指出,团结合作!

火锅鸡的我:

有采用过的,采用ZooKeeper做为dubbo的注册登记服务中心,采用ZooKeeper同时实现网络通讯锁。ZooKeeper,它是一个开源的网络通讯协同服务工程项目,它是一个软件产业的管理工作者,它将单纯机能强大的USB提供给使用者。能如前所述Zookeeper 同时实现譬如数据发布/订户、阻抗平衡、重新命名服务工程项目、网络通讯协同/通告、软件产业管理工作、Master 议会选举、网络通讯锁和网络通讯堆栈等机能。Zookeeper的商业用途:重新命名服务工程项目、SQLite工作、软件产业管理工作、网络通讯锁、堆栈管理工作

商业用途跟机能不是一个意思咩?

火锅鸡的我(幸好我刷过面试题),无所畏惧

重新命名服务工程项目就是:

重新命名服务工程项目是指通过指定的名字来获取资源或者服务工程项目地址。Zookeeper能创建一个全局唯一的路径,这个路径就能做为一个名字。被重新命名的实体能是软件产业中的机器,服务工程项目的地址,或者是远程的对象等。许多网络通讯服务工程项目框架(RPC、RMI)中的服务工程项目地址列表,通过采用重新命名服务工程项目,应用程序应用能够根据特定的名字来获取资源的实体、服务工程项目地址和提供者信息等。

SQLite工作: :

实际工程项目开发中,我们经常采用.properties或者xml需要配置很多信息,如数据库连接信息、fps地址端口等等。因为你的程序一般是网络通讯部署在不同的机器上(假如你是单机应用当我没说),假如把程序的这些配置信息保存在zk的znode节点下,当你要修改配置,即znode会发生变化时,能通过改变zk中某一目录节点的内容,利用watcher通告给各个应用程序,从而更改配置。

软件产业管理工作

软件产业管理工作包括软件产业监控和软件产业控制,其实就是监控软件产业机器状态,剔除机器和加入机器。zookeeper能方便软件产业机器的管理工作,它能实时监控znode节点的变化,一旦发现有机器挂了,该机器就会与zk断开连接,对用的临时目录节点会被删除,其他所有机器都收到通告。新机器加入也是类似酱紫,所有机器收到通告:有新兄弟目录加入啦。

火锅鸡的我(我先想想):

zookeeper的数据模型

ZooKeeper的视图数据结构,很像Unix文件系统,也是树状的,这样能确定每个路径都是唯一的。zookeeper的节点统一叫做znode,它是能通过路径来标识,结构图如下:

znode的4种类型

根据节点的生命周期,znode能分为4种类型,分别是持久节点(PERSISTENT)、持久顺序节点(PERSISTENT_SEQUENTIAL)、临时节点(EPHEMERAL)、临时顺序节点(EPHEMERAL_SEQUENTIAL)

持久节点(PERSISTENT)

这类节点被创建后,就会一直存在于Zk服务工程项目器上。直到手动删除。

持久顺序节点(PERSISTENT_SEQUENTIAL)

它的基本特性同持久节点,不同在于增加了顺序性。父节点会维护一个自增整性数字,用于子节点的创建的先后顺序。

临时节点(EPHEMERAL)

临时节点的生命周期与应用程序的会话绑定,一旦应用程序会话失效(非TCP连接断开),所以这个节点就会被自动清理掉。zk规定临时节点只能做为叶子节点。

临时顺序节点(EPHEMERAL_SEQUENTIAL)

基本特性同临时节点,添加了顺序的特性。

火锅鸡的我:

znode节点里面存储的是甚么?

Znode数据节点的代码如下

哈哈,Znode包含了存储数据、出访权限、子节点引用、节点状态信息,如图:

data: znode存储的业务数据信息ACL: 记录应用程序对znode节点的出访权限,如IP等。child: 当前节点的子节点引用stat: 包含Znode节点的状态信息,比如事务id、版本号、时间戳等等。

每个节点的数据最大不能超过多少呢

为了保证高吞吐和低延迟,以及数据的一致性,znode只适合存储非常小的数据,不能超过1M,最好都小于1K。

火锅鸡的我:

Watcher机制监听机制的工作原理Watcher特性归纳

Watcher监听机制

Zookeeper 允许应用程序向服务工程项目端某一Znode注册登记一个Watcher监听,当服务工程项目端许多指定事件触发了这个Watcher,服务工程项目端会向指定应用程序发送一个事件通告来同时实现网络通讯的通告机能,然后应用程序根据 Watcher通告状态和事件类型做出业务上的改变。

能把Watcher认知成应用程序注册登记在某一Znode上的触发器,当这个Znode节点发生变化时(增删改查),就会触发Znode对应的注册登记事件,注册登记的应用程序就会收到异步通告,然后做出业务的改变。

Watcher监听机制的工作原理

ZooKeeper的Watcher机制主要包括应用程序线程、应用程序 WatcherManager、Zookeeper服务工程项目器三部分。应用程序向ZooKeeper服务工程项目器注册登记Watcher的同时,会将Watcher对象存储在应用程序的WatchManager中。当zookeeper服务工程项目器触发watcher事件后,会向应用程序发送通告, 应用程序线程从 WatcherManager 中取出对应的 Watcher 对象来执行回调逻辑。

Watcher特性归纳

**一次性:**一个Watch事件是一个一次性的触发器。一次性触发,应用程序只会收到一次这样的信息。异步的: Zookeeper服务工程项目器发送watcher的通告事件到应用程序是异步的,不能期望能够监控到节点每次的变化,Zookeeper只能保证最终的一致性,而无法保证强一致性。轻量级: Watcher 通告非常单纯,它只是通告发生了事件,而不会传递事件对象内容。应用程序串行: 执行应用程序 Watcher 回调的过程是一个串行并行的过程。注册登记 watcher用getData、exists、getChildren方法触发 watcher用create、delete、setData方法

火锅鸡的我:(我背过书,啊哈哈)

Zookeeper 保证了如下网络通讯一致性特性:

顺序一致性:从同一应用程序发起的事务请求,最终Sonbhadra严格地按照顺序被应用到 ZooKeeper 中去。原子性:所有事务请求的处理结果在整个软件产业中所有机器上的应用情况是一致的,也就是说,要么整个软件产业中所有的机器都成功应用了某一个事务,要么都没有应用。单一视图:无论应用程序连到哪一个 ZooKeeper 服务工程项目器上,其看到的服务工程项目端数据模型都是一致的。可靠性: 一旦服务工程项目端成功地应用了一个事务,并完成对应用程序的响应,所以该事务所引起的服务工程项目端状态变更Sonbhadra被一直保留下来。实时性(最终一致性): Zookeeper 实际上能保证在一定的时间段内,应用程序最终一定能够从服务工程项目端上读取到最新的数据状态。

火锅鸡的我:(完蛋了这题不会)

需要介绍事务ID,即zxid。ZooKeeper的在议会选举时通过比较各结点的zxid和机器ID选出新的主结点的。zxid由Leader节点生成,有新写入事件时,Leader生成新zxid并随提案一起广播,每个结点本地都保存了当前最近一次事务的zxid,zxid是递增的,所以谁的zxid越大,就表示谁的数据是最新的。

ZXID的生成规则如下:

ZXID有两部分组成:

任期:完成本次议会选举后,直到下次议会选举前,由同一Leader负责协同写入;事务计数器:单调递增,每生效一次写入,计数器加一。

ZXID的低32位是计数器,所以同一任期内,ZXID是连续的,每个结点又都保存着自身最新生效的ZXID,通过对比新提案的ZXID与自身最新ZXID是否相差1,来保证事务严格按照顺序生效的。

火锅鸡的我:

Zookeeper 服务工程项目器角色

Zookeeper软件产业中,有Leader、Follower和Observer三种角色

Leader

Leader服务工程项目器是整个ZooKeeper软件产业工作机制中的核心,其主要工作:

事务请求的唯一调度和处理者,保证软件产业事务处理的顺序性软件产业内部各服务工程项目的调度者

Follower

Follower服务工程项目器是ZooKeeper软件产业状态的跟随者,其主要工作:

处理应用程序非事务请求,转发事务请求给Leader服务工程项目器参与事务请求Proposal的投票参与Leader议会选举投票

Observer

Observer是3.3.0 版本开始引入的一个服务工程项目器角色,它充当一个观察者角色——观察ZooKeeper软件产业的最新状态变化并将这些状态变更并行过来。其工作:

处理应用程序的非事务请求,转发事务请求给 Leader 服务工程项目器不参与任何形式的投票

Zookeeper下Server工作状态

服务工程项目器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。

1.LOOKING:寻找Leader状态。当服务工程项目器处于该状态时,它会认为当前软件产业中没有 Leader,因此需要进入 Leader 议会选举状态。2.FOLLOWING:跟随者状态。表明当前服务工程项目器角色是Follower。3.LEADING:领导者状态。表明当前服务工程项目器角色是Leader。4.OBSERVING:观察者状态。表明当前服务工程项目器角色是Observer。

火锅鸡的我:

ZooKeeper软件产业部署图

ZooKeeper软件产业是一主多从的结构:

假如是写入数据,先写入主服务工程项目器(主节点),再通告从服务工程项目器。假如是读取数据,既读主服务工程项目器的,也能读从服务工程项目器的。

ZooKeeper如何保证主从节点数据一致性

我们知道软件产业是主从部署结构,要保证主从节点一致性问题,无非就是两个主要问题:

主服务工程项目器挂了,或者重启了主从服务工程项目器之间并行数据~

Zookeeper是采用ZAB协议(Zookeeper Atomic Broadcast,Zookeeper原子广播协议)来保证主从节点数据一致性的,ZAB协议支持崩溃恢复和消息广播两种模式,很好解决了这两个问题:

崩溃恢复:Leader挂了,进入该模式,选一个新的leader出来消息广播: 把更新的数据,从Leader并行到所有Follower

Leader服务工程项目器挂了,所有软件产业中的服务工程项目器进入LOOKING状态,首先,它们会议会选举产生新的Leader服务工程项目器;接着,新的Leader服务工程项目器与软件产业中Follower服务工程项目进行数据并行,当软件产业中超过半数机器与该 Leader服务工程项目器完成数据并行之后,退出恢复模式进入消息广播模式。Leader 服务工程项目器开始接收应用程序的事务请求生成事务Proposal进行事务请求处理。

eader挂了,进入该模式,选一个新的leader出来

消息广播: 把更新的数据,从Leader并行到所有Follower

Leader服务工程项目器挂了,所有软件产业中的服务工程项目器进入LOOKING状态,首先,它们会议会选举产生新的Leader服务工程项目器;接着,新的Leader服务工程项目器与软件产业中Follower服务工程项目进行数据并行,当软件产业中超过半数机器与该 Leader服务工程项目器完成数据并行之后,退出恢复模式进入消息广播模式。Leader 服务工程项目器开始接收应用程序的事务请求生成事务Proposal进行事务请求处理。

发布于 2022-09-26 15:09:45
收藏
分享
海报
124
上一篇:[后端的秋招简历]2018秋招面经-后端开发 下一篇:[后端的秋招简历]【2020后端开发工程师秋招补录招聘】字节跳动招聘信息
目录