Java架构师之面试题

简介: ZooKeeper

11. Chroot 特性

3.2.0 版本后,添加了 Chroot 特性,该特性允许每个客户端为自己设置一个命名 空间。如果一个客户端设置了 Chroot,那么该客户端对服务器的任何操作,都将 会被限制在其自己的命名空间下。 通过设置 Chroot,能够将一个客户端应用于 Zookeeper 服务端的一颗子树相对 应,在那些多个应用公用一个 Zookeeper 进群的场景下,对实现不同应用间的相 互隔离非常有帮助。

12. 会话管理

分桶策略:将类似的会话放在同一区块中进行管理,以便于 Zookeeper 对会话进 行不同区块的隔离处理以及同一区块的统一处理。 分配原则:每个会话的“下次超时时间点”(ExpirationTime) 计算公式: ExpirationTime_ = currentTime + sessionTimeoutExpirationTime = (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 有哪几种几种部署模式?

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

相关文章
|
5月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
536 8
|
6月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
6月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
7月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
1317 0
|
7月前
|
机器学习/深度学习 人工智能 Java
Java 技术支撑下 AI 与 ML 技术融合的架构设计与落地案例分析
摘要: Java与AI/ML技术的融合为智能化应用提供了强大支持。通过选用Deeplearning4j、DJL等框架解决技术适配问题,并结合Spring生态和JVM优化提升性能。在金融风控、智能制造、医疗影像等领域实现了显著效果,如审批效率提升3倍、设备停机减少41%、医疗诊断延迟降低80%。这种技术融合推动了多行业的智能化升级,展现了广阔的应用前景。
531 0
|
7月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
348 7
|
8月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
363 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
8月前
|
缓存 Java 关系型数据库
Java 面试经验总结与最新 BAT 面试资料整理含核心考点的 Java 面试经验及最新 BAT 面试资料
本文汇总了Java面试经验与BAT等大厂常见面试考点,涵盖心态准备、简历优化、面试技巧及Java基础、多线程、JVM、数据库、框架等核心技术点,并附实际代码示例,助力高效备战Java面试。
309 0