zookeeper面试题总结
2022-02-16 11:30:30 28 举报
AI智能生成
全网最全zookeeper总结学习资料 含面试题
作者其他创作
大纲/内容
运行原理
核心原理
ZAB协议
是什么?
机制保证了各个Server之间的同步
Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性。
能做什么?
恢复模式(选主)
广播模式(同步)
原则
Zab协议要求每个 Leader 都要经历三个阶段:发现,同步,广播。
运行原理是什么?
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式
当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。
状态同步保证了leader和Server具有相同的系统状态。
如何做到分布式一致性?
递增的事务id号(zxid)来标识事务
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。
所有的提议(proposal)都在被提出的时候加 上了zxid。
实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一 个新的epoch,标识当前属于那个leader的统治时期。
低32位用于递增计数。
epoch
可以理解为皇帝的年号,当新的皇帝leader产生后,将有一个新的epoch年号。
Server的三种状态
LOOKING
当前server不知道谁是leader,正在搜寻
LEADING
当前server即为选举出来的leader
FOLLOWING
leader已经选举出来,当前server与之同步
zookeeper为什么要这么设计?
zookeeper的目标是什么?
提供高性能、高可用、顺序一致性的分布式协调服务,保证数据最终一致性
高性能
简单的数据模型
采用树形结组织数据节点
缺点
所以zk不能存储大量的数据,没法分布式存储
每个节点最大为1M
全量数据节点,都存储在内存中
Follower和Observer直接处理非事务请求
高可用
构建集群
默认采用了Quorums这种方式选举,过半可用
默认采用了Quorums这种方式来防止"脑裂"现象。
Zookeeper的写也遵循quorum机制
epoch最大的就是新leader,处理脑裂问题
顺序一致性
每个事务请求,都会转发给leader处理,会分配全局唯一的事务递增id(zxid:64位: epoch _+ 自增id)
通过提议投票方式
保证事务提交的可靠性提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据
Zookeeper中的角色有哪些?
系统模型
领导者leader
leader提供读服务和写服务
leader负责进行投票的发起和决议
更新系统状态
跟随者follower
follower服务器为客户提供读服务
参与leader选举过程
参与写操作“过半写成功”策略
观察者observer
observer服务器为客户提供读服务
不参与选举过程
不参与写操作“过半写成功”策略
目的
用于在不影响写性能的前提下提升集群的读性能
学习者learner
进行follower、observer和leader服务器的数据同步
事务性会话请求的转发和proposal提议投票等功能
客户端client
服务请求发起方
Zookeeper节点ZNode和相关属性有哪些?
Znode节点类型有哪些?
持久的(persistent)
客户端和服务器端断开连接后,创建的节点不删除(默认)。
短暂的(ephemeral)
客户端和服务器端断开连接后,创建的节点自己删除。
Znode有四种形式
持久化目录节点(PERSISTENT)
客户端与Zookeeper断开连接后,该节点依旧存在持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)
临时目录节点(EPHEMERAL)
客户端与Zookeeper断开连接后,该节点被删除
临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)
客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号「注意」:创建ZNode时设置顺序标识,ZNode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。
持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)
客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号:
常见问题?
为什么zk集群节点数要求为奇数?
节省资源
3个节点(3/2=1.5),即最少2个几点,容忍1个几点宕机
4个节点(4/2=2),即最少3个几点,容忍1个节点宕机
集群1与集群2都有 允许1个节点宕机 的容错能力,但是集群2比集群1多了1个节点。在相同容错能力的情况下,本着节约资源的原则,zookeeper集群的节点数维持奇数个更好一些。
防止脑裂
默认采用了Quorums(法定人数)这种方式来防止"脑裂"现象。
epoch(年号)最大的就是新leader,处理脑裂问题
先比较zxid,再比较myid,谁最大谁是leader
节点奇数,过半选主,过半成功
zk不适应的场景
zk是cp模型
zookeeper 的 CP 模型不适合注册中心
服务发现场景没有必要做强一致性
zk的不可用导致服务注册发现有问题
如何避免
客户端本地缓存一份服务列表
zookeeper 的性能不适合注册中心
在大规模服务集群场景中,zookeeper 的性能也是瓶颈。
zookeeper 所有的写操作都是 leader 处理的,在大规模服务注册写请求时,压力巨大,而且 leader 是单点,无法水平扩展。
还有所有服务于 zookeeper 的长连接也是很重的负担。
zookeeper 对每一个写请求,都会写一个事务日志,同时会定期将内存数据镜像dump到磁盘,保持数据一致性和持久性。这个动作会降低性能,而且对于注册中心来讲,是不需要的。
总结
其实,这并不算是 zookeeper 的问题,是人家本来就不适合做注册中心,非要用他的话,肯定一堆问题。
zookeeper 的特长是做分布式协调服务,例如 kafka、hbase、flink、hadoop 等大项目都在用 zookeeper,用的挺好的,因为是用对了地方。
例如可以看下:kafka 中 zookeeper 具体是做什么的?
例如可以看下:kafka 中 zookeeper 具体是做什么的?
高频面试题
服务注册发现技术对比 -高频面试必知必会系列
是什么
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务
是Google的Chubby一个开源的实现(Chubby是不开源的),它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。
最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户 。
能做什么
服务注册中心
最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心,服务生产者将自己提供的服务注册到Zookeeper中心,服务的消费者在进行服务调用的时候先到Zookeeper中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据
命名服务
配置中心
分布式锁
术语
Subtopic
Subtopic
架构
ZooKeeper分为服务器端(Server) 和客户端(Client),客户端可以连接到整个 ZooKeeper服务的任意服务器上(除非 leaderServes 参数被显式设置, leader 不允许接受客户端连接)
客户端使用并维护一个 TCP 连接,通过这个连接发送请求、接受响应、获取观察的事件以及发送心跳。如果这个 TCP 连接中断,客户端将自动尝试连接到另外的 ZooKeeper服务器。客户端第一次连接到 ZooKeeper服务时,接受这个连接的 ZooKeeper服务器会为这个客户端建立一个会话。当这个客户端连接到另外的服务器时,这个会话会被新的服务器重新建立。
上图中每一个Server代表一个安装Zookeeper服务的机器,即是整个提供Zookeeper服务的集群(或者是由伪集群组成)
组成ZooKeeper服务的服务器必须彼此了解。它们维护一个内存中的状态图像,以及持久存储中的事务日志和快照, 只要大多数服务器可用,ZooKeeper服务就可用
ZooKeeper 启动时,将从实例中选举一个 leader,Leader 负责处理数据更新等操作,一个更新操作成功的标志是当且仅当大多数Server在内存中成功修改数据。每个Server 在内存中存储了一份数据
Zookeeper是可以集群复制的,集群间通过Zab协议(Zookeeper Atomic Broadcast)来保持数据的一致性;
Zab协议包含两个阶段:leader election阶段和Atomic Brodcast阶段。
leader election
集群中将选举出一个leader,其他的机器则称为follower,所有的写操作都被传送给leader,并通过brodcast将所有的更新告诉给follower。
当leader崩溃或者leader失去大多数的follower时,需要重新选举出一个新的leader,让所有的服务器都恢复到一个正确的状态
当leader被选举出来,且大多数服务器完成了 和leader的状态同步后,leadder election 的过程就结束了,就将会进入到Atomic brodcast的过程。
Atomic Brodcast同步leader和follower之间的信息,保证leader和follower具有形同的系统状态
收藏
0 条评论
下一页