• 20240301-2-ZooKeeper面试题(二)


    image-20240228202738121

    11. Chroot 特性

    3.2.0 版本后,添加了 Chroot 特性,该特性允许每个客户端为自己设置一个命名空间。如果一个客户端设置了 Chroot,那么该客户端对服务器的任何操作,都将会被限制在其自己的命名空间下。

    通过设置 Chroot,能够将一个客户端应用于 Zookeeper 服务端的一颗子树相对应,在那些多个应用公用一个 Zookeeper 进群的场景下,对实现不同应用间的相互隔离非常有帮助。

    12. 会话管理

    分桶策略:将类似的会话放在同一区块中进行管理,以便于 Zookeeper 对会话进行不同区块的隔离处理以及同一区块的统一处理。

    分配原则:每个会话的“下次超时时间点”(ExpirationTime)

    计算公式

    ExpirationTime_ = currentTime + sessionTimeout

    ExpirationTime = (ExpirationTime_ / ExpirationInrerval + 1) *

    ExpirationInterval , ExpirationInterval 是指 Zookeeper 会话超时检查时间间隔,默认 tickTime

    13. 服务器角色

    Leader

    1、事务请求的唯一调度和处理者,保证集群事务处理的顺序性

    2、集群内部各服务的调度者

    Follower

    1、处理客户端的非事务请求,转发事务请求给 Leader 服务器

    2、参与事务请求 Proposal 的投票

    3、参与 Leader 选举投票

    Observer

    1、3.0 版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础上提升集群的非事务处理能力

    2、处理客户端的非事务请求,转发事务请求给 Leader 服务器

    3、不参与任何形式的投票

    14. Zookeeper 下 Server 工作状态

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

    1、LOOKING:寻找 Leader 状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态。

    2、FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。

    3、LEADING:领导者状态。表明当前服务器角色是 Leader。

    4、OBSERVING:观察者状态。表明当前服务器角色是 Observer。

    15. 数据同步

    整个集群完成 Leader 选举之后,Learner(Follower 和 Observer 的统称)回向Leader 服务器进行注册。当 Learner 服务器想 Leader 服务器完成注册后,进入数据同步环节。

    数据同步流程:(均以消息传递的方式进行)

    Learner 向 Learder 注册

    数据同步

    同步确认

    Zookeeper 的数据同步通常分为四类

    1、直接差异化同步(DIFF 同步)

    2、先回滚再差异化同步(TRUNC+DIFF 同步)

    3、仅回滚同步(TRUNC 同步)

    4、全量同步(SNAP 同步)

    在进行数据同步前,Leader 服务器会完成数据同步初始化:

    peerLastZxid:

    从 learner 服务器注册时发送的 ACKEPOCH 消息中提取 lastZxid(该Learner 服务器最后处理的 ZXID)

    minCommittedLog:

    Leader 服务器 Proposal 缓存队列 committedLog 中最小 ZXID

    maxCommittedLog:

    Leader 服务器 Proposal 缓存队列 committedLog 中最大 ZXID

    直接差异化同步(DIFF 同步)

    场景:peerLastZxid 介于 minCommittedLog 和 maxCommittedLog之间

    先回滚再差异化同步(TRUNC+DIFF 同步)

    场景:当新的 Leader 服务器发现某个 Learner 服务器包含了一条自己没有的事务记录,那么就需要让该 Learner 服务器进行事务回滚–回滚到 Leader服务器上存在的,同时也是最接近于 peerLastZxid 的 ZXID

    仅回滚同步(TRUNC 同步)

    场景:peerLastZxid 大于 maxCommittedLog

    全量同步(SNAP 同步)

    场景一:peerLastZxid 小于 minCommittedLog

    场景二:Leader 服务器上没有 Proposal 缓存队列且 peerLastZxid 不等于 lastProcessZxid

    16. zookeeper 是如何保证事务的顺序一致性的?

    zookeeper 采用了全局递增的事务 Id 来标识,所有的 proposal(提议)都在被提出的时候加上了 zxid,zxid 实际上是一个 64 位的数字,高 32 位是 epoch(时期; 纪元; 世; 新时代)用来标识 leader 周期,如果有新的 leader 产生出来,epoch会自增,低 32 位用来递增计数。当新产生 proposal 的时候,会依据数据库的两阶段过程,首先会向其他的 server 发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就会开始执行。

    17. 分布式集群中为什么会有 Master?

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

    18. zk 节点宕机如何处理?

    Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。Zookeeper 自身也要保证当一个节点宕机时,其他节点会继续提供服务。

    如果是一个 Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上的数据是有多个副本的,数据并不会丢失;

    如果是一个 Leader 宕机,Zookeeper 会选举出新的 Leader。ZK 集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在 ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。所以3 个节点的 cluster 可以挂掉 1 个节点(leader 可以得到 2 票>1.5)

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

    19. zookeeper 负载均衡和 nginx 负载均衡区别

    zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件;但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式。

    20. Zookeeper 有哪几种几种部署模式?

    部署模式:单机模式、伪集群模式、集群模式。

  • 相关阅读:
    【MySQL】逻辑架构
    Jetpack Compose 和 SwiftUI 与 Flutter 的比较
    第三节:分支及多人协作
    “全光”时代的宠儿——400G光模块
    为什么消费返利模式层出不穷?这个消费返利玩法值得你借鉴
    linux 系统调用流程分析
    网络TCP/IP
    【Docker】搭建MySQL主从复制,详细的图文展示
    国内BI工具五巨头有哪些?各自有哪些擅长的?
    Java架构师理解SaaS和多租户
  • 原文地址:https://blog.csdn.net/qq_24428851/article/details/136406325