跳到正文

目录

System Design Primer 拆解:27.5 万星的系统设计面试教材,怎么练才有效

System Design Primer 拆解:27.5 万星的系统设计面试教材,怎么练才有效

判断:System Design Primer 真正提供的不是「面试题库」,而是三样东西的组合——一张把负载均衡、缓存、分片、CAP 这些散落概念串起来的地图,一套按官方四步框架展开的带解答例题,再加一组用间隔重复对抗遗忘的 Anki 闪卡。它解决的问题是:系统设计面试没有标准教材,资料散落在博客、论文和各家工程博客里,而面试考察的又恰恰是把这些零散知识组织成一次 45 分钟对话的能力。理解这个定位,才知道该怎么练——直接从头读到尾是效率最低的用法。

适用读者:准备系统设计面试的工程师,以及想借面试压力系统补一遍分布式基础概念的开发者

前置知识:了解数据库、网络、操作系统的基本概念;不需要分布式系统实战经验

目录


项目概览

项目信息
仓库donnemartin/system-design-primer
星标274,986
分叉46,224
主语言Python(题解示例代码;主体内容是 Markdown)
许可证CC BY 4.0(GitHub 因 LICENSE.txt 非标准格式显示为 Other)
最近推送2026-03-20
数据快照2026-09-11,取自 GitHub API

作者 Donne Martin 是前 Facebook 工程师,仓库创建于 2017 年 2 月,至今仍不定期有维护提交(最近一次在 2026 年 3 月)。这是 GitHub 上星标数排名最靠前的一批仓库之一,也是系统设计主题下的事实标准入门材料。


仓库里到底有什么:三层内容

读这个仓库之前,先分清它的三层内容——混在一起读是低效的根源:

内容位置用法
概念索引20+ 个系统设计主题条目,每个讲权衡(trade-offs)与替代方案主 README「Index of system design topics」当参考书查,不必顺序通读
带解答的题8 道系统设计题 + 6 道面向对象设计题,按四步框架展开,6 道附 Python 代码solutions/ 目录动手练,先自己写再看解答
记忆工具3 套 Anki 闪卡 + 粗略估算速查表(2 的幂、延迟数字)resources/flash_cards/、附录通勤和碎片时间复习

三层之外还有两个容易被忽略的宝藏:附录里的 Real world architectures(按技术组件归类的架构资料,MapReduce、Cassandra、Kafka 这类)和 Company architectures(按公司归类,Twitter、Netflix、Pinterest 等),再往下还有 Company engineering blogs(各公司工程博客清单)。准备某家公司的面试时,直接去这几个清单里找对应公司的材料,比泛读概念有效得多。


概念索引:从性能与可扩展性到通信协议

概念索引是仓库的正文主体,覆盖以下主题(每个主题都按「它解决什么问题 → 有哪些方案 → 各方案的缺点」组织,多数附架构图):

  • 基础权衡:性能 vs 可扩展性、延迟 vs 吞吐、可用性 vs 一致性(CAP 定理)、一致性模式(弱/最终/强)、可用性模式(fail-over、主从/主主复制、几个 9 的数字账)
  • 基础设施组件:DNS、CDN(push 与 pull 两种)、负载均衡(四层与七层)、反向代理
  • 应用与数据层:应用层与微服务、服务发现;关系型数据库的复制、联邦(federation)、分片(sharding)、反规范化、SQL 调优;NoSQL 四类(键值、文档、宽列、图数据库)与 SQL/NoSQL 选型
  • 缓存与异步:缓存的五个层次、四种更新策略(cache-aside、write-through、write-behind、refresh-ahead);消息队列、任务队列与背压(back pressure)
  • 通信:HTTP、TCP 与 UDP、RPC 与 REST 的对比
  • 安全:授权、认证等基础话题

附录部分是面试现场直接能用的速查材料:2 的幂表(一个估算字节量的速算工具)、每个程序员该知道的延迟数字、以及上面提到的真实架构与工程博客清单。

一个阅读建议:这个索引的价值在权衡分析,不在结论。比如负载均衡一节真正要带走的是「四层负载均衡看 IP 和端口、开销小;七层看应用内容、能做更智能的路由但更贵」,而不是「要用负载均衡」这句话。面试里能讲清权衡的候选人,远多于只会报组件名的。


带解答的面试题:8 道系统设计与 6 道面向对象设计

solutions/ 目录收录了 14 道带完整解答的题目,全部遵循同一套官方四步框架:

  1. Outline use cases, constraints, and assumptions——圈定需求范围,列出约束与假设
  2. Create a high level design——画出高层架构
  3. Design core components——逐个用例细化核心组件
  4. Scale the design——扩展设计,处理瓶颈

