Java高频面试题- 每日三连问?【Day30】 — ZooKeeper篇(六)

2022-04-12 14:19:51 浏览数 (1)

问题导读

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

二、分布式集群中为什么会有 Master?

三、zookeeper 节点宕机如何处理?

01

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

正经回答:

zookeeper 采用了全局递增的事务 Id 来标识,所有的 proposal(提议)都在被提出的时候加上了 zxid,

zxid 实际上是一个 64 位的数字,高 32 位是 epoch( 时期; 纪元; 世; 新时代)用来标识 leader 周期,

如果有新的leader 产生出来,epoch 会自增。

低 32 位用来递增计数,当新产生 proposal 的时候,会依据数据库的两阶段过程,首先会向其他的 server 发出事务执行请求,

如果超过半数的机器都能执行并且能够成功,那么就会开始执行。

分享朋友圈,每天进步一点点~

02

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

正经回答:

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

03

zookeeper 节点宕机如何处理?

正经回答:

Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。

Zookeeper 自身也要 保证当一个节点宕机时,其他节点会继续提供服务。

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

如果是一个 Leader 宕机,Zookeeper 会选举出新的 Leader。

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

所以

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

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

- End -

0 人点赞