内容简介 · · · · · ·
系统设计面试被认为是所有技术面试中难度最大的面试,因为面试题的范围都非常广且模糊,其答案也是开放的,不存在标准答案或正确答案。本书是专门为准备系统设计面试的读者而撰写的,重点讨论了分布式系统中的常用组件和大型Web 应用的系统架构,涵盖了几类常见的典型应用,包括聊天系统、视频流系统、文件存储系统(云盘)、支付系统等,旨在帮助读者掌握构建一个可扩展的系统所需的基础知识,为面试做好充分准备。
作为过来人,作者提出了应对面试题的“四步法”,即确定问题范围→总体设计→细节设计→总结,书中的案例基本上都是按照这个步骤进行解析的。这种独特的呈现方式,直接针对面试者在面试过程中可能遇到的问题,帮助他们厘清思路,有条不紊地作答。
通过本书,读者可以了解不同Web 应用的系统设计方案的要点及采用的技术,据此查漏补缺,补齐自己知识体系中的短板,为面试成功增添更多的可能。...
系统设计面试被认为是所有技术面试中难度最大的面试,因为面试题的范围都非常广且模糊,其答案也是开放的,不存在标准答案或正确答案。本书是专门为准备系统设计面试的读者而撰写的,重点讨论了分布式系统中的常用组件和大型Web 应用的系统架构,涵盖了几类常见的典型应用,包括聊天系统、视频流系统、文件存储系统(云盘)、支付系统等,旨在帮助读者掌握构建一个可扩展的系统所需的基础知识,为面试做好充分准备。
作为过来人,作者提出了应对面试题的“四步法”,即确定问题范围→总体设计→细节设计→总结,书中的案例基本上都是按照这个步骤进行解析的。这种独特的呈现方式,直接针对面试者在面试过程中可能遇到的问题,帮助他们厘清思路,有条不紊地作答。
通过本书,读者可以了解不同Web 应用的系统设计方案的要点及采用的技术,据此查漏补缺,补齐自己知识体系中的短板,为面试成功增添更多的可能。而对于已经是架构师的读者而言,书中的案例将为他们提供新的思路和灵感,有助于他们在面试中更加从容地展现自己的设计思路和实践经验。
作者简介 · · · · · ·
Alex Xu,卡耐基梅隆大学硕士,他是一位经验丰富的软件工程师,也是一个创业者。他曾在Twitter、苹果和Zynga等公司工作。他热衷于设计和实现复杂的系统。
译者简介
徐江,毕业于瑞典皇家理工学院的系统生物学专业,曾就职于Thoughtworks软件技术有限公司,现在在宝洁公司担任IT service manager,负责consumer relations。
目录 · · · · · ·
1.1 单服务器配置 1
1.2 数据库 3
1.2.1 使用何种数据库 4
1.3 纵向扩展 vs. 横向扩展 5
1.4 负载均衡器 5
· · · · · · (更多)
1.1 单服务器配置 1
1.2 数据库 3
1.2.1 使用何种数据库 4
1.3 纵向扩展 vs. 横向扩展 5
1.4 负载均衡器 5
1.5 数据库复制 7
1.6 缓存 10
1.6.1 缓存层 10
1.6.2 使用缓存时的注意事项 11
1.7 内容分发网络 12
1.7.1 使用CDN时的注意事项 14
1.8 无状态网络层 15
1.8.1 有状态架构 15
1.8.2 无状态架构 16
1.9 数据中心 18
1.10 消息队列 20
1.11 记录日志、收集指标与自动化 21
1.11.1 添加消息队列和各种工具 21
1.12 数据库扩展 23
1.12.1 纵向扩展 23
1.12.2 横向扩展 23
1.13 用户量达到甚至超过了100万 27
2 封底估算 28
2.1 2的幂 28
2.2 每个程序员都应该知道的操作耗时 29
2.3 可用性相关的数字 31
2.4 案例:估算推特的QPS和存储需求 31
2.5 小技巧 32
3 系统设计面试的框架 33
3.1 有效的系统设计面试的四个步骤 34
3.1.1 第一步:理解问题并确定设计的边界 34
3.1.2 第二步:提议高层级的设计并获得认同 36
3.1.3 第三步:设计继续深入 38
3.1.4 第四步:总结 41
3.2 面试中每一步的时间分配 43
4 设计限流器 44
4.1 第一步:理解问题并确定设计的边界 45
4.2 第二步:提议高层级的设计并获得认同 46
4.2.1 在哪里实现限流器 46
4.2.2 流量限制算法 48
4.2.3 高层级架构 56
4.3 第三步:设计继续深入 57
4.3.1 流量限制规则 57
4.3.2 超过流量的限制 58
4.3.3 详细设计 58
4.3.4 分布式系统中的限流器 59
4.3.5 性能优化 61
4.3.6 监控 62
4.4 第四步:总结 63
5 设计一致性哈希系统 64
5.1 重新哈希的问题 64
5.2 一致性哈希 66
5.2.1 哈希空间和哈希环 66
5.2.2 哈希服务器 67
5.2.3 哈希键 68
5.2.4 查找服务器 68
5.2.5 添加服务器 69
5.2.6 移除服务器 70
5.2.7 两个问题 71
5.2.8 虚拟节点 73
5.2.9 找到受影响的键 74
5.3 总结 76
6 设计键值存储系统 77
6.1 理解问题并确定设计的边界 78
6.2 单服务器的键值存储 78
6.3 分布式键值存储 79
6.3.1 CAP理论 79
6.3.2 系统组件 81
6.3.3 数据分区 82
6.3.4 数据复制 83
6.3.5 一致性 84
6.3.6 不一致性的解决方案:版本控制 86
6.3.7 处理故障 89
6.3.8 系统架构图 94
6.3.9 写路径 96
6.3.10 读路径 97
6.4 总结 98
7 设计分布式系统中的唯一ID生成器 100
7.1 第一步:理解问题并确定设计的边界 101
7.2 第二步:提议高层级的设计并获得认同 101
7.2.1 多主复制 102
7.2.2 UUID 102
7.2.3 工单服务器 103
7.2.4 推特的雪花系统 104
7.3 第三步:设计继续深入 105
7.4 第四步:总结 106
8 设计URL缩短器 108
8.1 第一步:理解问题并确定设计的边界 108
8.1.1 封底估算 109
8.2 第二步:提出高层级的设计并获得认同 109
8.2.1 API端点 109
8.2.2 URL重定向 110
8.2.3 缩短URL 112
8.3 第三步:设计继续深入 112
8.3.1 数据模型 112
8.3.2 哈希函数 113
8.3.3 深入探讨URL缩短流程 116
8.3.4 深入探讨URL重定向流程 117
8.4 第四步:总结 118
9 设计网络爬虫 119
9.1 第一步:理解问题并确定设计的边界 121
9.2 第二步:提议高层级的设计并获得认同 122
9.3 第三步:设计继续深入 127
9.3.1 DFS vs. BFS 128
9.3.2 URL前线 129
9.3.3 HTML下载器 134
9.3.4 健壮性 135
9.3.5 可扩展性 136
9.3.6 检测和避免有问题的内容 137
9.4 第四步:总结 137
10 设计通知系统 139
10.1 第一步:理解问题并确定设计的边界 140
10.2 第二步:提议高层级的设计并获得认同 140
10.2.1 不同类型的通知 141
10.2.2 联系信息的收集流程 143
10.2.3 通知的发送与接收流程 144
10.3 第三步:设计继续深入 148
10.3.1 可靠性 148
10.3.2 其他组件和要考虑的因素 149
10.3.3 更新后的设计 151
10.4 第四步:总结 152
11 设计news feed系统 153
11.1 第一步:理解问题并确定设计的边界 154
11.2 第二步:提议高层级的设计并获得认同 154
11.2.1 news feed API 155
11.2.2 feed的发布 155
11.2.3 news feed的构建 156
11.3 第三步:设计继续深入 157
11.3.1 深入探讨feed的发布流程 158
11.3.2 深入探讨news feed的获取流程 161
11.3.3 缓存架构 162
11.4 第四步:总结 163
12 设计聊天系统 165
12.1 第一步:理解问题并确定设计的边界 165
12.2 第二步:提议高层级的设计并获得认同 167
12.2.1 轮询 168
12.2.2 长轮询 169
12.2.3 WebSocket 170
12.2.4 高层级设计 171
12.2.5 数据模型 175
12.3 第三步:设计继续深入 177
12.3.1 服务发现 177
12.3.2 消息流 178
12.3.3 显示在线状态 182
12.4 第四步:总结 185
13 设计搜索自动补全系统 187
13.1 第一步:理解问题并确定设计的边界 188
13.1.1 封底估算 189
13.2 第二步:提议高层级的设计并获得认同 189
13.2.1 数据收集服务 190
13.2.2 查询服务 190
13.3 第三步:设计继续深入 191
13.3.1 字典树数据结构 192
13.3.2 数据收集服务 197
13.3.3 查询服务 200
13.3.4 字典树操作 202
13.3.5 扩展存储 204
13.4 第四步:总结 205
14 设计视频分享系统 207
14.1 第一步:理解问题并确定设计的边界 208
14.1.1 封底估算 209
14.2 第二步:提议高层级的设计并获得认同 210
14.2.1 视频上传流程 211
14.2.2 视频流式传输流程 216
14.3 第三步:设计继续深入 217
14.3.1 视频转码 217
14.3.2 有向无环图模型 217
14.3.3 视频转码架构 219
14.3.4 系统优化 225
14.3.5 错误处理 230
14.4 第四步:总结 231
15 设计云盘 232
15.1 第一步:理解问题并确定设计的边界 233
15.1.1 封底估算 235
15.2 第二步:提议高层级的设计并获得认同 235
15.2.1 API 236
15.2.2 跳出单服务器设计 237
15.2.3 同步冲突 240
15.2.4 高层级设计 241
15.3 第三步:设计继续深入 243
15.3.1 块服务器 243
15.3.2 高一致性需求 245
15.3.3 元数据数据库 245
15.3.4 上传流程 246
15.3.5 下载流程 247
15.3.6 通知服务 249
15.3.7 节约存储空间 249
15.3.8 故障处理 250
15.4 第四步:总结 251
16 设计支付系统 253
16.1 第一步:理解问题并确定设计的边界 254
16.2 第二步:提议高层级的设计并获得认同 256
16.2.1 收款流程 256
16.2.2 复式记账系统(Double-Entry System) 258
16.2.3 托管支付页面 259
16.2.4 付款流程 265
16.2.5 实时卖家仪表板 265
16.3 第三步:设计继续深入 266
16.3.1 重试和幂等 267
16.3.2 同步支付 vs. 异步支付 271
16.3.3 一致性 276
16.3.4 处理支付失败 282
16.3.5 支付安全 284
16.4 第四步:总结 285
17 设计指标监控和告警系统 287
17.1 第一步:理解问题并确定设计的边界 287
17.1.1 高层级需求 288
17.2 第二步:提议高层级的设计并获得认同 289
17.2.1 基本原理 290
17.2.2 数据模型 290
17.2.3 高层级设计 293
17.3 第三步:设计继续深入 294
17.3.1 指标数据的收集 295
17.3.2 扩展系统 300
17.3.3 查询服务 303
17.3.4 存储层 304
17.3.5 告警系统 307
17.3.6 可视化系统 309
17.4 第四步:总结 310
18 继续学习 311
后记 313
· · · · · · (收起)
喜欢读"搞定系统设计:面试敲开大厂的门"的人也喜欢的电子书 · · · · · ·
喜欢读"搞定系统设计:面试敲开大厂的门"的人也喜欢 · · · · · ·
搞定系统设计:面试敲开大厂的门的书评 · · · · · · ( 全部 5 条 )
System Design Interview
这篇书评可能有关键情节透露
The books I read about my industry normally could be grouped into three: 1) theory heavy, e.g Introduction to Algorithms, 2) practice heavy, e.g C Programming language, and 3) the books in between, e.g this one. System Design Interview is about how to desig... (展开)真正要敲开大厂的大门这一本书是不太够的
这篇书评可能有关键情节透露
真正要敲开大厂的大门这一本书是不太够的 但并不是否定这本书的价值 这世界上的道路,这世界上的道理都是摆在那里的,有的人看得见看得清楚,鞭辟入里,庖丁解牛,有人整理梳理当然是好事一桩,功德一件。 门门道道都是套路,但是这并不是门门道道的错误,也不是什么好处和坏处... (展开)构建一个 Key-Value 存储系统需要考虑的技术问题
Some notes to clarify concepts
> 更多书评 5篇
论坛 · · · · · ·
在这本书的论坛里发言这本书的其他版本 · · · · · · ( 全部3 )
-
Independently published (2020)8.2分 205人读过
-
以下书单推荐 · · · · · · ( 全部 )
- 计算机高分书籍 (港岛小叔子)
- 我买的计算机书 (吴上阿吉)
- 书单|系统设计 (xingjigongsi)
- 工作相关书单~ (it's me)
- Jimmy书单|科技/AI/互联网 (Jimmy)
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有299人想读,手里有一本闲着?
订阅关于搞定系统设计:面试敲开大厂的门的评论:
feed: rss 2.0
0 有用 第二人生 2024-09-03 22:27:49 北京
对于工作3-5年的业务开发来说,还是挺丰富知识面的。不过很多章节的系统设计很像课程设计,很全面,但是线上不会这么设计。anyway 外企考察的点和互联网真不一样呀,但是比八股文还是有意思多了
0 有用 杨小帆 2024-07-13 15:45:25 浙江
两个小时读完,个人感觉写的还是蛮不错的。技术方案设计很重要的一点,就是经验的总结和积累,书的内容比较全面,常见的系统设计场景和技术方向基本都有涉及,可以当作项目方案设计初期,用以提供基础思路的参考读物。每个项目的参考资料给的也不错,能够进一步纵向深挖项目的具体实现细节,适合拓展基础的技术视野。
0 有用 Honwhy 2024-04-26 23:27:49 广东
希望这次能够好好读读,啃下来
0 有用 黑客悟理 2024-01-29 08:20:26 北京
虽然有些地方不够深入,但是主要内容清晰易懂,涵盖的场景也很全面,配有丰富的设计图,值得一看。
0 有用 杨逸 2024-03-31 21:52:53 上海
还是不错的,思路很可以借鉴了。确定需求,量化的思路,常规的拆分哪些组件,然后是业务流程相关的关键,再结合一些类似监控这种非功能需求。
0 有用 安然入睡 2024-11-09 09:18:07 上海
主要是提供一些系统设计的思路,还是蛮好的
0 有用 灵魂摆烂 2024-10-30 12:35:11 广东
依托答辩
0 有用 xingjigongsi 2024-10-25 15:28:00 北京
可以看一下,还是比较简单的
0 有用 null 2024-10-16 10:23:53 北京
总体来说值得一看 优:因为很多设计思想是相通的,所以能受到了系统架构方面一些启发,对自己之前工作是个查漏补缺,同时对不熟悉的系统的设计原理有个大概的理解; 缺:有点隔靴搔痒,是一个纲领性的东西如果想深入了解还得就每一个系统单独的研究
0 有用 飞翔的蘑菇🍄 2024-10-11 23:47:33 北京
只是包含了基础的系统设计,但是没有包含更多的算法部分