框架之外还有一节 Back-of-the-envelope calculations(粗略估算):用 2 的幂表和延迟数字快速算出存储量、QPS,这类估算在真实面试里经常是分水岭。

8 道系统设计题(每道都有独立题解文档和架构图):

题目题解位置附带代码
设计 Pastebin.com(或 Bit.ly)solutions/system_design/pastebin/pastebin.py
设计 Twitter 时间线与搜索(或 Facebook 信息流与搜索)solutions/system_design/twitter/
设计一个 Web 爬虫solutions/system_design/web_crawler/MapReduce 版爬虫
设计 Mint.comsolutions/system_design/mint/MapReduce 聚合
设计社交网络的数据结构solutions/system_design/social_graph/数据结构片段
设计搜索引擎的键值存储solutions/system_design/query_cache/查询缓存片段
设计 Amazon 的品类销量排行solutions/system_design/sales_rank/MapReduce 排行
设计扩展到百万用户的 AWS 系统solutions/system_design/scaling_aws/—(按步骤展开的架构演进课)

注意题解的两点事实:6 道附带可运行的 Python 示例代码,「这个仓库不涉及代码实现」的说法并不成立——爬虫的 MapReduce 实现、社交网络的图结构都写到了代码层面;Twitter 题解没有代码,它的价值在于那张从单机到分片的演进架构图。

6 道面向对象设计题(作者标注此节 under development):设计哈希表、设计 LRU 缓存、设计呼叫中心、设计一副牌、设计停车场、设计聊天服务器。每道题都有 Jupyter Notebook 形式的代码解答(solutions/object_oriented_design/)。OOD 面试在国内大厂出现频率低于系统设计,但在北美面试和初级岗位中常见。

23 道附录练习题:主 README 末尾的「Additional system design interview questions」列了约 23 道无完整解答、只配外部参考链接的题目——设计 Dropbox 式文件同步、设计 Google 文档、设计 WhatsApp 聊天应用、设计短链接服务(TinyURL)、设计 API 限流器、设计股票交易所等。这些题适合自测:能独立讲出方案再去看参考链接对答案。


任务流案例:走一遍 Pastebin 题

拿最经典的 Pastebin 题(设计一个类似 Pastebin.com 或 Bit.ly 的文本粘贴/短链接服务)演示这四步框架怎么用。

Step 1,圈定用例和约束。题解先砍需求:纳入「输入一段文本、得到随机生成的链接」「输入链接查看原文」「统计页面访问量」「删除过期粘贴」几个用例,把用户注册登录、编辑文档、自定义短链划到范围外;然后做粗略估算——假设每月 1000 万次写入、读写比 10:1,按单条粘贴 1.27 KB 算出每月新增 12.7 GB、三年约 450 GB,平均 4 次写/秒、40 次读/秒。这套「砍范围 + 算数字」的开场在真实面试里同样适用:面试官给一道模糊的题,第一件事就是问清边界。

Step 2,画高层设计。客户端 → 负载均衡 → Web 服务器 → 数据库的最小闭环,一张图讲清数据怎么流动。

Step 3,逐个用例细化。核心分歧点在存储选型:题解用关系数据库当一张大哈希表(短链 → 粘贴路径),同时讨论了换 S3 对象存储或 NoSQL 键值存储的权衡;写入路径由 Write API 生成 7 字符短码、查库查重、冲突就重新生成;数据层给出 pastes 表结构——shortlink 主键保证唯一性,created_at 记录创建时间,过期粘贴靠扫描早于当前时间的记录来删除。配套的 pastebin.py 是一个 mrjob 练习骨架(mrjob 是 Python 的 MapReduce 库):按月统计每个短链的访问量,mapper 和 reducer 留白给读者补全。

Step 4,扩展。题解先立了一条规矩——不要从初始设计直接跳到最终答案,正确姿势是压测 → profile 找瓶颈 → 针对性解决 → 循环。落到本题:加内存缓存接住热门内容的读流量,只读副本兜底缓存未命中;每月 12.7 GB 的写入量单库就能应付,真不够再按联邦、分片、反规范化、SQL 调优的顺序上手段。

Additional talking points 收尾:NoSQL 选型理由、缓存策略、异步与微服务、通信方式、安全和延迟数字——这一节把题解和前面的概念索引交叉链接起来,正好是复习的锚点。

这个流程走完大约需要一两个小时。走三到四道题之后,四步框架会内化成条件反射,这也是本仓库最值得投入时间的部分。


Anki 闪卡与电子书

