Skip to content

10. 面试题 ​

本章按初、中、高级整理分布式系统面试题,并给出答题要点。问题尽量贴近 AI Infra 场景。

10.1 初级 ​

1. 什么是分布式系统?它和单机系统最大的区别是什么? ​

答题要点:多台计算机通过网络协作完成任务;核心区别是网络分区、节点故障、消息延迟、时钟不一致、部分失败。

2. CAP 定理是什么?AI Infra 中应该怎么选? ​

答题要点:C/A/P 三者不可兼得,P 必须接受;checkpoint 元数据选 CP,推理缓存选 AP。

3. 什么是主从复制?有什么优缺点? ​

答题要点:Leader 处理写,Follower 复制;优点一致性强,缺点是 Leader 单点瓶颈和故障切换。

4. 一致性哈希解决了什么问题? ​

答题要点:节点增减时只影响相邻数据,减少全量迁移。

5. 什么是幂等?为什么分布式系统里很重要? ​

答题要点:多次执行效果相同;因为网络重试会导致请求重复。

6. 什么是 CRDT?它为什么能不加锁解决写冲突? ​

答题要点:

  • CRDT 是一类并发修改可自动合并的数据结构,把冲突解决从协议层下沉到数据层;
  • 状态型(CvRDT)基于满足交换律、结合律、幂等性的 join 合并,操作型(CmRDT)依赖可靠广播;
  • 例子:G-Counter、OR-Set;生产应用:Figma、Linear、Bluesky;
  • 代价:状态体积大、只支持特定数据类型,强一致场景不适用。

10.2 中级 ​

7. Raft 和 Paxos 有什么区别?为什么 etcd 用 Raft? ​

答题要点:

  • Paxos 理论复杂,难实现;
  • Raft 把共识拆成 leader 选举、日志复制、安全性,更易理解;
  • etcd 需要工程可维护性,因此选 Raft。

8. Raft 领导者选举的基本流程是什么? ​

答题要点:

  • Follower election timeout 后变成 Candidate;
  • 自增 term,给自己投票,向其他节点请求选票;
  • 获得多数票成为 Leader;
  • 发现更高 term 则退回 Follower。

9. Quorum N/W/R 的含义是什么?如何保证读到最新值? ​

答题要点:N 副本数,W 写确认数,R 读副本数;当 W + R > N 时读写有重叠,保证读到最新。

10. 两阶段提交有什么问题?生产环境一般怎么替代? ​

答题要点:协调者单点故障会阻塞参与者;生产常用 Saga、TCC、Spanner/Percolator 模型。

11. 向量时钟和 Lamport 时间戳的区别? ​

答题要点:

  • Lamport 时间戳只能判断 happens-before,无法识别并发;
  • 向量时钟可以判断两个事件是并发还是存在因果;
  • 向量时钟维度随节点数线性增长。

12. Kubernetes 中 etcd 的作用是什么?为什么需要 3 或 5 个节点? ​

答题要点:etcd 保存 K8s 所有状态;Raft 需要多数派存活,3 节点容忍 1 故障,5 节点容忍 2 故障。

13. 分布式训练中 all-reduce 的作用是什么? ​

答题要点:把各 worker 计算的梯度聚合后同步回所有 worker,保证模型副本一致。

14. EPaxos 这类无主导者共识为什么没有取代 Raft? ​

答题要点:

  • EPaxos median 延迟更优(任一副本都可发起提案),但 EPaxos Revisited(NSDI'21)实测写冲突负载下尾延迟比 Multi-Paxos 差 4 倍以上;
  • 长期缺少 snapshot、成员变更、垃圾回收、线性一致读的生产配套;
  • 实现与验证成本高,生态不成熟;
  • 结论:2026 年的生产共识竞争点在工程优化(批处理、流水线、租约读、灵活 Quorum),而非更换协议家族。

10.3 高级 ​

15. 设计一个支持 10 万张 GPU 的分布式训练调度系统,你会怎么保证控制面高可用? ​

答题要点:

  • 控制面用 etcd / Raft,跨 AZ 部署;
  • scheduler 多实例 leader election;
  • apiserver 水平扩展 + 请求限流;
  • 状态分片降低单 etcd 压力;
  • watch 机制做事件驱动而非轮询。

16. 对象存储在跨区域场景下如何保证强一致? ​

答题要点:

  • 写入时同步复制到多数副本再返回;
  • 使用版本号和向量时钟检测冲突;
  • 读时读取多个副本并合并;
  • 或者依赖 Spanner 式的 TrueTime + 2PC。

17. 如何设计一个 LLM 推理服务的多副本 KV Cache 共享方案? ​

答题要点:

  • 副本内张量并行已经共享;
  • 跨副本共享可用外部高速 KV 缓存(如 Redis、RDMA 共享内存);
  • 一致性选择:最终一致 + 请求 sticky;
  • 故障时缓存失效不丢语义,只影响性能。

18. 解释 FLP 不可能性,以及工程上如何绕过它。 ​

答题要点:异步网络中无法确定性共识;工程上用超时、随机化、租约、同步假设绕过。

19. 设计一个分布式锁,需要满足哪些属性? ​

答题要点:互斥、防死锁、防误删、可重入、高可用、可观测。

20. 如果 etcd 集群发生网络分区,K8s 会怎样? ​

答题要点:

  • 少数派分区不可用,避免脑裂;
  • 多数派分区继续服务;
  • apiserver 连到少数派会失败;
  • 分区恢复后,少数派通过 snapshot / 日志追赶。

21. 10 万卡训练集群每小时都有节点故障,如何把 MTTR 压到分钟级? ​

答题要点:

  • 把故障当常态:Llama 3 405B 训练单 run 54 天发生 466 次中断、约 78% 是硬件原因;
  • 多级 checkpoint:GPU/CPU 内存检查点(Gemini,SOSP'24)→ 本地 NVMe → 对象存储,异步 DCP 不阻塞训练;
  • 局部回滚(Oobleck 流水线模板)代替全任务重启;
  • 快速检测:NCCL watchdog + Xid/ECC 硬件遥测预测性隔离,straggler 动态摘除;
  • 弹性成员:worker 动态加入/退出,gang 调度快速补位。

10.4 开放题 ​

22. 你印象深刻的分布式系统失败案例是什么?如果是你,怎么避免? ​

答题要点:可结合真实案例(如某云 K8s etcd 脑裂、某训练任务 NCCL timeout、某对象存储跨区域不一致),从故障域、超时、幂等、可观测性等角度分析。

23. 如何在一致性、可用性、延迟之间为 AI 训练 pipeline 做 trade-off? ​

答题要点:

  • 调度状态强一致;
  • 训练数据缓存最终一致;
  • checkpoint 元数据强一致,数据对象可异步复制;
  • 推理结果缓存低延迟优先;
  • 用版本号和向量时钟处理冲突。

10.5 一句话总结 ​

分布式系统面试的核心,不是背会 Raft 或 CAP,而是能在具体场景中说清楚“为什么这样选、可能出什么问题、出了问题怎么恢复”。

Released under CC-BY-SA-4.0 License.