分布式系統(tǒng)實戰(zhàn)派——從簡單系統(tǒng)到復雜系統(tǒng)
定 價:108 元
當前圖書已被 38 所學校薦購過!
查看明細
- 作者:張偉洋
- 出版時間:2024/11/1
- ISBN:9787121490439
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP316.4
- 頁碼:392
- 紙張:
- 版次:01
- 開本:16開
許多開發(fā)者掌握了Java、Spring Boot和MySQL等基礎知識后,能夠搭建一個簡單的單體系統(tǒng),但面對復雜系統(tǒng)的構建和管理時,往往感到迷茫和力不從心:對于高性能、高可用、高并發(fā)的分布式系統(tǒng)一頭霧水,束手無策。本書首先介紹從單體架構到微服務架構的演化過程,幫助讀者開闊技術視野。然后帶領讀者擺脫單體架構的束縛,深入領略集群、主從架構、分庫分表、讀寫分離、微服務、API網關、NoSQL數據庫、HDFS、分布式事務等分布式技術的無限魅力。此外,本書深入剖析了如何運用Kafka、RabbitMQ、RocketMQ等消息中間件和Elasticsearch搜索引擎來解耦應用,如何利用Docker、Kubernetes快速部署與隔離應用,以及如何借助冗余備份、高可用和異地多活策略保障系統(tǒng)穩(wěn)定運行,讓系統(tǒng)煥發(fā)新生。最后通過“支持5000萬用戶同時在線的短視頻系統(tǒng)設計”和“日均訂單量8000萬的外賣系統(tǒng)設計”兩個實際項目將理論與實踐結合,向讀者展示如何將這些技術應用于真實的生產環(huán)境中,提升實際項目中的技術能力。本書適合已經掌握Java、Spring Boot、MySQL等知識,能夠開發(fā)一個簡單的后端應用,卻在單體系統(tǒng)的束縛中力不從心、對后續(xù)的技術學習感到迷茫、對復雜系統(tǒng)不知所措、迫切期待實現技術飛躍的讀者。本書為他們提供了從簡單到復雜的技術成長路徑和解決方案。
已出版《Hadoop3.X大數據開發(fā)實戰(zhàn)(視頻教學版)》《Flink大數據分析實戰(zhàn)》《Spark3.X大數據分析實戰(zhàn)(視頻教學版)》《企業(yè)級大數據項目實戰(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)調整集群規(guī)!獜椥陨炜s 7
1.2.4 實現故障轉移——借助心跳檢測 8
1.2.5 數據庫讀寫分離——提高系統(tǒng)性能 11
1.2.6 分布式數據庫與分庫分表——將大數據拆為小數據 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(內容分發(fā)網絡) 32
2.1.2 負載均衡器 33
2.1.3 API網關 35
2.1.4 分布式數據庫集群 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ā)現 49
2.1.11 服務治理與監(jiān)控 51
2.1.12 服務追蹤 52
▲2.2 一張圖看懂分布式架構的組成 53
▲2.3 一張圖看懂本書的核心內容 55
-
第3章 微服務間的交互 60
▲3.1 為何微服務間需要交互 60
3.1.1 對比單體應用與微服務應用的交互模式 60
3.1.2 在電商系統(tǒng)中,用戶下單業(yè)務的服務交互流程 63
3.1.3 【實戰(zhàn)】基于Spring Cloud實現服務之間的交互 64
▲3.2 微服務間的通信方式——同步通信與異步通信 71
3.2.1 什么是同步通信 71
3.2.2 同步通信在電商系統(tǒng)中的痛點 72
3.2.3 【實戰(zhàn)】基于Spring Cloud實現簡單的同步通信 73
3.2.4 什么是異步通信 75
3.2.5 異步通信的實現方式1——消息隊列 77
3.2.6 異步通信的實現方式2——事件驅動 78
3.2.7 【實戰(zhàn)】基于Spring Boot實現異步通信 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產品信息服務 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網絡通信的工作原理 100
4.1.6 Socket網絡通信在電商系統(tǒng)中的應用 102
4.1.7 【實戰(zhàn)】基于Socket實現網絡通信 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 網絡分區(qū) 115
4.3.3 CAP定理在電商系統(tǒng)中的應用 116
4.3.4 高并發(fā)系統(tǒng)中一致性與可用性的權衡 119
4.3.5 提高高并發(fā)系統(tǒng)可用性的策略 121
-
第5章 分布式數據庫 122
▲5.1 分布式存儲的原理 122
5.1.1 一張圖看清分布式存儲與傳統(tǒng)存儲的區(qū)別 122
5.1.2 數據分片與數據副本——分散讀寫負載 123
5.1.3 一致性哈希算法——定位數據所在的節(jié)點 125
5.1.4 【實戰(zhàn)】在電商系統(tǒng)中使用一致性哈希算法 127
5.1.5 數據恢復與自動故障轉移——節(jié)點出現故障時的處理方案 130
▲5.2 分布式關系數據庫 130
5.2.1 分布式關系數據庫的優(yōu)缺點 131
5.2.2 【實戰(zhàn)】對電商系統(tǒng)進行分庫分表 131
5.2.3 主從復制的工作原理 134
5.2.4 【實戰(zhàn)】配置主從復制 135
5.2.5 在數據增長時無縫擴容數據庫 138
▲5.3 分布式NoSQL數據庫 139
5.3.1 主流的NoSQL數據庫 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存儲和分析溫度傳感器數據 149
5.3.8 NoSQL的查詢優(yōu)化 150
▲5.4 防范常見的數據庫安全問題 156
5.4.1 未授權訪問 156
5.4.2 數據泄露 157
5.4.3 SQL注入攻擊 157
▲5.5 分布式數據庫的數據遷移 158
5.5.1 數據遷移的流程 158
5.5.2 數據遷移的常見問題及解決方法 159
5.5.3 【實戰(zhàn)】將MySQL中的訂單表數據遷移到MongoDB 162
-
第6章 典型的分布式存儲系統(tǒng) 165
▲6.1 HDFS——Hadoop分布式文件系統(tǒng) 165
6.1.1 HDFS的架構 165
6.1.2 HDFS數據的存儲與復制 168
6.1.3 HDFS中的數據讀取/寫入流程 169
6.1.4 【實戰(zhàn)】使用HDFS 170
6.1.5 【實戰(zhàn)】使用命令行操作HDFS文件 172
6.1.6 HDFS如何確保數據的高可用性 175
▲6.2 HBase——分布式列式存儲數據庫 176
6.2.1 HBase與傳統(tǒng)關系數據庫的區(qū)別 176
6.2.2 HBase的數據模型及架構 177
6.2.3 HBase的存儲原理 180
6.2.4 HBase的高可用機制與故障恢復機制 182
6.2.5 【實戰(zhàn)】部署HBase 183
6.2.6 【實戰(zhàn)】使用命令行操作HBase表數據 185
6.2.7 【實戰(zhàn)】優(yōu)化HBase的性能 187
▲6.3 Elasticsearch——分布式實時搜索和分析引擎 194
6.3.1 Elasticsearch的基本概念 194
6.3.2 Elasticsearch存儲海量數據的原理——分片和副本 195
6.3.3 Elasticsearch的集群架構和文檔的讀寫原理 196
6.3.4 【實戰(zhàn)】搭建Elasticsearch高性能搜索引擎 198
6.3.5 【實戰(zhàn)】使用Elasticsearch索引與查詢商品數據 200
6.3.6 【實戰(zhàn)】使用Elasticsearch分析用戶購買行為 201
6.3.7 【實戰(zhàn)】使用Elasticsearch實時排名熱門商品 203
6.3.8 Elasticsearch是如何管理JVM堆內存的 204
6.3.9 通過緩存提高Elasticsearch的查詢效率 205
6.3.10 【實戰(zhàn)】使用Kibana可視化查詢Elasticsearch數據 207
6.3.11 【實戰(zhàn)】使用Head監(jiān)控Elasticsearch集群 209
6.3.12 【實戰(zhàn)】使用Java遠程操作Elasticsearch員工信息 212
-
第7章 分布式事務——確保分布式系統(tǒng)中的數據一致性 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)中實現Saga模式 226
7.3.3 【實戰(zhàn)】確保Saga模式下的數據一致性 228
▲7.4 分布式事務的其他解決方案 232
7.4.1 TCC模式——解決復雜業(yè)務中跨表和跨庫資源鎖定問題 232
7.4.2 最大努力通知模式——確保數據的最終一致性 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的集群架構和數據模型 241
7.6.2 ZooKeeper的觀察者模式 243
7.6.3 分布式鎖的實現方式及工作原理 244
7.6.4 【實戰(zhàn)】利用ZooKeeper實現分布式鎖 245
-
第8章 消息中間件——分布式系統(tǒng)中的異步通信利器 248
▲8.1 為什么需要消息中間件 248
8.1.1 一張圖看懂消息中間件 248
8.1.2 【實戰(zhàn)】解決分布式系統(tǒng)中的通信、解耦、流量調節(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實現電商系統(tǒng)的用戶通知功能 263
▲8.4 RocketMQ——低延遲、高可靠性的分布式消息中間件 265
8.4.1 RocketMQ消息通信模式1——發(fā)布/訂閱模式 265
8.4.2 【實戰(zhàn)】使用RocketMQ實現用戶行為分析 266
8.4.3 RocketMQ消息通信模式2——點對點模式 268
8.4.4 【實戰(zhàn)】使用RocketMQ實現物流跟蹤 269
▲8.5 根據業(yè)務需求選擇合適的消息中間件 271
▲8.6 在微服務中利用消息中間件實現事件驅動 273
▲8.7 在分布式存儲和計算中使用消息中間件 274
8.7.1 【實戰(zhàn)】進行分布式系統(tǒng)的數據同步和復制 274
8.7.2 【實戰(zhàn)】用消息中間件和日志收集工具進行日志處理 275
8.7.3 【實戰(zhàn)】構建一個搜索引擎用戶行為分析系統(tǒng) 278
-
第3篇 高可用與數據安全策略
-
第9章 冗余備份——數據的備份和容災策略 284
▲9.1 兩張圖看懂冗余備份 284
▲9.2 選擇合適的冗余備份策略 286
9.2.1 【實戰(zhàn)】熱備、冷備和溫備在電商系統(tǒng)中的應用 286
9.2.2 【實戰(zhàn)】通過數據冗余和應用冗余應對流量激增 291
9.2.3 【實戰(zhàn)】利用RAID技術實現磁盤冗余,提高數據可靠性 293
9.2.4 【實戰(zhàn)】基于AWS S3服務實現跨地域的冗余備份 295
▲9.3 在生產環(huán)境中進行冗余備份 296
9.3.1 【實戰(zhàn)】在大規(guī)模數據中心中實施冗余備份 296
9.3.2 【實戰(zhàn)】在云存儲環(huán)境中實施備份技術 298
9.3.3 【實戰(zhàn)】在系統(tǒng)故障時利用備份數據進行快速恢復 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 數據冗余與備份 330
10.4.3 容災與故障恢復 331
10.4.4 無縫更新與維護 331
▲10.5 異地多活——多地區(qū)數據中心的部署策略 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存儲視頻元數據 343
11.3.2 使用MongoDB存儲視頻標簽數據 344
11.3.3 使用Redis存儲視頻緩存數據 345
11.3.4 使用Elasticsearch存儲視頻索引數據 346
11.3.5 實現MySQL與Elasticsearch的數據同步 350
11.3.6 使用HBase和HDFS存儲視頻文件 352
▲11.4 利用CDN提升視頻訪問速度 354
▲11.5 利用編碼技術優(yōu)化視頻帶寬 355
▲11.6 視頻個性化推薦設計 356
11.6.1 數據收集與預處理 357
11.6.2 特征提取與用戶畫像構建 358
-
第12章 【項目實戰(zhàn)】日均訂單量8000萬的外賣系統(tǒng)設計 363
▲12.1 業(yè)務需求 363
▲12.2 微服務架構設計 364
▲12.3 數據庫選擇與設計 365
▲12.4 緩存設計 366
12.4.1 使用Redis和Memcached緩存數據 366
12.4.2 構建外賣系統(tǒng)的緩存架構 368
▲12.5 外賣員派單系統(tǒng)設計 369
12.5.1 實時更新外賣員的地理位置 369
12.5.2 設計外賣員派單算法 372