resources/flash_cards/ 下有 3 个 Anki 牌组(.apkg 文件):

  • System Design.apkg——核心概念复习
  • System Design Exercises.apkg——面试解题思维训练
  • OO Design.apkg——面向对象设计专项

姊妹仓库 donnemartin/interactive-coding-challenges(算法面试主题)里还有第 4 个 Coding.apkg,两个仓库共用同一套闪卡体系。

Anki 的原理是间隔重复(spaced repetition):在快遗忘的时间点安排复习,用最少的时间维持记忆。系统设计概念适合这种方式的原因很实际——CAP、一致性哈希这类知识点零散、平时不常用、又要求面试时脱口而出。把闪卡放在通勤路上刷,把大块时间留给做题,是这套材料设计者预期的分工。

仓库根目录还提供 generate-epub.sh,可以把主文档打包成 EPUB 电子书,偏好阅读器场景的用户可以自己生成。


翻译与阅读方式

翻译的真实状态(据 TRANSLATIONS.md,2026-09-11 快照):

  • 已合入主仓库:3 种——日语(README-ja.md)、简体中文(README-zh-Hans.md)、繁体中文(README-zh-TW.md
  • 进行中:韩语、俄语,维护者正在翻译
  • 停滞等待新维护者:阿拉伯语、法语、德语、西班牙语等 14 种

网上流传的「支持 15+ 语言」指的是这个清单的历史累计,实际合入主干的只有上面 3 种。对中文读者有个好消息:不只是主文档,pastebin/twitter/ 等题解目录里也附带 README-zh-Hans.md 中文版,可以整条链路用中文读完。

三种打开方式:

# 方式一:本地克隆后用编辑器或浏览器阅读
git clone https://github.com/donnemartin/system-design-primer.git
cd system-design-primer

方式二:直接在 GitHub 网页上读 README.md,遇到感兴趣的题点进 solutions/ 对应目录。

方式三:在 Anki 中导入 resources/flash_cards/ 下的 .apkg 文件,用碎片时间刷卡。

建议中英对照读:中文翻译偶有滞后,概念术语(consistency、partition tolerance 这类)最终都要能听懂英文原词,面试和后续读论文都用得上。


按备考时间线制定学习计划

仓库官方的 Study guide 不按「初级/中级/高级」分读者,而是按备考时间给三档建议——这更符合实际情况,因为决定覆盖面的变量是剩余时间,不是职级:

任务短时间线中时间线长时间线
通读 System design topics,建立整体认知
读目标公司的工程博客(Company engineering blogs 清单)
浏览真实架构案例(Real world architectures 清单)
复习四步解题框架
练习带解答的系统设计题练几道练多道练大部分
练习 OOD 题练几道练多道练大部分
过一遍附录练习题清单部分多数全部

短时间线求广度,中时间线求广度加一定深度,长时间线求广度加更深深度。

官方对「要不要全学完」的回答值得记下:不需要。面试考什么取决于你的经验年限、技术背景、目标岗位和运气;经验越丰富,面试官的期望越高,架构师岗比初级岗要讲得更深。正确姿势是在各主题都有一层基础认知后,挑几个领域扎下去。

把它落到周计划上(以每天 1-2 小时、约 4 周备考为例):第 1 周通读概念索引建立地图 + 开始每天刷 Anki;第 2-3 周按四步框架练习题解,先自己写再对照,重点吃透 Pastebin、Twitter、Web 爬虫三道覆盖面最广的题;第 4 周做附录题自测 + 找人对练口头表达。


自测题

  1. 这个仓库的三层内容分别是什么?各自该怎么用?
  2. 官方四步解题框架是哪四步?为什么第一步是圈定用例和约束而不是画架构图?
  3. 负载均衡、缓存、分片在大规模系统中各自解决什么问题?
  4. 缓存的四种更新策略(cache-aside、write-through、write-behind、refresh-ahead)的核心区别是什么?
  5. 只剩两周备考,官方 Study guide 建议你怎么取舍?
参考答案

题 1:概念索引(当参考书查权衡分析)、带解答的题目(动手练四步框架)、记忆工具(Anki 闪卡与附录速查表)。混在一起顺序通读效率最低。

题 2:圈定用例、约束和假设 → 高层设计 → 细化核心组件 → 扩展设计。第一步先做是因为真实面试的题目是模糊的,不先砍范围和算数字,后面的设计就没有依据,也容易在细节里耗光时间。

题 3:负载均衡解决流量分发和单点故障;缓存解决读压力(减少对数据库的直接访问);分片解决单库的写容量和存储上限。

题 4:区别在「谁来维护缓存与数据库的一致性、接受什么程度的过期」。cache-aside 由应用先读缓存、未命中再查库回填;write-through 同步写缓存和数据库;write-behind 先写缓存、异步批量落库(快但可能丢数据);refresh-ahead 预测性地提前刷新即将过期的数据。

题 5:短时间线求广度——通读概念索引、读目标公司工程博客、复习四步框架、练几道带解答的题,Anki 闪卡用碎片时间维持概念记忆;不在单一主题上扎太深。


练习

练习一:限时模拟 Pastebin 题

  1. 先读题解前 30 行,只记住题目要求,不要往下看
  2. 计时 45 分钟,按四步框架独立写出自己的方案(白板或纸笔,模拟真实条件)
  3. 对照 solutions/system_design/pastebin/README.md 找差距:范围砍得是否果断、估算是否做了、瓶颈分析是否有依据
  4. 把差距记下来,隔三天再做一遍同一道题

练习二:用附录练习题做盲测

  1. 从「Additional system design interview questions」清单里挑一道没见过的题(比如设计 API 限流器)
  2. 限时 45 分钟独立设计
  3. 完成后再读题目配的参考链接,对照修正
  4. 能讲清方案再换下一道;讲不清,回到概念索引补对应主题

练习三:建立并跑通 Anki 复习循环

  1. 安装 Anki,导入 resources/flash_cards/ 下三个 .apkg 牌组
  2. 连续两周每天刷完每日额度(通常 10-20 分钟)
  3. 第两周结束时检查:哪些卡片反复忘——那是你概念索引里没读懂的部分,回头精读对应小节

常见问题

Q:只读这个仓库够应对面试吗?

不够。它给的是知识框架和练习材料,但系统设计面试考口头表达和互动推进,这两样只能靠对练。找朋友互相出题、或用 Exponent(原名 Pramp,后改名)这类模拟面试平台练口述,是读文档替代不了的环节。

Q:需要多少准备时间?

取决于备考时间线和基础。全职在职的状态下,按每天 1-2 小时算,4 周可以把概念索引过一遍、吃透三到四道带解答的题;时间充裕的话按上面 Study guide 的中/长时间线扩展覆盖面。

Q:需要 Python 基础吗?

概念部分不需要任何编程语言知识。题解里的示例代码用 Python 写(如 pastebin.py、爬虫的 MapReduce 实现),读懂它们需要基本的 Python 阅读能力,但跳过代码不影响概念学习和四步框架练习。

Q:内容会不会过时?

概念层(CAP、缓存策略、分片这些)十年内都不会过时,这也是它能积累 27 万星的原因。真实架构清单里的部分链接较旧,个别案例(如 Twitter 的某些架构细节)反映的是当年的系统,读的时候当作「这类问题的一个已知解法」,而不是当前生产环境的现状。


适用边界与采用顺序

适合立即开始用的人

  • 4-12 周内有系统设计面试的工程师——按 Study guide 时间线执行,重心放在做题
  • 转岗后端/架构方向的开发者——概念索引是比论文和专著平缓得多的第一级台阶

可以缓一缓的人

  • 已经能独立设计百万用户级系统的资深工程师——它的概念部分对你太浅,直接翻附录的架构清单和工程博客清单更有价值

不适合的场景

  • 想要「代码级」学习分布式系统实现——题解代码是示意性的 Python 片段,不是可上生产的实现;要跑代码应该去 MIT 6.824 这类课程
  • 想要最新的大模型时代系统设计(LLM 网关、向量数据库架构)——仓库对这些新主题基本没有覆盖

采用顺序建议:第 1 天克隆仓库、导入 Anki、通读概念索引的前五个主题;第 1 周内限时做第一道题(推荐 Pastebin,覆盖面最广);之后按备考时间线推进,把附录的架构清单和工程博客清单留到面试前两周针对性阅读。


总结与延伸阅读

System Design Primer 用 27 万颗星证明了一件事:系统设计面试准备缺的不是资料,而是一条把概念、例题、记忆工具组织起来的路径。它的四步框架、6 份带代码的题解和按时间线分档的 Study guide,是目前这条路径上最完整的开源实现。剩下的部分——口头表达的流畅、估算的手感、权衡的直觉——只能靠你自己一道题一道题练出来。

延伸阅读


版本与生态数据截至 2026-09-11:Stars、Forks、最近推送取自 GitHub API;翻译状态出自仓库 TRANSLATIONS.md;题解清单、Anki 牌组、Study guide 口径出自主 README 原文;题解代码清单逐一核对自 solutions/ 目录。查最新星标与推送看仓库主页,翻译进展看 TRANSLATIONS.md

参与讨论

使用 GitHub 登录。欢迎补充事实、异议与实践。