etcd 与分布式键值

共 19 题
#

1. etcd 的 Raft 一致性协议与 MVCC 多版本

A 客户端每次修改键都会覆盖旧值,不保留历史版本
B MVCC 通过全局递增的 revision 保留键的历史版本 ✓ 正确答案
C Raft 中所有节点都能直接接收写请求并各自提交
D MVCC 与 Watch 无关,Watch 不使用 revision
#

2. etcd 的分布式锁(txn + lease)实现

A 加锁通过 txn 原子比较与写入,配合 lease 实现崩溃自动释放 ✓ 正确答案
B txn 只做写入,不做任何比较,无法判断是否已加锁
C 续期通过反复删除重建锁 key 实现
D 锁不需要 lease,客户端崩溃后锁永久持有
#

3. etcd 与 ZooKeeper 的性能与适用场景差异

A etcd 的 Watch 是一次性事件,需手动重注册
B ZooKeeper 使用 gRPC 接口,支持前缀监听
C etcd 使用 gRPC 接口,支持流式 Watch 与 MVCC ✓ 正确答案
D 两者都使用 Raft 协议
#

4. etcd 的 MVCC 版本管理(key revision/mod_revision)与业务层乐观并发控制

A mod_revision 表示键被修改的次数,与全局无关
B MVCC 不保留历史版本,无法读取旧数据
C 通过 txn 的 Compare(mod_revision) 实现版本判断与写入的原子 CAS ✓ 正确答案
D version 字段是全局递增的 revision
#

5. etcd 的 Raft 实现,MVCC、Watch 机制与租约(Lease)如何设计?

A Watch 不依赖 revision,采用全量拉取
B MVCC 的 revision 与 Raft 提交、Watch 推送、Lease 过期都关联 ✓ 正确答案
C Raft 负责存储数据,MVCC 负责日志复制
D Lease 过期时直接删除键但不触发 Watch
#

6. etcd 在 Kubernetes 中作为元数据存储的角色

A etcd 存储 K8s 所有 API 对象,通过 watch 支持控制器协调 ✓ 正确答案
B etcd 只存储 Pod 日志,不存储集群状态
C K8s 的 API Server 不依赖 etcd,可独立运行
D etcd 在 K8s 中仅用于节点调度
#

7. etcd 的 lease(租约)与 key 自动过期机制

A lease 创建后无需续期,TTL 永远有效
B lease 到期后,etcd 会自动删除所有关联到该 lease 的 key ✓ 正确答案
C 撤销 lease 不会删除关联的 key
D 一个 key 只能绑定一个 lease,且不随 lease 过期
#

8. etcd 的 watch 流式监听与前缀监听

A watch 是一次性通知,收到后需重新注册
B 前缀监听只能监听单个键,不能监听一组键
C watch 不支持长连接,只能短连接轮询
D 支持前缀监听和从指定 revision 续传,可避免丢事件 ✓ 正确答案
#

9. etcd 的 compact 与历史版本清理

A compact 删除指定 revision 之前的旧历史版本,但不会立即释放磁盘空间 ✓ 正确答案
B compact 会删除所有数据,包括最新版本
C compact 后 Watch 可以从任意旧的 revision 续传
D compact 后磁盘空间立即释放,无需 defrag
#

10. etcd 的租约与 KeepAlive,分布式锁与领导选举如何依赖租约续期?

A 客户端续期失败后仍可假设锁已在自己手里
B lease 只要创建一次就永久有效,无需续期
C KeepAlive 与 lease 无关,KeepAlive 只用于网络保活
D 客户端停止续期后,lease 到期会删除锁定 key,自动释放 Leader 身份 ✓ 正确答案
#

11. etcd 的存储配额(quota)与告警(alarm)、碎片整理(defrag)的运维

A defrag 可以就地整理,无需 compact 配合
B compact 会直接释放物理磁盘空间,无需 defrag
C quota 只影响读,不影响写
D 达到 quota 后 etcd 触发 NOSPACE 告警并拒绝写入 ✓ 正确答案
#

12. etcd 的 TLS 客户端认证与集群成员变更(learner)流程

A learner 成员参与投票,但被排除在选举之外
B 成员变更无需 Raft 共识,直接生效
C learner 成员永远不会成为正式成员
D learner 成员只同步数据不参与投票,数据追平后再提升为正式成员 ✓ 正确答案
#

13. etcd 的 watch 与 MVCC,历史版本保留与压缩(compact)的工程配置如何?

A compact 越频繁越好,不影响任何客户端
B compact 删除的 revision 之后,客户端从该 revision 续传会报 Compacted 错误 ✓ 正确答案
C 客户端无需记录 revision,可任意续传
D 历史版本保留与 compact 无关,不会相互影响
#

14. etcd 的 gRPC 接口与 Java 客户端(jetcd)

A jetcd 只能同步调用,不支持异步
B etcd 的 Watch 通过短连接一次性拉取
C etcd 用 gRPC+protobuf 提供 KV、Watch、Lease 等接口 ✓ 正确答案
D jetcd 无法进行租约(Lease)管理
#

15. etcd vs ZooKeeper,一致性模型、接口(gRPC vs ZK API)与运维差异如何?

A 两者都使用 gRPC 接口和树形数据模型
B etcd 的监控指标不如 ZK 丰富
C etcd 用 gRPC 接口,Watch 支持流式;ZK 用自定义协议,Watch 一次性 ✓ 正确答案
D ZK 部署比 etcd 更简单,更适合容器化
#

16. etcd 的集群运维,快照备份、成员变更与数据恢复(灾备)如何?

A 快照无法用于从故障恢复
B 通过 snapshot 生成一致性快照,定期备份并异地存储以实现灾备 ✓ 正确答案
C 恢复只需重启,无需依赖快照
D 成员变更不需要快照,直接删除即可
#

17. etcd 的存储引擎,boltdb/bbolt 的 B+tree 与 WAL 的持久化如何?

A etcd 使用纯内存存储,不落盘
B etcd 使用 bbolt 的 B+tree 存储,配合 WAL 保证持久性 ✓ 正确答案
C WAL 在崩溃后无用,无法恢复数据
D bbolt 不支持范围查询,无法支撑前缀监听
#

18. etcd 的线性一致读,ReadIndex/LeaseRead 的实现差异如何?

A LeaseRead 需要向多数节点确认后才读,延迟高
B ReadIndex 直接本地读,无需确认,性能高
C LeaseRead 依赖时钟同步,在租约内直接本地读,性能更高 ✓ 正确答案
D 线性一致读不保证读到最新已提交数据
#

19. etcd 在分布式任务调度选主中的租约(lease)与 watch 组合

A lease 提供崩溃自动让位,watch 实时感知主节点变化并触发重新竞选 ✓ 正确答案
B 主节点失效后,其他节点无法感知,只能等待超时
C lease 只用于键过期,与选主无关
D watch 负责维持 lease,无需客户端续期