面试网> 面试题库 > IT面试题 > 12道Zookeeper面试题,让你不再束手无策!

12道Zookeeper面试题,让你不再束手无策!

面试网2020/1/10 11:05:120人围观
简介ZooKeeper是一个开源的分布式协调服务,可以基于ZooKeeper实现诸如:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护,名字服务、分布式同步、分布...

    ZooKeeper是一个开源的分布式协调服务,可以基于ZooKeeper实现诸如:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。

一、谈下你对Zookeeper的认识?

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

二、Zookeeper都有哪些功能?

    1. 集群管理:监控节点存活状态、运行请求等;

    2. 主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮选主,主节点选举说的就是这个选举的过程,使用Zookeeper可以协助完成这个过程;

    3. 分布式锁:Zookeeper提供两种锁:独占锁、共享锁。独占锁即一次只能有一个线程使用资源,共享锁是读锁共享,读写互斥,即可以有多线线程同时读同一个资源,如果要使用写锁也只能有一个线程使用。Zookeeper 可以对分布式锁进行控制。

    4. 命名服务:在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。

三、谈下你对ZAB协议的了解?

    ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议。ZAB协议包括两种基本的模式:崩溃恢复和消息广播。

    当整个Zookeeper 集群刚刚启动或者Leader服务器宕机、重启或者网络故障导致不存在过半的服务器与Leader服务器保持正常通信时,所有服务器进入崩溃恢复模式,首先选举产生新的Leader服务器,然后集群中Follower服务器开始与新的Leader服务器进行数据同步。

    当集群中超过半数机器与该Leader服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader服务器开始接收客户端的事务请求生成事物提案来进行事务请求处理。

四、Zookeeper怎么保证主从节点的状态同步?

    Zookeeper的核心是原子广播机制,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。

    1. 恢复模式

    当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。

    2. 广播模式

    一旦leader已经和多数的follower进行了状态同步后,它就可以开始广播消息了,即进入广播状态。这时候当一个server加入ZooKeeper服务中,它会在恢复模式下启动,发现leader,并和leader进行状态同步。

    待到同步结束,它也参与消息广播。ZooKeeper服务一直维持在Broadcast状态,直到leader 崩溃了或者leader失去了大部分的followers支持。

五、Zookeeper有几种部署模式?

    Zookeeper有三种部署模式:

    1. 单机部署:一台集群上运行;

    2. 集群部署:多台集群运行;

    3. 伪集群部署:一台集群启动多个Zookeeper实例运行。

六、说一下Zookeeper的通知机制?

    client端会对某个znode建立一个watcher事件,当该znode发生变化时,这些client会收到zk的通知,然后client可以根据znode变化来做出业务上的改变等。

七、集群中为什么要有主节点?

    在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行leade选举。

八、集群中有3台服务器,其中一个节点宕机,这个时候Zookeeper还可以使用吗?

    可以继续使用,单数服务器只要没超过一半的服务器宕机就可以继续使用。

    集群规则为2N+1台,N >0,即最少需要3台。

九、说一下两阶段提交和三阶段提交的过程?分别有什么问题?

(一)两阶段提交协议2PC

    1. 第一阶段(投票阶段):

    (1)协调者节点向所有参与者节点询问是否可以执行提交操作(vote),并开始等待各参与者节点的响应;

    (2)参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志。
    (3)各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个同意消息;如果参与者节点的事务操作实际执行失败,则它返回一个中止消息。

    2. 第二阶段(提交执行阶段):
    当协调者节点从所有参与者节点获得的相应消息都为同意时:

    (1)协调者节点向所有参与者节点发出正式提交(commit)的请求;

    (2)参与者节点正式完成操作,并释放在整个事务期间内占用的资源;

    (3)参与者节点向协调者节点发送完成消息;

    (4)协调者节点受到所有参与者节点反馈的完成消息后,完成事务。

(二)两阶段提交存在的问题:
    1. 执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态;

    2. 参与者发生故障:协调者需要给每个参与者额外指定超时机制,超时后整个事务失败;

    3. 协调者发生故障:参与者会一直阻塞下去。需要额外的备机进行容错;

    4. 二阶段无法解决的问题:协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。

