Zookeeper四种节点类型,90%的人只会说概念

0 阅读5分钟



各位朋友,今天跟大家聊一个社招面试高频题

那天我在咖啡馆里改简历,对面坐着一个哥们,正准备跳槽。他一脸紧张地问我:“小米哥,Zookeeper四种Znode类型到底怎么讲?面试官一问我就脑袋空白……”

我笑了笑,说:别急,今天我们不讲枯燥的概念,我们讲一个故事。

把 ZooKeeper 想象成一栋智能写字楼。而 Znode,就是写字楼里的“房间”。每个房间都有不同的属性:

  • 有的永久存在,有的租期到了就消失;
  • 有的编号自动递增,有的没有编号。

Zookeeper 的四种 Znode,其实就是四种“房间模式”。

先理解一个核心:Znode 是什么?

在 Zookeeper 中,所有数据都是以树结构存储的。像这样:

每一个路径,都是一个 Znode。它:

  • 可以存数据(小量)
  • 可以有子节点
  • 有版本号
  • 有 ACL 权限控制

Znode 不是普通文件系统,它更像一个:分布式协调用的轻量级内存数据库

第一种:PERSISTENT —— 持久节点

1、定义

除非手动删除,否则节点一直存在。

就像写字楼里买下来的房产。只要不主动卖掉,它就一直在那里。

2、特点

3、代码示例

4、写字楼类比

持久节点就像:公司总部的“行政办公室”,不会因为某个员工下班就消失。

5、典型应用场景

  • 存储配置
  • 保存系统结构目录
  • 服务分类目录

例如:

这些结构必须长期存在。

第二种:EPHEMERAL —— 临时节点

这就开始刺激了。

1、定义

生命周期与客户端会话绑定

注意一句话:客户端断开连接 ≠ 会话失效,只有会话超时,才会删除节点。

2、写字楼类比

临时节点就像:“访客临时工位”,人走了,工位就自动回收。

3、特点

4、代码示例

5、为什么它很重要?

因为:服务宕机后,Zookeeper 自动删除节点,这意味着注册中心不需要人工维护。

这就是很多分布式系统选用 Zookeeper 的核心原因之一。

6、举个实际例子

微服务注册:

每个服务实例都是临时节点。如果某个实例挂了:

  • 会话失效
  • 节点自动删除
  • 其他服务感知变化

第三种:PERSISTENT_SEQUENTIAL —— 持久顺序节点

开始进阶了。

1、定义

持久节点 + 自动编号

创建时,Zookeeper 会在节点名后面自动加一个递增数字。例如:

假设当前父节点下序号为 0000000001,最终生成:

2、写字楼类比

持久顺序节点像:排号机打印的永久存档号码,无论谁来领号,都会按顺序发。

3、特点

4、实战场景:分布式任务队列

消费者按顺序取任务。这就是 FIFO 的基础实现。

第四种:EPHEMERAL_SEQUENTIAL —— 临时顺序节点

这是最常考的。也是最牛的。

1、定义

临时节点 + 自动编号

可能生成:

2、写字楼类比

像:排号 + 临时座位

  • 按顺序编号
  • 人走座位自动释放

3、特点

分布式锁为什么用它?

假设:多个客户端竞争锁。

步骤:

  1. 在 /lock 下创建 EPHEMERAL_SEQUENTIAL
  2. 获取当前所有子节点
  3. 判断自己是不是最小编号
  4. 是 → 获得锁
  5. 否 → 监听前一个节点

1、示例代码(简化版)

2、为什么必须是临时的?

如果客户端宕机:

  • 会话失效
  • 节点自动删除
  • 下一个节点自动获得锁

否则会死锁。

四种节点对比总结

面试高频追问

1、临时节点可以有子节点吗?

不可以。因为会话失效会删除节点。Zookeeper 不允许临时节点有子节点。

2、顺序号会回收吗?

不会。父节点维护一个递增计数器。即使删除,也不会重用。

3、客户端断开连接会删除临时节点吗?

不一定。只有:会话超时(session timeout)才会删除。

用一句话记住

  • PERSISTENT:买房
  • EPHEMERAL:租房
  • SEQUENTIAL:排号

组合起来就是:买房排号、租房排号

面试回答模板(建议背下来)

当面试官问:“Zookeeper 有几种 Znode 类型?”

你可以这样回答:

Zookeeper 提供四种 Znode 类型:

PERSISTENT:持久节点,不随会话失效删除

EPHEMERAL:临时节点,会话失效自动删除

PERSISTENT_SEQUENTIAL:持久节点 + 自动顺序编号

EPHEMERAL_SEQUENTIAL:临时节点 + 自动顺序编号

其中:

临时节点常用于服务注册

临时顺序节点常用于分布式锁

持久顺序节点常用于队列

持久节点用于配置存储

END

Zookeeper 的强大,不在于它存数据。而在于:它让分布式系统有“秩序”。

节点类型设计,看似简单,实际上是:

  • 会话机制
  • 顺序保证
  • 自动清理
  • 分布式一致性

这四个能力的组合。

当你理解这四种节点,你就真正理解了:分布式系统如何优雅地管理状态。

如果这篇对你有帮助,记得转发给正在准备社招的朋友。我们下次见。

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!