本書從軟件結構的發(fā)展歷史入手,通過一個簡單的例子,描述了分布式架構的特性和存在的問題,并圍繞這些問題展開了分析和實踐。書中從為什么、是什么、怎么辦這三個方面,分別講解了分布式應用服務的拆分、分布式調用、分布式協(xié)同、分布式計算、分布式存儲、分布式資源管理和調度、高性能與可用性以及指標與監(jiān)控等內容,基本涵蓋了分布式技術的要點。讀者既可以按照邏輯聯(lián)系從前往后看,也可以只閱讀感興趣的章節(jié)。
1.3 年持續(xù)打磨,總結 20 年架構經(jīng)驗,全網(wǎng)閱讀量60萬+;
2.內容涉及拆分、調用、協(xié)同、計算、存儲、調度、Gao性能和可用性、指標與監(jiān)控等;
3.按照“為什么→ 是什么 → 怎么辦”的思路介紹;
4.圖文并茂,全書包含300多張圖片。
崔皓
資深架構師,10 年分布式架構經(jīng)驗。曾任惠普技術專家。樂于分享,撰寫了很多熱門技術文章,閱讀量超過 60 萬。
第 1章 分布式架構設計的特征與問題 1
1.1 架構設計的演進過程 1
1.1.1 應用與數(shù)據(jù)一體模式 1
1.1.2 應用與數(shù)據(jù)分離模式 2
1.1.3 緩存與性能的提升 3
1.1.4 服務器集群處理并發(fā) 4
1.1.5 數(shù)據(jù)庫讀寫分離 5
1.1.6 反向代理和CDN 6
1.1.7 分布式數(shù)據(jù)庫與分表分庫 9
1.1.8 業(yè)務拆分 10
1.1.9 分布式與微服務 11
1.2 一個簡單的例子:分布式架構的組成 13
1.2.1 架構概述與分層 13
1.2.2 客戶端與CDN 15
1.2.3 接入層 16
1.2.4 應用層 17
1.2.5 存儲層 23
1.3 分布式架構的特征 26
1.4 分布式架構的問題 27
1.4.1 分布式架構的邏輯結構圖 27
1.4.2 應用服務拆分 28
1.4.3 分布式調用 29
1.4.4 分布式協(xié)同 29
1.4.5 分布式計算 30
1.4.6 分布式存儲 30
1.4.7 分布式資源管理與調度 31
1.4.8 高性能與可用性 31
1.4.9 指標與監(jiān)控 31
1.5 本書的閱讀方式 32
1.6 總結 33
第 2章 分布式應用服務的拆分 34
2.1 起因與概念 34
2.2 拆分思路 36
2.3 模型結構 38
2.3.1 通用語言 38
2.3.2 領域、子域和限界上下文 39
2.3.3 實體和值類型 41
2.3.4 聚合和聚合根 45
2.3.5 領域事件 46
2.4 分析業(yè)務需求形成應用服務 48
2.4.1 分析業(yè)務流程 49
2.4.2 抽取領域對象和生成聚合 51
2.4.3 劃定限界上下文 53
2.5 領域驅動設計分層 54
2.5.1 分層的概述與原則 54
2.5.2 分層的內容 56
2.5.3 分層的總結 57
2.5.4 服務內部的分層調用與服務間的調用 58
2.5.5 把分層映射到代碼結構 60
2.5.6 代碼分層示例 65
2.6 總結 70
第3章 分布式調用 71
3.1 負載均衡 71
3.1.1 負載均衡分類 72
3.1.2 負載均衡算法 83
3.2 API 網(wǎng)關 85
3.2.1 API 網(wǎng)關的定義 85
3.2.2 API 網(wǎng)關的服務定位 87
3.2.3 API 網(wǎng)關的技術原理 88
3.3 服務注冊與發(fā)現(xiàn) 90
3.3.1 服務注冊與發(fā)現(xiàn)的概念和原理 91
3.3.2 服務注冊中心的可用性 92
3.3.3 服務注冊中心的服務保存 92
3.4 服務間的遠程調用 92
3.4.1 RPC 調用過程 93
3.4.2 RPC 動態(tài)代理 94
3.4.3 RPC 序列化 97
3.4.4 協(xié)議編碼 98
3.4.5 網(wǎng)絡傳輸 99
3.4.6 Netty 實現(xiàn) RPC 104
3.5 總結 116
第4章 分布式協(xié)同 117
4.1 分布式系統(tǒng)的特性與互斥問題 117
4.1.1 集中互斥算法 118
4.1.2 基于許可的互斥算法 120
4.1.3 令牌環(huán)互斥算法 122
4.2 分布式鎖 124
4.2.1 分布式鎖的由來和定義 125
4.2.2 通過Redis緩存實現(xiàn)分布式鎖 126
4.2.3 通過ZooKeeper 實現(xiàn)分布式鎖 129
4.2.4 分布式分段加鎖 132
4.3 分布式事務 133
4.3.1 ACID 理論 134
4.3.2 CAP 理論 135
4.3.3 BASE 理論 137
4.3.4 DTP 模型 139
4.3.5 分布式事務 2PC 解決方案 141
4.3.6 分布式事務 TCC 解決方案 143
4.4 分布式選舉 146
4.4.1 Bully 算法 147
4.4.2 Raft 算法 150
4.4.3 ZAB 算法 154
4.5 ZooKeeper——分布式系統(tǒng)的實踐 157
4.5.1 從一個簡單的例子開始 157
4.5.2 Znode 的原理與使用 158
4.5.3 Watcher 原理與使用 159
4.5.4 Version 的原理與使用 162
4.5.5 會話的原理與使用 164
4.5.6 服務群組 166
4.6 總結 169
第5章 分布式計算 171
5.1 MapReduce 模式 171
5.1.1 MapReduce 的策略和理念 171
5.1.2 MapReduce 的體系結構 173
5.1.3 MapReduce 的工作流程 175
5.1.4 MapReduce 的應用實例 178
5.2 Stream 模式 180
5.2.1 Stream 模式的處理過程及特點 181
5.2.2 Storm 的體系結構與工作原理 182
5.2.3 Storm 的并發(fā)機制 185
5.2.4 Stream Grouping 188
5.2.5 Storm 集群架構 191
5.3 總結 193
第6章 分布式存儲 195
6.1 數(shù)據(jù)存儲面臨的問題以及解決思路 195
6.1.1 RAID 磁盤陣列 196
6.1.2 分布式存儲的組成要素 199
6.2 分布式數(shù)據(jù)庫 200
6.2.1 分表分庫 200
6.2.2 主從復制 205
6.2.3 數(shù)據(jù)擴容 213
6.3 分布式緩存 216
6.3.1 緩存分片算法 217
6.3.2 Redis 集群方案 221
6.3.3 緩存節(jié)點之間的通信 222
6.3.4 請求分布式緩存的路由 223
6.3.5 緩存節(jié)點的擴展和收縮 226
6.3.6 緩存故障的發(fā)現(xiàn)和恢復 228
6.4 總結 230
第7章 分布式資源管理和調度 231
7.1 分布式資源調度的由來與過程 231
7.1.1 資源調度可以解決什么問題 232
7.1.2 資源調度過程 234
7.2 資源劃分和調度策略 237
7.2.1 Linux Container 資源是如何劃分的 237
7.2.2 任務與資源如何匹配 244
7.3 分布式調度架構 249
7.3.1 中央式調度器 250
7.3.2 兩級調度器 253
7.3.3 共享狀態(tài)調度器 259
7.4 Kubernetes——資源調度的實踐 262
7.4.1 Kubernetes 架構概述 263
7.4.2 從一個例子開始 264
7.4.3 kubectl 和 API Server 264
7.4.4 controller manager、Scheduler 和 kubelet 268
7.4.5 Service 和 kubelet 271
7.5 總結 277
第8章 高性能與可用性 278
8.1 緩存的應用 278
8.1.1 處處皆緩存 279
8.1.2 動靜分離 280
8.1.3 HTTP 緩存 284
8.1.4 CDN 緩存 288
8.1.5 DNS 結構與訪問流程 289
8.1.6 負載均衡實現(xiàn)動態(tài)緩存 292
8.1.7 進程內緩存 296
8.1.8 分布式進程緩存 304
8.2 可用性 306
8.2.1 請求限流 306
8.2.2 服務降級 314
8.2.3 服務熔斷 319
8.3 總結 328
第9章 指標與監(jiān)控 329
9.1 為什么需要監(jiān)控系統(tǒng) 329
9.2 監(jiān)控系統(tǒng)的指標 330
9.3 創(chuàng)建監(jiān)控系統(tǒng)的步驟 332
9.4 監(jiān)控系統(tǒng)的分類 333
9.4.1 日志類監(jiān)控 333
9.4.2 調用鏈監(jiān)控 339
9.4.3 度量類監(jiān)控:LSM Tree 和 LevelDB 350
9.5 監(jiān)控系統(tǒng)的分層 355
9.6 Zabbix 實現(xiàn)監(jiān)控系統(tǒng) 356
9.6.1 Zabbix 構建監(jiān)控系統(tǒng)過程 357
9.6.2 Zabbix 架構的安裝和配置 358
9.6.3 Zabbix 監(jiān)控方式 364
9.7 Prometheus 實現(xiàn)監(jiān)控系統(tǒng) 369
9.7.1 Prometheus 系統(tǒng)架構 369
9.7.2 時間序列與 Metric 數(shù)據(jù)模型 370
9.7.3 Exporter 采集數(shù)據(jù)與服務發(fā)現(xiàn) 372
9.7.4 報警規(guī)則的定義和報警路由的分發(fā) 374
9.8 總結 378
第 10章 架構設計思路和要點 379
10.1 架構設計思維方式 379
10.1.1 架構師的設計模型 379
10.1.2 過程設計模型 383
10.1.3 協(xié)作式設計模型 386
10.1.4 擴展立方設計模型 389
10.2 重構與測試 391
10.2.1 代碼重構 391
10.2.2 性能測試與壓力測試 395
10.3 學習與發(fā)展 401
10.3.1 思維方式 401
10.3.2 學習提升 402
10.3.3 職業(yè)發(fā)展 403
10.4 總結 405