(三)三阶段提交协议3PC
    与两阶段提交不同的是,三阶段提交有两个改动点:

    1. 引入超时机制。同时在协调者和参与者中都引入超时机制;

    2. 在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。

    也就是说,除了引入超时机制之外,3PC 把 2PC 的准备阶段再次一分为二,这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。

    1. CanCommit阶段
    3PC的CanCommit阶段其实和2PC的准备阶段很像。协调者向参与者发送commit请求,参与者如果可以提交就返回Yes响应,否则返回No响应。

    (1)事务询问:协调者向参与者发送CanCommit请求。询问是否可以执行事务提交操作。然后开始等待参与者的响应。

    (2)响应反馈:参与者接到CanCommit请求之后,正常情况下,如果其自身认为可以顺利执行事务,则返回Yes响应,并进入预备状态。否则反馈No。

    2. PreCommit阶段
    协调者根据参与者的反应情况来决定是否可以继续事务的PreCommit操作。根据响应情况,有以下两种可能:

    假如协调者从所有的参与者获得的反馈都是Yes响应,那么就会执行事务的预执行。

    (1)发送预提交请求:协调者向参与者发送PreCommit请求,并进入Prepared阶段。

    (2)事务预提交:参与者接收到PreCommit请求后,会执行事务操作,并将undo和redo信息记录到事务日志中。
    (3)响应反馈:如果参与者成功的执行了事务操作,则返回ACK响应,同时开始等待最终指令。

    假如有任何一个参与者向协调者发送了No响应,或者等待超时之后,协调者都没有接到参与者的响应,那么就执行事务的中断。
    (1)发送中断请求:协调者向所有参与者发送abort请求。
    (2)中断事务:参与者收到来自协调者的abort请求之后(或超时之后,仍未收到协调者的请求),执行事务的中断。

    3. doCommit阶段
    该阶段进行真正的事务提交,也可以分为以下两种情况。

    3.1 执行提交

    (1)发送提交请求:协调接收到参与者发送的ACK响应,那么他将从预提交状态进入到提交状态。并向所有参与者发送doCommit请求。

    (2)事务提交:参与者接收到doCommit请求之后,执行正式的事务提交。并在完成事务提交之后释放所有事务资源。

    (3)响应反馈:事务提交完之后,向协调者发送ACK响应。

    (4)完成事务:协调者接收到所有参与者的ACK响应之后,完成事务。

    3.2 中断事务

    协调者没有接收到参与者发送的ACK响应(可能是接受者发送的不是ACK响应,也可能响应超时),那么就会执行中断事务。

    (1)发送中断请求:协调者向所有参与者发送abort请求。

    (2)事务回滚:参与者接收到abort请求之后,利用其在阶段二记录的undo信息来执行事务的回滚操作,并在完成回滚之后释放所有的事务资源。

    (3)反馈结果:参与者完成事务回滚之后,向协调者发送ACK消息。

    (4)中断事务:协调者接收到参与者反馈的ACK消息之后,执行事务的中断。

(四)三阶段提交的问题:

    网络分区可能会带来问题。需要四阶段解决:四阶段直接调用远程服务的数据状态,确定当前数据一致性的情况。

十、Zookeeper宕机如何处理?

    Zookeeper本身也是集群,推荐配置不少于3个服务器。Zookeeper自身也要保证当一个节点宕机时,其他节点会继续提供服务。如果是一个Follower宕机,还有2台服务器提供访问,因为Zookeeper上的数据是有多个副本的,数据并不会丢失;如果是一个Leader宕机,Zookeeper会选举出新的Leader。

    Zookeeper集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在Zookeeper节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。所以:

    3个节点的cluster可以挂掉1个节点(leader可以得到2票> 1.5)

    2个节点的cluster就不能挂掉任何1个节点了(leader可以得到1票<= 1)

十一、说下四种类型的数据节点Znode?

    1. PERSISTENT:持久节点,除非手动删除,否则节点一直存在于Zookeeper上。

    2. EPHEMERAL:临时节点,临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与Zookeeper连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。

    3. PERSISTENT_SEQUENTIAL:持久顺序节点,基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

    4. EPHEMERAL_SEQUENTIAL:临时顺序节点,基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

十二、Zookeeper和Dubbo的关系?

    Dubbo的将注册中心进行抽象,是得它可以外接不同的存储媒介给注册中心提供服务,有ZooKeeper,Memcached,Redis等。

    引入了ZooKeeper作为存储媒介,也就把ZooKeeper的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;

    资源同步,单单有负载均衡还不够,节点之间的数据和资源需要同步ZooKeeper集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向ZooKeeper上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。其他特性还有Mast选举,分布式锁等。

最新信息

  • 技术干货:Hadoop面试题及答案

    一、什么是Hadoop? Hadoop是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop包括以下内容: HDF...

  • 技术干货:ActiveMQ面试题及答案

    1、什么是 ActiveMQ? activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。2、Active...

  • 技术干货:RabbitMQ面试题及答案

    RabbitMQ作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色,特别是在一些典型的应用场景以及业务模块中具有重要的作用。 比如业务服务模块解耦,异步通信,高并发限流...

  • 关于Tomcat的13道面试题,你能答对几个?

    Tomcat服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它早期...

  • 12道Zookeeper面试题,让你不再束手无策!

    ZooKeeper是一个开源的分布式协调服务,可以基于ZooKeeper实现诸如:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护,名字服务、分布式同步、分布...

  • 技术干货:spring boot面试题及答案

    做Java开发,没有人敢小觑 Spring Boot的重要性,现在出去面试,无论多小的公司 or 项目,都要跟你扯一扯 Spring Boot,扯一扯微服务,不会?没用过?Sorry,我们不合适! ...

标签列表