donnemartin /system-design-primer
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
★ 377,510⑂ 59,254👁 6,899⑃ 752● 416▤ 0◈ 0
377,510
stars
+121
59,254
forks
6,899
watchers
752
prs
416
issues
0
releases
0
discussions
README
原文地址:github.com/donnemartin/system-design-primer
译文出自:掘金翻译计划
译者:XatMassacrE、L9m、Airmacho、xiaoyusilen、jifaxu、根号三
这个 链接 用来查看本翻译与英文版是否有差别(如果你没有看到 README.md 发生变化,那就意味着这份翻译文档是最新的)。
English ∙ 日本語 ∙ 简体中文 ∙ 繁體中文 | العَرَبِيَّة ∙ বাংলা ∙ Português do Brasil ∙ Deutsch ∙ ελληνικά ∙ עברית ∙ Italiano ∙ 한국어 ∙ فارسی ∙ Polski ∙ русский язык ∙ Español ∙ ภาษาไทย ∙ Türkçe ∙ tiếng Việt ∙ Français | Add Translation
系统设计入门
目的
学习如何设计大型系统。
为系统设计的面试做准备。
学习如何设计大型系统
学习如何设计可扩展的系统将会有助于你成为一个更好的工程师。
系统设计是一个很宽泛的话题。在互联网上,关于系统设计原则的资源也是多如牛毛。
这个仓库就是这些资源的组织收集,它可以帮助你学习如何构建可扩展的系统。
从开源社区学习
这是一个不断更新的开源项目的初期的版本。
欢迎贡献!
为系统设计的面试做准备
在很多科技公司中,除了代码面试,系统设计也是技术面试过程中的一个必要环节。
实践常见的系统设计面试题并且把你的答案和例子的解答进行对照:讨论,代码和图表。
面试准备的其他主题:
学习指引
如何处理一个系统设计的面试题
系统设计的面试题,含解答
面向对象设计的面试题,含解答
其它的系统设计面试题
抽认卡
这里提供的抽认卡堆使用间隔重复的方法,帮助你记忆关键的系统设计概念。
系统设计的卡堆
系统设计的练习卡堆
面向对象设计的练习卡堆
随时随地都可使用。
代码资源:互动式编程挑战
你正在寻找资源以准备编程面试吗?
请查看我们的姐妹仓库互动式编程挑战,其中包含了一个额外的抽认卡堆:
代码卡堆
贡献
从社区中学习。
欢迎提交 PR 提供帮助:
修复错误
完善章节
添加章节
帮助翻译
一些还需要完善的内容放在了正在完善中。
请查看贡献指南。
系统设计主题的索引
各种系统设计主题的摘要,包括优点和缺点。每一个主题都面临着取舍和权衡。
每个章节都包含着更多的资源的链接。
系统设计主题:从这里开始
第一步:回顾可扩展性的视频讲座
第二步:回顾可扩展性的文章
接下来的步骤
性能与拓展性
延迟与吞吐量
可用性与一致性
CAP 理论
CP - 一致性和分区容错性
AP - 可用性和分区容错性
一致模式
弱一致性
最终一致性
强一致性
可用模式
故障切换
复制
域名系统
CDN
CDN 推送
CDN 拉取
负载均衡器
工作到备用切换(Active-passive)
双工作切换(Active-active)
四层负载均衡
七层负载均衡
水平扩展
反向代理(web 服务器)
负载均衡与反向代理
应用层
微服务
服务发现
数据库
关系型数据库管理系统(RDBMS)
Master-slave 复制集
Master-master 复制集
联合
分片
非规范化
SQL 调优
NoSQL
Key-value 存储
文档存储
宽列存储
图数据库
SQL 还是 NoSQL
缓存
客户端缓存
CDN 缓存
Web 服务器缓存
数据库缓存
应用缓存
数据库查询级别的缓存
对象级别的缓存
何时更新缓存
缓存模式
直写模式
回写模式
刷新
异步
消息队列
任务队列
背压机制
通讯
传输控制协议(TCP)
用户数据报协议(UDP)
远程控制调用协议(RPC)
表述性状态转移(REST)
安全
附录
2 的次方表
每个程序员都应该知道的延迟数
其它的系统设计面试题
真实架构
公司的系统架构
公司工程博客
正在完善中
致谢
联系方式
许可
学习指引
基于你面试的时间线(短、中、长)去复习那些推荐的主题。
!Imgur
问:对于面试来说,我需要知道这里的所有知识点吗?
答:不,如果只是为了准备面试的话,你并不需要知道所有的知识点。
在一场面试中你会被问到什么取决于下面这些因素:
你的经验
你的技术背景
你面试的职位
你面试的公司
运气
那些有经验的候选人通常会被期望了解更多的系统设计的知识。架构师或者团队负责人则会被期望了解更多除了个人贡献之外的知识。顶级的科技公司通常也会有一次或者更多的系统设计面试。
面试会很宽泛的展开并在几个领域深入。这会帮助你了解一些关于系统设计的不同的主题。基于你的时间线,经验,面试的职位和面试的公司对下面的指导做出适当的调整。
短期 - 以系统设计主题的广度为目标。通过解决一些面试题来练习。
中期 - 以系统设计主题的广度和初级深度为目标。通过解决很多面试题来练习。
长期 - 以系统设计主题的广度和高级深度为目标。通过解决大部分面试题来练习。
| | 短期 | 中期 | 长期 |
| ---------------------------------------- | ---- | ---- | ---- |
| 阅读 系统设计主题 以获得一个关于系统如何工作的宽泛的认识 | :+1: | :+1: | :+1: |
| 阅读一些你要面试的公司工程博客的文章 | :+1: | :+1: | :+1: |
| 阅读 真实架构 | :+1: | :+1: | :+1: |
| 复习 如何处理一个系统设计面试题 | :+1: | :+1: | :+1: |
| 完成 系统设计的面试题和解答 | 一些 | 很多 | 大部分 |
| 完成 面向对象设计的面试题和解答 Top issues
#40Brazilian Portuguese translation54 comments · 2017-03-27#136Spanish translation54 comments · 2018-02-22#28Request for Translations53 comments · 2017-03-21#39Turkish translation30 comments · 2017-03-27#170Arabic translation26 comments · 2018-07-14#127Vietnamese Translation 27 comments · 2018-01-20#250French translation26 comments · 2019-02-07#4PDF Download26 comments · 2017-03-09
News & coverage (11)
Hacker NewsLearn how to design large-scale systems▲ 1,273 · 185 comments · 2018-07-13Hacker NewsSystem Design Primer: Learn how to design large-scale systems▲ 170 · 29 comments · 2021-12-28Hacker NewsGitHub – system-design-primer: Learn how to design large-scale systems▲ 112 · 20 comments · 2023-10-29Hacker NewsAsk HN: AI Architecture Systems Design▲ 1 · 0 comments · 2026-09-01Hacker NewsAsk HN: What are the best resources to crack system design interviews?▲ 1 · 0 comments · 2021-06-08Hacker NewsAsk HN: Architecture Diagrams for GitHub Readme.md?▲ 1 · 5 comments · 2019-05-09Hostinger15 Most Popular GitHub Repos for Developers in 20262026-09-18KDnuggets10 GitHub Repositories to Master System Design2026-03-05KDnuggets10 GitHub Repositories to Master Computer Science2024-04-04analyticsindiamag.com7 Github Repositories to Crack Tech Interviews in 20252022-04-29