搞定系統設計:面試敲開大廠的門

搞定系統設計:面試敲開大廠的門

《搞定系統設計:面試敲開大廠的門》是電子工業出版社出版圖書,作者【美】Alex Xu,譯者徐江

基本介紹

  • 中文名搞定系統設計:面試敲開大廠的門
  • 作者:【美】Alex Xu
  • 譯者:徐江
  • 出版時間:2023年11月
  • 出版社:電子工業出版社
  • 頁數:328 頁
  • ISBN9787121465499
  • 定價:109 元
  • 開本:16 開
內容簡介,圖書目錄,作者簡介,

內容簡介

系統設計面試被認為是所有技術面試中難度最大的面試,因為面試題的範圍都非常廣且模糊,其答案也是開放的,不存在標準答案或正確答案。本書是專門為準備系統設計面試的讀者而撰寫的,重點討論了分散式系統中的常用組件和大型Web 套用的系統架構,涵蓋了幾類常見的典型套用,包括聊天系統、視頻流系統、檔案存儲系統(雲盤)、支付系統等,旨在幫助讀者掌握構建一個可擴展的系統所需的基礎知識,為面試做好充分準備。
作為過來人,作者提出了應對面試題的“四步法”,即確定問題範圍→總體設計→細節設計→總結,書中的案例基本上都是按照這個步驟進行解析的。這種獨特的呈現方式,直接針對面試者在面試過程中可能遇到的問題,幫助他們釐清思路,有條不紊地作答。
通過本書,讀者可以了解不同Web 套用的系統設計方案的要點及採用的技術,據此查漏補缺,補齊自己知識體系中的短板,為面試成功增添更多的可能。而對於已經是架構師的讀者而言,書中的案例將為他們提供新的思路和靈感,有助於他們在面試中更加從容地展現自己的設計思路和實踐經驗。

圖書目錄

1 從0到100萬用戶的擴展 1
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

作者簡介

Alex Xu,卡耐基梅隆大學碩士,他是一位經驗豐富的軟體工程師,也是一個創業者。他曾在Twitter、蘋果和Zynga等公司工作。他熱衷於設計和實現複雜的系統。
譯者簡介
徐江,畢業於瑞典皇家理工學院的系統生物學專業,曾就職於Thoughtworks軟體技術有限公司,現在在寶潔公司擔任IT service manager,負責consumer relations。

相關詞條

熱門詞條

聯絡我們