Stars★ 376.4k
Forks⑂ 59.1k
主语言Python
分类学习资源
作者donnemartin
LicenseCC-BY-4.0

预览

详细介绍

System Design Primer 是由前 Facebook 技术主管 Donne Martin 发起并持续维护的开源系统设计学习指南,核心定位是“一张带方法和真题的系统设计学习地图——它不生产新知识,而是把散落在互联网各处的系统设计资源,整理成一条从核心概念到面试实战的可执行路径”。它不满足于做一份零散的链接合集或又一篇口径不一的 CAP 博客,而是将1800+ 行核心 README、8 道带完整题解的系统设计真题、6 道面向对象设计题解、3 套 Anki 间隔重复闪卡、短/中/长三种时间跨度的学习指南整合于一套结构化的开源课程体系中,全部配有多语言社区翻译、Jupyter Notebook 交互式题解,以及 CC BY 4.0 开源许可。截至 2026 年,项目累计获得约 35.8 万–37.5 万 GitHub Stars,长期位居 GitHub 全站 Star 榜前列。

一、System Design Primer 是什么

System Design Primer 采用“阅读 → 记忆 → 实战”三层递进的学习架构,通过 GitHub 完全开源发布,采用 CC BY 4.0(Creative Commons Attribution 4.0 International)许可协议——这意味着任何人都可以自由引用、修改和翻译,只需保留署名。项目由 Donne Martin 于 2017 年创建,作者本人是前 Facebook 技术主管,同时还维护着 interactive-coding-challenges 等知名学习仓库。

它的运作机制与市面上绝大多数“系统设计课程”或“八股文合集”有本质区别。项目 README 开篇就承认了一个事实:系统设计资源“a vast number of resources scattered throughout the web”——多,而且散。同一个缓存方案,三篇文章给出三种“最佳实践”;同一个分片策略,两个来源互相矛盾。System Design Primer 的解法不是“再写一套自己的观点”,而是把知识点标准化为可比较的条目:DNS、CDN、负载均衡、缓存、复制、分片、消息队列、RPC,每个主题固定三件套——是什么、代价是什么(Disadvantage(s))、去哪里深读。README 索引页的那句话是全书的纲:“Everything is a trade-off.”

二、System Design Primer 能做什么

核心能力可以精炼地概括为:纲、记、练、估、译,围绕这五大维度提供了从概念理解到面试交付的完整路径。

“代价目录”——把散落的知识编成可比较的框架(纲) ——不是“再堆一套链接”,而是“每个知识点都自带代价栏”。缓存一节列出 cache-aside、write-through、write-behind、refresh-ahead 四种写入模式,每种后面都跟着自己的缺点;数据库的复制、联邦、分片,也都“明码标价”。面试官很少让你背 Sharding 的定义,他们问的是“你为什么选它,放弃了什么”——在这份目录里,你记下的每个词条都直接对齐这个评分方式。

三套 Anki 间隔重复闪卡(记) ——不是“看一遍就忘”,而是“用间隔重复把关键概念刻进长期记忆”。项目提供 System Design、System Design Exercises 等三套 Anki 闪卡,利用间隔重复算法帮助学习者保留核心系统设计概念。短、中、长三种学习路径对闪卡的使用深度也不同——短期只用 System Design 一套,中期加上 Exercises,长期三套全部覆盖。

8 道系统设计真题 + 6 道 OOD 题解(练) ——不是“只看不练”,而是“对着完整题解模仿答题结构”。8 道系统设计题覆盖 Pastebin/URL 短链、Twitter 时间线、Web 爬虫、社交图谱、键值存储、Amazon 销售排名、AWS 百万用户扩展等高频场景;6 道面向对象设计题覆盖 哈希表、LRU 缓存、呼叫中心、卡牌、停车场、聊天服务器,每道题都配有 Python 示例代码、架构图和逐段讨论。题解本身是“四步法”的示范:先列用例、约束和假设;再画高层设计;然后深入核心组件;最后针对瓶颈做扩展。

Back-of-the-envelope 估算与延迟数字(估) ——不是“画完图就结束”,而是“动笔之前先算账”。项目附带了 2 的幂次表和“每个程序员都该知道的延迟数字”,题解中演示了如何从用户量、写入频率、读写比和单条记录大小推导存储需求。这种“先估算再设计”的习惯,是系统设计面试中区分“背答案”和“真会设计”的关键。

多语言社区翻译(译) ——不是“只有英文能看”,而是“母语理解概念,英文跟进深度”。README 提供简体中文、繁体中文、日语、韩语、波斯语、波兰语、俄语等多语言版本,其中简体中文和繁体中文翻译已合并至主分支。概念解释可以读母语版本,但每个主题深挖的外部链接仍以英文为主,这是使用时需要留意的边界。

三、System Design Primer 适合谁用

