读过概念之后,用一个具体请求或故障验证自己能否讲清。本表按 DDIA 第一版的 12 章编排,与本站章节笔记一致;其他版次的章节编号可能不同。问题由本站整理,用于练习,不代表作者原题或某家公司的面试题库。

系统设计 30 题路线

12 章对照:从概念到可推演的问题

章节需要掌握练习问题应用入口
1. 可靠性、可扩展性、可维护性把宽泛目标转成负载假设与可衡量的服务行为。流量增长 10 倍,哪里先失效?用什么指标判断?容量估算器
2. 数据模型与查询语言根据访问模式、关系与更新边界选择模型。如何建模帖子、关注关系和信息流读取?信息流
3. 存储与检索将索引、写放大与读取成本对应到实际负载。键值存储的主要操作是什么?索引会增加哪些成本?键值存储
4. 编码与演化规划存量数据与新旧软件版本之间的 schema 兼容。生产者增加字段时,怎样避免所有消费者同步发布?Kafka 与事件消费者
5. 复制明确一致性保证,推演复制延迟或主节点切换。用户更新后从哪里读取,才能避免立即看到旧值?键值存储的副本
6. 分区选择分区键、路由请求,并处理倾斜与重平衡。持续读写时,如何迁移热点分片?分片专题
7. 事务把隔离级别对应到业务不变量和具体并发时序。两位用户争抢最后一间房,由哪个操作决定成功者?并发预订演示
8. 分布式系统的麻烦将超时视为结果未知,考虑进程暂停、时钟与局部故障。扣款调用超时后,怎样确认实际是否发生了扣款?支付系统
9. 一致性与共识区分线性一致性、有序与达成共识。故障切换时哪些信息必须达成一致,哪些读取允许陈旧?键值存储的故障切换
10. 批处理通过明确输入与输出来保证大规模计算可重现。如何重建派生视图,又不影响线上请求?爬虫与索引流水线
11. 流处理解释事件时间、重放、状态及处理保证的边界。消费者触发外部副作用后、保存 offset 前崩溃,会发生什么?Kafka 与重放
12. 数据系统的未来连接派生数据、端到端正确性、可审计性与责任边界。哪些记录能证明结账完成?系统间不一致时如何修复?电商结账

按薄弱点选择学习路径

先补正确性

第 7 章 → 第 8 章 → 第 9 章

推演并发预订、未知支付结果和故障切换,先说不变量,再选机制。 打开配套练习 →

补存储与扩展

第 2 章 → 第 3 章 → 第 5 章 → 第 6 章

先选择数据模型和索引,再加入复制与分区,找出热点键和陈旧读取。 打开配套练习 →

补演化与派生数据

第 4 章 → 第 10 章 → 第 11 章 → 第 12 章

修改事件 schema 并重建派生视图,解释重放、迟到事件、外部副作用与审计记录。 打开配套练习 →

示例:支付成功回调晚于库存预留期限

先定规则:假设预留 10 秒到期,只有到期前完成确认才能把预订改成 BOOKED。支付回调可能延迟或重复,过期任务也可能晚运行。

  1. 第 7 章:原子边界。在同一事务中检查预订状态与期限,并完成状态转换和库存变更。重复操作不能再次释放库存。
  2. 第 8 章:未知结果。扣款请求超时不等于失败。先用稳定的支付身份查询或按支付方幂等契约重试,不能直接创建第二笔付款。
  3. 第 11 章:重复与恢复。到期后收到支付成功时,持久化一次退款意图。消费者可以重试,但退款调用使用稳定键;任务入队不等于退款完成。

这个回答把规则、并发和恢复连接起来。若产品选择按支付方扣款时间决定有效性,就需要另一套时钟、证据与补偿规则,不能只把比较符号改掉。

运行预订与支付时序演示 →

每章读完后的三问

  1. 我需要保护什么不变量,允许哪些陈旧或失败?
  2. 能否用两个请求和一次故障,逐步说明状态如何变化?
  3. 选定机制后增加了什么延迟、存储、运维或恢复成本?

查看全部 DDIA 章节笔记 · 检查容量假设

书籍与版本信息:Designing Data-Intensive Applications。本表是本站学习辅助资料,不替代原书。