分布式系統(tǒng)實戰(zhàn)派——從簡單系統(tǒng)到復雜系統(tǒng)
定 價:108 元
當前圖書已被 27 所學校薦購過!
查看明細
- 作者:張偉洋
- 出版時間:2024/11/1
- ISBN:9787121490439
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP316.4
- 頁碼:392
- 紙張:
- 版次:01
- 開本:16開
許多開發(fā)者掌握了Java、Spring Boot和MySQL等基礎知識后,能夠搭建一個簡單的單體系統(tǒng),但面對復雜系統(tǒng)的構建和管理時,往往感到迷茫和力不從心:對于高性能、高可用、高并發(fā)的分布式系統(tǒng)一頭霧水,束手無策。本書首先介紹從單體架構到微服務架構的演化過程,幫助讀者開闊技術視野。然后帶領讀者擺脫單體架構的束縛,深入領略集群、主從架構、分庫分表、讀寫分離、微服務、API網(wǎng)關、NoSQL數(shù)據(jù)庫、HDFS、分布式事務等分布式技術的無限魅力。此外,本書深入剖析了如何運用Kafka、RabbitMQ、RocketMQ等消息中間件和Elasticsearch搜索引擎來解耦應用,如何利用Docker、Kubernetes快速部署與隔離應用,以及如何借助冗余備份、高可用和異地多活策略保障系統(tǒng)穩(wěn)定運行,讓系統(tǒng)煥發(fā)新生。最后通過“支持5000萬用戶同時在線的短視頻系統(tǒng)設計”和“日均訂單量8000萬的外賣系統(tǒng)設計”兩個實際項目將理論與實踐結合,向讀者展示如何將這些技術應用于真實的生產(chǎn)環(huán)境中,提升實際項目中的技術能力。本書適合已經(jīng)掌握Java、Spring Boot、MySQL等知識,能夠開發(fā)一個簡單的后端應用,卻在單體系統(tǒng)的束縛中力不從心、對后續(xù)的技術學習感到迷茫、對復雜系統(tǒng)不知所措、迫切期待實現(xiàn)技術飛躍的讀者。本書為他們提供了從簡單到復雜的技術成長路徑和解決方案。
已出版《Hadoop3.X大數(shù)據(jù)開發(fā)實戰(zhàn)(視頻教學版)》《Flink大數(shù)據(jù)分析實戰(zhàn)》《Spark3.X大數(shù)據(jù)分析實戰(zhàn)(視頻教學版)》《企業(yè)級大數(shù)據(jù)項目實戰(zhàn):用戶搜索行為分析系統(tǒng)從0到1》等圖書,多本圖書被多所高校選為教材。公眾號"奮斗在IT” 的創(chuàng)辦人。
第1篇 后端體系架構認知
-
第1章 從單體架構到微服務架構的演變過程 2
▲1.1 什么是單體架構 2
1.1.1 一張圖看懂單體架構 2
1.1.2 單體架構的優(yōu)、缺點 3
▲1.2 從單體架構到集群架構——多臺機器協(xié)同工作 5
1.2.1 一張圖看懂集群架構 5
1.2.2 擴展系統(tǒng)——水平擴展和垂直擴展 6
1.2.3 動態(tài)調(diào)整集群規(guī)模——彈性伸縮 7
1.2.4 實現(xiàn)故障轉移——借助心跳檢測 8
1.2.5 數(shù)據(jù)庫讀寫分離——提高系統(tǒng)性能 11
1.2.6 分布式數(shù)據(jù)庫與分庫分表——將大數(shù)據(jù)拆為小數(shù)據(jù) 12
▲1.3 從集群架構到微服務架構——精細拆分業(yè)務 14
1.3.1 一張圖看懂微服務架構 14
1.3.2 微服務架構的核心特性 16
1.3.3 微服務架構與單體架構的區(qū)別 17
1.3.4 為什么企業(yè)選擇微服務架構 18
1.3.5 微服務架構的基本組件 19
1.3.6 設計微服務架構需要考慮的關鍵點 20
▲1.4 微服務架構與分布式架構 21
1.4.1 一張圖看懂分布式架構與微服務架構 22
1.4.2 什么是分布式架構 23
1.4.3 微服務架構與分布式架構的區(qū)別 23
1.4.4 在分布式系統(tǒng)中微服務是如何工作的 25
▲1.5 從單體架構到微服務架構的遷移——讓系統(tǒng)更穩(wěn)定 27
1.5.1 遷移到微服務架構需要考慮的因素 28
1.5.2 遷移到微服務架構的步驟 29
-
第2章 幾張圖了解后端系統(tǒng) 31
▲2.1 一張圖看懂整個后端系統(tǒng)架構 31
2.1.1 CDN(內(nèi)容分發(fā)網(wǎng)絡) 32
2.1.2 負載均衡器 33
2.1.3 API網(wǎng)關 35
2.1.4 分布式數(shù)據(jù)庫集群 38
2.1.5 分布式消息集群 40
2.1.6 分布式緩存集群 41
2.1.7 分布式文件集群 44
2.1.8 分布式搜索集群 46
2.1.9 服務配置與管理 48
2.1.10 服務注冊與發(fā)現(xiàn) 49
2.1.11 服務治理與監(jiān)控 51
2.1.12 服務追蹤 52
▲2.2 一張圖看懂分布式架構的組成 53
▲2.3 一張圖看懂本書的核心內(nèi)容 55
-
第3章 微服務間的交互 60
▲3.1 為何微服務間需要交互 60
3.1.1 對比單體應用與微服務應用的交互模式 60
3.1.2 在電商系統(tǒng)中,用戶下單業(yè)務的服務交互流程 63
3.1.3 【實戰(zhàn)】基于Spring Cloud實現(xiàn)服務之間的交互 64
▲3.2 微服務間的通信方式——同步通信與異步通信 71
3.2.1 什么是同步通信 71
3.2.2 同步通信在電商系統(tǒng)中的痛點 72
3.2.3 【實戰(zhàn)】基于Spring Cloud實現(xiàn)簡單的同步通信 73
3.2.4 什么是異步通信 75
3.2.5 異步通信的實現(xiàn)方式1——消息隊列 77
3.2.6 異步通信的實現(xiàn)方式2——事件驅動 78
3.2.7 【實戰(zhàn)】基于Spring Boot實現(xiàn)異步通信 79
▲3.3 服務間的通信協(xié)議——從HTTP到gRPC 82
3.3.1 HTTP、REST和RESTful流行的主要原因 83
3.3.2 RESTful設計的痛點及解決辦法 84
3.3.3 【實戰(zhàn)】基于Spring Boot搭建一個RESTful產(chǎn)品信息服務 85
3.3.4 為何越來越多企業(yè)選擇gRPC 87
3.3.5 gRPC在電商系統(tǒng)中的應用 88
3.3.6 對比gRPC與HTTP 88
3.3.7 【實戰(zhàn)】從零搭建gRPC服務 89
-
第2篇 分布式技術專項
-
第4章 分布式系統(tǒng)的通信機制 96
▲4.1 分布式系統(tǒng)組件之間是如何通信的 96
4.1.1 RPC的工作原理 96
4.1.2 【實戰(zhàn)】基于RPC遠程獲取用戶信息 97
4.1.3 消息傳遞的工作原理 98
4.1.4 【實戰(zhàn)】使用RabbitMQ進行消息傳遞 98
4.1.5 Socket網(wǎng)絡通信的工作原理 100
4.1.6 Socket網(wǎng)絡通信在電商系統(tǒng)中的應用 102
4.1.7 【實戰(zhàn)】基于Socket實現(xiàn)網(wǎng)絡通信 102
▲4.2 分布式系統(tǒng)中的時鐘、事件與一致性 104
4.2.1 物理時鐘與邏輯時鐘 105
4.2.2 邏輯時鐘的代表Lamport時鐘——事件排序工具 106
4.2.3 【實戰(zhàn)】使用Lamport時鐘對事件進行排序 107
4.2.4 【實戰(zhàn)】使用Vector時鐘跟蹤事件因果關系 111
▲4.3 CAP定理——三者不可兼得 114
4.3.1 CAP定理基礎 114
4.3.2 網(wǎng)絡分區(qū) 115
4.3.3 CAP定理在電商系統(tǒng)中的應用 116
4.3.4 高并發(fā)系統(tǒng)中一致性與可用性的權衡 119
4.3.5 提高高并發(fā)系統(tǒng)可用性的策略 121
-
第5章 分布式數(shù)據(jù)庫 122
▲5.1 分布式存儲的原理 122
5.1.1 一張圖看清分布式存儲與傳統(tǒng)存儲的區(qū)別 122
5.1.2 數(shù)據(jù)分片與數(shù)據(jù)副本——分散讀寫負載 123
5.1.3 一致性哈希算法——定位數(shù)據(jù)所在的節(jié)點 125
5.1.4 【實戰(zhàn)】在電商系統(tǒng)中使用一致性哈希算法 127
5.1.5 數(shù)據(jù)恢復與自動故障轉移——節(jié)點出現(xiàn)故障時的處理方案 130
▲5.2 分布式關系數(shù)據(jù)庫 130
5.2.1 分布式關系數(shù)據(jù)庫的優(yōu)缺點 131
5.2.2 【實戰(zhàn)】對電商系統(tǒng)進行分庫分表 131
5.2.3 主從復制的工作原理 134
5.2.4 【實戰(zhàn)】配置主從復制 135
5.2.5 在數(shù)據(jù)增長時無縫擴容數(shù)據(jù)庫 138
▲5.3 分布式NoSQL數(shù)據(jù)庫 139
5.3.1 主流的NoSQL數(shù)據(jù)庫 140
5.3.2 MongoDB基礎 140
5.3.3 【實戰(zhàn)】操作MongoDB中的商品信息 142
5.3.4 Redis基礎 143
5.3.5 【實戰(zhàn)】使用Redis緩存和檢索用戶的瀏覽歷史 145
5.3.6 Cassandra基礎 147
5.3.7 【實戰(zhàn)】使用Cassandra存儲和分析溫度傳感器數(shù)據(jù) 149
5.3.8 NoSQL的查詢優(yōu)化 150
▲5.4 防范常見的數(shù)據(jù)庫安全問題 156
5.4.1 未授權訪問 156
5.4.2 數(shù)據(jù)泄露 157
5.4.3 SQL注入攻擊 157
▲5.5 分布式數(shù)據(jù)庫的數(shù)據(jù)遷移 158
5.5.1 數(shù)據(jù)遷移的流程 158
5.5.2 數(shù)據(jù)遷移的常見問題及解決方法 159
5.5.3 【實戰(zhàn)】將MySQL中的訂單表數(shù)據(jù)遷移到MongoDB 162
-
第6章 典型的分布式存儲系統(tǒng) 165
▲6.1 HDFS——Hadoop分布式文件系統(tǒng) 165
6.1.1 HDFS的架構 165
6.1.2 HDFS數(shù)據(jù)的存儲與復制 168
6.1.3 HDFS中的數(shù)據(jù)讀取/寫入流程 169
6.1.4 【實戰(zhàn)】使用HDFS 170
6.1.5 【實戰(zhàn)】使用命令行操作HDFS文件 172
6.1.6 HDFS如何確保數(shù)據(jù)的高可用性 175
▲6.2 HBase——分布式列式存儲數(shù)據(jù)庫 176
6.2.1 HBase與傳統(tǒng)關系數(shù)據(jù)庫的區(qū)別 176
6.2.2 HBase的數(shù)據(jù)模型及架構 177
6.2.3 HBase的存儲原理 180
6.2.4 HBase的高可用機制與故障恢復機制 182
6.2.5 【實戰(zhàn)】部署HBase 183
6.2.6 【實戰(zhàn)】使用命令行操作HBase表數(shù)據(jù) 185
6.2.7 【實戰(zhàn)】優(yōu)化HBase的性能 187
▲6.3 Elasticsearch——分布式實時搜索和分析引擎 194
6.3.1 Elasticsearch的基本概念 194
6.3.2 Elasticsearch存儲海量數(shù)據(jù)的原理——分片和副本 195
6.3.3 Elasticsearch的集群架構和文檔的讀寫原理 196
6.3.4 【實戰(zhàn)】搭建Elasticsearch高性能搜索引擎 198
6.3.5 【實戰(zhàn)】使用Elasticsearch索引與查詢商品數(shù)據(jù) 200
6.3.6 【實戰(zhàn)】使用Elasticsearch分析用戶購買行為 201
6.3.7 【實戰(zhàn)】使用Elasticsearch實時排名熱門商品 203
6.3.8 Elasticsearch是如何管理JVM堆內(nèi)存的 204
6.3.9 通過緩存提高Elasticsearch的查詢效率 205
6.3.10 【實戰(zhàn)】使用Kibana可視化查詢Elasticsearch數(shù)據(jù) 207
6.3.11 【實戰(zhàn)】使用Head監(jiān)控Elasticsearch集群 209
6.3.12 【實戰(zhàn)】使用Java遠程操作Elasticsearch員工信息 212
-
第7章 分布式事務——確保分布式系統(tǒng)中的數(shù)據(jù)一致性 218
▲7.1 什么是分布式事務 218
7.1.1 三張圖看懂分布式事務 218
7.1.2 分布式事務面臨的挑戰(zhàn)及應對策略 220
▲7.2 分布式事務的提交機制——兩階段提交與三階段提交 221
7.2.1 兩階段提交的工作原理 221
7.2.2 兩階段提交帶來的問題——死鎖和性能瓶頸 222
7.2.3 三階段提交的工作原理 223
7.2.4 對比三階段提交與兩階段提交 224
▲7.3 Saga模式——長事務的解決方案 225
7.3.1 一張圖看懂Saga模式 225
7.3.2 在電商系統(tǒng)中實現(xiàn)Saga模式 226
7.3.3 【實戰(zhàn)】確保Saga模式下的數(shù)據(jù)一致性 228
▲7.4 分布式事務的其他解決方案 232
7.4.1 TCC模式——解決復雜業(yè)務中跨表和跨庫資源鎖定問題 232
7.4.2 最大努力通知模式——確保數(shù)據(jù)的最終一致性 235
7.4.3 可靠消息最終一致性策略——確保接收消息的可靠性 237
▲7.5 分布式事務的企業(yè)級應用 238
7.5.1 亞馬遜、谷歌、阿里巴巴如何處理分布式事務 238
7.5.2 阿里巴巴Seata框架的工作原理 239
▲7.6 分布式鎖——解決分布式系統(tǒng)中的并發(fā)控制問題 241
7.6.1 ZooKeeper的集群架構和數(shù)據(jù)模型 241
7.6.2 ZooKeeper的觀察者模式 243
7.6.3 分布式鎖的實現(xiàn)方式及工作原理 244
7.6.4 【實戰(zhàn)】利用ZooKeeper實現(xiàn)分布式鎖 245
-
第8章 消息中間件——分布式系統(tǒng)中的異步通信利器 248
▲8.1 為什么需要消息中間件 248
8.1.1 一張圖看懂消息中間件 248
8.1.2 【實戰(zhàn)】解決分布式系統(tǒng)中的通信、解耦、流量調(diào)節(jié)問題 249
▲8.2 Kafka——分布式流處理中間件 254
8.2.1 利用“放雞蛋”的例子快速了解Kafka 254
8.2.2 Kafka的集群架構 255
8.2.3 Kafka處理海量消息的原理 256
8.2.4 【實戰(zhàn)】構建一個分布式、高性能的Kafka集群 258
▲8.3 RabbitMQ——高可用的消息隊列系統(tǒng) 260
8.3.1 RabbitMQ的工作原理 260
8.3.2 RabbitMQ在電商系統(tǒng)中的應用 262
8.3.3 【實戰(zhàn)】使用RabbitMQ實現(xiàn)電商系統(tǒng)的用戶通知功能 263
▲8.4 RocketMQ——低延遲、高可靠性的分布式消息中間件 265
8.4.1 RocketMQ消息通信模式1——發(fā)布/訂閱模式 265
8.4.2 【實戰(zhàn)】使用RocketMQ實現(xiàn)用戶行為分析 266
8.4.3 RocketMQ消息通信模式2——點對點模式 268
8.4.4 【實戰(zhàn)】使用RocketMQ實現(xiàn)物流跟蹤 269
▲8.5 根據(jù)業(yè)務需求選擇合適的消息中間件 271
▲8.6 在微服務中利用消息中間件實現(xiàn)事件驅動 273
▲8.7 在分布式存儲和計算中使用消息中間件 274
8.7.1 【實戰(zhàn)】進行分布式系統(tǒng)的數(shù)據(jù)同步和復制 274
8.7.2 【實戰(zhàn)】用消息中間件和日志收集工具進行日志處理 275
8.7.3 【實戰(zhàn)】構建一個搜索引擎用戶行為分析系統(tǒng) 278
-
第3篇 高可用與數(shù)據(jù)安全策略
-
第9章 冗余備份——數(shù)據(jù)的備份和容災策略 284
▲9.1 兩張圖看懂冗余備份 284
▲9.2 選擇合適的冗余備份策略 286
9.2.1 【實戰(zhàn)】熱備、冷備和溫備在電商系統(tǒng)中的應用 286
9.2.2 【實戰(zhàn)】通過數(shù)據(jù)冗余和應用冗余應對流量激增 291
9.2.3 【實戰(zhàn)】利用RAID技術實現(xiàn)磁盤冗余,提高數(shù)據(jù)可靠性 293
9.2.4 【實戰(zhàn)】基于AWS S3服務實現(xiàn)跨地域的冗余備份 295
▲9.3 在生產(chǎn)環(huán)境中進行冗余備份 296
9.3.1 【實戰(zhàn)】在大規(guī)模數(shù)據(jù)中心中實施冗余備份 296
9.3.2 【實戰(zhàn)】在云存儲環(huán)境中實施備份技術 298
9.3.3 【實戰(zhàn)】在系統(tǒng)故障時利用備份數(shù)據(jù)進行快速恢復 300
-
第10章 高可用與異地多活——提高系統(tǒng)的穩(wěn)定性和故障恢復能力 302
▲10.1 一張圖看懂高可用 302
▲10.2 設計一個高可用架構 303
10.2.1 識別和加固單點故障點 303
10.2.2 【實戰(zhàn)】通過添加冗余組件來提高系統(tǒng)的可用性 305
10.2.3 【實戰(zhàn)】在高并發(fā)場景下,使用“限流”防止系統(tǒng)崩潰 306
10.2.4 【實戰(zhàn)】在高并發(fā)場景下,使用“熔斷”防止服務雪崩 316
10.2.5 【實戰(zhàn)】在高并發(fā)場景下,使用“降級”應對性能瓶頸 319
▲10.3 利用容器化技術部署和管理項目 323
10.3.1 什么是Docker 323
10.3.2 【實戰(zhàn)】利用Docker快速部署電商系統(tǒng)的商品服務 324
10.3.3 什么是Kubernetes 325
10.3.4 在項目開發(fā)中,何時用Docker,何時用Kubernetes 327
10.3.5 【實戰(zhàn)】利用Kubernetes管理電商系統(tǒng)的各個服務 328
▲10.4 【實戰(zhàn)】大型在線游戲的高可用策略 330
10.4.1 負載均衡與集群化 330
10.4.2 數(shù)據(jù)冗余與備份 330
10.4.3 容災與故障恢復 331
10.4.4 無縫更新與維護 331
▲10.5 異地多活——多地區(qū)數(shù)據(jù)中心的部署策略 334
10.5.1 一張圖看懂異地多活 334
10.5.2 異地多活與高可用、容災的關系 337
-
第4篇 分布式系統(tǒng)項目設計
-
第11章 【項目實戰(zhàn)】支持5000萬用戶同時在線的短視頻系統(tǒng)設計 340
▲11.1 業(yè)務分析 340
11.1.1 需求分析 340
11.1.2 業(yè)務流程分析 341
▲11.2 架構設計 341
▲11.3 存儲設計 343
11.3.1 使用MySQL存儲視頻元數(shù)據(jù) 343
11.3.2 使用MongoDB存儲視頻標簽數(shù)據(jù) 344
11.3.3 使用Redis存儲視頻緩存數(shù)據(jù) 345
11.3.4 使用Elasticsearch存儲視頻索引數(shù)據(jù) 346
11.3.5 實現(xiàn)MySQL與Elasticsearch的數(shù)據(jù)同步 350
11.3.6 使用HBase和HDFS存儲視頻文件 352
▲11.4 利用CDN提升視頻訪問速度 354
▲11.5 利用編碼技術優(yōu)化視頻帶寬 355
▲11.6 視頻個性化推薦設計 356
11.6.1 數(shù)據(jù)收集與預處理 357
11.6.2 特征提取與用戶畫像構建 358
-
第12章 【項目實戰(zhàn)】日均訂單量8000萬的外賣系統(tǒng)設計 363
▲12.1 業(yè)務需求 363
▲12.2 微服務架構設計 364
▲12.3 數(shù)據(jù)庫選擇與設計 365
▲12.4 緩存設計 366
12.4.1 使用Redis和Memcached緩存數(shù)據(jù) 366
12.4.2 構建外賣系統(tǒng)的緩存架構 368
▲12.5 外賣員派單系統(tǒng)設計 369
12.5.1 實時更新外賣員的地理位置 369
12.5.2 設計外賣員派單算法 372