Skip to content

分布式系统 ​

分布式系统面试的重点不是背产品名,而是面对网络分区、节点故障、重复消息和并发写入时,能够说明系统要保证什么、放弃什么,以及故障后如何恢复。

推荐学习顺序 ​

  1. 分布式基础、一致性与复制

    • 部分失败、故障模型、逻辑时钟;
    • Leader-Follower、Multi-Leader、Leaderless;
    • 线性一致性、因果一致性、最终一致性;
    • CAP、PACELC 与 Quorum。
  2. 共识、Raft 与分布式协调

    • 多数派、term、选主和日志复制;
    • Raft 的提交与安全性;
    • 脑裂、租约、分布式锁和 fencing token。
  3. 分片、分布式事务与消息

    • 哈希 / 范围 / 一致性哈希分片;
    • 分布式 ID、2PC、TCC、Saga、Outbox;
    • 幂等、消息投递语义、顺序、重试和缓存一致性。
  4. 游戏服务器分布式架构

    • 网关、玩家 / 房间分片、Actor mailbox;
    • 状态同步、AOI、跨服迁移和热点房间;
    • 背压、ownership epoch、恢复与尾延迟监控。

一个统一的分析框架 ​

遇到分布式设计题时,按以下顺序展开:

  1. 业务不变量:哪些结果绝对不能同时出现,例如同一房间不能有两个写所有者;
  2. 一致性要求:需要线性一致、会话一致,还是最终一致;
  3. 分片单位:玩家、房间、订单或其他实体如何路由;
  4. 故障模型:进程崩溃、网络分区、慢节点和磁盘故障分别如何处理;
  5. 写入成功定义:写入本机、持久化、复制到多数派,还是已产生外部效果;
  6. 重试与幂等:超时后是否可能重复,如何去重;
  7. 顺序与版本:是否需要 sequence、term、epoch 或版本号;
  8. 过载策略:队列是否有界,哪些请求可拒绝、合并或丢弃;
  9. 恢复目标:RPO、RTO 和迁移 / 回放方案;
  10. 可观测性:如何发现热点、积压、脑裂和一致性异常。

高频概念对照 ​

概念解决的问题不自动保证什么
复制冗余、读扩展和故障恢复不自动提供强一致
分片容量和吞吐水平扩展不自动解决热点和跨分片事务
共识对值或日志顺序达成一致不等于业务分布式事务
Quorum用相交集合协调副本仅靠公式不保证线性一致
分布式锁临界区所有权协调TTL 本身不能隔离旧持有者
消息队列解耦、削峰和异步传播不自动保证端到端恰好一次
Saga多个本地事务的补偿流程不提供普通 ACID 回滚和隔离
一致性哈希降低扩缩容数据迁移不解决单个热 key

面试表达原则 ​

  • 先给结论,再说明适用前提和失败场景;
  • 不说“绝对不丢”“天然有序”“完全一致”,除非能给出协议边界;
  • 区分平均情况、最坏情况和分区期间行为;
  • 所有超时重试都追问一次:“原操作可能已经成功吗?”;
  • 所有租约和 Leader 都追问一次:“旧持有者恢复后如何被拒绝?”;
  • 所有消息语义都追问一次:“外部副作用是否也在保证范围内?”

使用 Markdown 与 VitePress 构建