正在准备系统设计面试的工程师——收到面试通知后,面对“十篇口径不一的 CAP 博客、三个互相矛盾的 Sharding 方案、一排付费课程”,不知道该信谁、先学哪个。这个仓库提供了一条有明确优先级的路径:先按时间线选短/中/长指南,再用“代价目录”建立可比较的概念框架,最后对着 8 道真题模仿四步法答题。

从“会写代码”走向“会设计系统”的中级开发者——算法可以刷 LeetCode 验证对错,但系统设计没有“运行一下就知道对不对”的反馈。这个仓库用标准化条目和完整题解,为“开放式设计题”提供了一套可模仿、可练习的结构。

技术团队负责人与架构师——需要一份“快速对齐团队认知”的材料。项目的“每个知识点带代价栏”的结构,天然适合作为团队内部技术讨论的共享词汇表——讨论缓存策略时,大家说的是 cache-aside 还是 write-behind,代价分别是什么,而不是各说各话。

非英语母语的系统设计学习者——希望用母语理解概念、降低入门门槛。多语言 README 让概念理解不再被语言卡住,英文深度链接则保留了向一线工程博客延伸的通道。

希望“先建立地图再深入”的自学者——不满足于在碎片化博客中随机游走,希望有一份“先看全貌、再按需深挖”的路线图。短/中/长三种学习指南正是为不同时间预算的自学者设计的。

四、System Design Primer 的应用场景是什么

系统设计面试冲刺场景(1–4 周) ——时间紧迫,目标是广度。按 Short Timeline 走:过一遍核心主题、用 System Design 一套 Anki 卡巩固概念、做部分面试题、浏览目标公司的工程博客。重点不是深挖每一个组件,而是建立“听到一道题知道从哪几个维度拆”的框架感。

系统设计系统化学习场景(1–3 个月) ——目标是广度 + 一定深度。按 Medium Timeline 走:覆盖全部主题、用两套 Anki 卡(System Design + Exercises)、做更多面试题、阅读多家公司的工程博客和多个真实架构案例。这个节奏适合不急着面试、希望真正建立系统设计能力的工程师。

长期架构能力建设场景(3 个月以上) ——目标是全面深度。按 Long Timeline 走:三套 Anki 卡全部覆盖、大量阅读公司工程博客、研究多个真实架构案例。适合把系统设计作为长期职业能力而非一次性面试准备的开发者。

“四步法”答题框架训练场景 ——把 8 道题解当作“标准答案的结构”来拆解:第一题 Pastebin 先算 1000 万用户、月写入 1000 万次、读写比 10:1、每条 1KB 的账;第二题画一屏放得下的高层图;第四题在瓶颈处长出 CDN、负载均衡、缓存层和读写分离。反复对照“扩展是在瓶颈处加部件,不是把架构图画复杂”这个原则,训练自己的答题肌肉记忆。

团队技术讨论的共享词汇表场景 ——把“代价目录”作为团队内部技术评审的参考框架。讨论“要不要加缓存”时,不是凭直觉说“加了会快”,而是对照 cache-aside 和 write-behind 的代价栏,明确讨论“我们愿意接受什么、放弃什么”。

五、System Design Primer 为什么值得关注

从“信息过载”到“可比较框架”的认知升维。系统设计学习的第一道坎不是知识太少,而是信谁。同一个缓存方案三种“最佳实践”,你缺的不是更多文章,而是一个能比较的框架。System Design Primer 把每个知识点标准化为“是什么 / 代价是什么 / 去哪里深读”三件套,让“选型”从“凭感觉”变成“对照代价栏做判断”。这种“把散件重新排成一条可执行路径”的能力,是它区别于所有系统设计博客和课程最核心的价值。

从“背定义”到“说取舍”的面试对齐。面试官很少考“Sharding 的定义”,他们问的是“你为什么选它,放弃了什么”。这个仓库的每一条目都自带代价栏,它的题解也示范了“先算账再画图、在瓶颈处加部件”的思考方式。学完这份材料,你带进面试的不是一堆可背诵的定义,而是一套可解释的取舍逻辑。

35 万+ Stars 的社区验证——事实上的标准教材。项目累计约 35.8 万–37.5 万 Stars,长期位居 GitHub 全站 Star 榜前列。日文技术博客评价它“作为系统设计领域的学习资源,是事实上的标准教材”。这种量级的社区认可,意味着它已经成为一代工程师准备系统设计面试的“默认入口”。

“只整理、不生产”的诚实定位。项目没有假装自己是“系统设计的唯一真理”,它承认资源散乱,然后做了一件极其务实的事:把散件排成一条路径。这种“索引者”而非“布道者”的定位,让它的内容不容易过时——具体中间件的版本会变,但“每个知识点问代价”的框架不会。

CC BY 4.0——引用、修改、翻译都合法的开放底座。CC BY 4.0 允许在保留署名的前提下自由引用、修改和翻译,这正是多语言社区翻译得以合法推进的基础。对于想把材料用于内部培训、课程讲义或翻译版本的团队来说,这是一个清晰、低摩擦的许可边界。