Zookeeper面试题
一、基础知识
1.zookeeper是什么
ZooKeeper主要服务于分布式系统,可以用ZooKeeper来做:统一配置管理、统一命名服务、分布式锁、集群管理。
2.zookeeper有几种部署模式
单机模式
集群模式(配置 zoo.cfg)
伪集群模式(一台服务器启动多个zookeeper实例运行)
二、ZAB协议
Zab(Zookeeper Atomic Broadcast)是为ZooKeeper协设计的崩溃恢复原子广播协议,它保证zookeeper集群数据的一致性和命令的全局有序性。
1.前置知识
集群角色
服务状态
ZAB四种状态
Zookeeper是通过自身的状态来区分自己所属的角色,来执行自己应该的任务。
2.leader选举算法
服务启动期间的选举
服务运行期间的选举
Zxid是极为重要的概念,它是一个long型(64位)整数,分为两部分:纪元(epoch)部分和计数器(counter)部分,是一个全局有序的数字。
epoch代表当前集群所属的哪个leader,leader的选举就类似一个朝代的更替,你前朝的剑不能斩本朝的官,用epoch代表当前命令的有效性,counter是一个递增的数字。
集群在经过leader选举之后还会有连接leader和同步两个步骤,然后保证数据一致性。
3.选举之后怎样进行数据同步
直接差异化同步 DIFF同步
先回滚再差异化同步 TRUNC+DIFF同步
仅回滚同步 TRUNC同步
全量同步 SNAP同步
4.Zookeeper是如何保证数据一致性的
概述
Zookeeper通过ZAB原子广播协议来实现数据的最终顺序一致性,他是一个类似2PC两阶段提交的过程。
由于Zookeeper只有Leader节点可以写入数据,如果是其他节点收到写入数据的请求,则会将之转发给Leader节点。
主要流程
ZAB两种模式
三、CAP定理
1.概述
CAP是一个分布式系统设计的定理,他包含3个部分,并且最多只能同时满足其中两个。
2.Consistency一致性
1.一致性就是指的是数据在不同的节点之间怎样保证一致性。
2.对于纯理论的C而言,默认的规则是忽略掉延迟的,因为如果考虑延迟的话,因为数据同步的过程无论如何都会有延迟的,延迟的过程必然会带来数据的不一致。
3.Availability可用性
1.指的是对于每一个请求,节点总是可以在合理的时间返回合理的响应。
2.比如Zookeeper在进行数据同步时,无法对外提供读写服务,不满足可用性要求。
4.Partition-tolerance分区容错性
在一个分布式系统当中,很有可能由于部分节点的网络问题导致整个集群之间的网络不连通,所以就产生了网络分区,整个集群的环境被分隔成不同的的子网。
5.CA之间取舍
CP舍弃A
如果一个分布式系统不要求强的可用性,即允许系统停机或者长时间无响应的话,就可以在CAP三者中保障CP而舍弃A。
设计成CP的系统比较典型的就是分布式数据库。
如Redis、HBase这种分布式存储系统,如ZooKeeper这种分布式协调系统,数据的一致性是最基本的要求。
AP舍弃C
放弃了数据强一致性,退而求其次保证数据最终一致性。
电商网站的秒杀活动或者12306购票,在高并发情况下可能需要一些排队机制,这就是在可用性和分区容错性方面保证了系统正常服务,然后在数据的一致性方面做了一些让步,会影响一些用户体验,但也不会造成用户流程的严重阻塞,这种机制虽然在瞬间可能存在数据不一致的情况,但过了一段时间还是要保证最终一致性的。