分布式系統(tǒng)實戰(zhàn)派——從簡單系統(tǒng)到復(fù)雜系統(tǒng)
定 價:108 元
- 作者:張偉洋
- 出版時間:2024/11/1
- ISBN:9787121490439
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP316.4
- 頁碼:392
- 紙張:
- 版次:01
- 開本:16開
許多開發(fā)者掌握了Java、Spring Boot和MySQL等基礎(chǔ)知識后,能夠搭建一個簡單的單體系統(tǒng),但面對復(fù)雜系統(tǒng)的構(gòu)建和管理時,往往感到迷茫和力不從心:對于高性能、高可用、高并發(fā)的分布式系統(tǒng)一頭霧水,束手無策。本書首先介紹從單體架構(gòu)到微服務(wù)架構(gòu)的演化過程,幫助讀者開闊技術(shù)視野。然后帶領(lǐng)讀者擺脫單體架構(gòu)的束縛,深入領(lǐng)略集群、主從架構(gòu)、分庫分表、讀寫分離、微服務(wù)、API網(wǎng)關(guān)、NoSQL數(shù)據(jù)庫、HDFS、分布式事務(wù)等分布式技術(shù)的無限魅力。此外,本書深入剖析了如何運用Kafka、RabbitMQ、RocketMQ等消息中間件和Elasticsearch搜索引擎來解耦應(yīng)用,如何利用Docker、Kubernetes快速部署與隔離應(yīng)用,以及如何借助冗余備份、高可用和異地多活策略保障系統(tǒng)穩(wěn)定運行,讓系統(tǒng)煥發(fā)新生。最后通過“支持5000萬用戶同時在線的短視頻系統(tǒng)設(shè)計”和“日均訂單量8000萬的外賣系統(tǒng)設(shè)計”兩個實際項目將理論與實踐結(jié)合,向讀者展示如何將這些技術(shù)應(yīng)用于真實的生產(chǎn)環(huán)境中,提升實際項目中的技術(shù)能力。本書適合已經(jīng)掌握Java、Spring Boot、MySQL等知識,能夠開發(fā)一個簡單的后端應(yīng)用,卻在單體系統(tǒng)的束縛中力不從心、對后續(xù)的技術(shù)學(xué)習(xí)感到迷茫、對復(fù)雜系統(tǒng)不知所措、迫切期待實現(xiàn)技術(shù)飛躍的讀者。本書為他們提供了從簡單到復(fù)雜的技術(shù)成長路徑和解決方案。
已出版《Hadoop3.X大數(shù)據(jù)開發(fā)實戰(zhàn)(視頻教學(xué)版)》《Flink大數(shù)據(jù)分析實戰(zhàn)》《Spark3.X大數(shù)據(jù)分析實戰(zhàn)(視頻教學(xué)版)》《企業(yè)級大數(shù)據(jù)項目實戰(zhàn):用戶搜索行為分析系統(tǒng)從0到1》等圖書,多本圖書被多所高校選為教材。公眾號"奮斗在IT” 的創(chuàng)辦人。
第1篇 后端體系架構(gòu)認知
-
第1章 從單體架構(gòu)到微服務(wù)架構(gòu)的演變過程 2
▲1.1 什么是單體架構(gòu) 2
1.1.1 一張圖看懂單體架構(gòu) 2
1.1.2 單體架構(gòu)的優(yōu)、缺點 3
▲1.2 從單體架構(gòu)到集群架構(gòu)——多臺機器協(xié)同工作 5
1.2.1 一張圖看懂集群架構(gòu) 5
1.2.2 擴展系統(tǒng)——水平擴展和垂直擴展 6
1.2.3 動態(tài)調(diào)整集群規(guī)模——彈性伸縮 7
1.2.4 實現(xiàn)故障轉(zhuǎn)移——借助心跳檢測 8
1.2.5 數(shù)據(jù)庫讀寫分離——提高系統(tǒng)性能 11
1.2.6 分布式數(shù)據(jù)庫與分庫分表——將大數(shù)據(jù)拆為小數(shù)據(jù) 12
▲1.3 從集群架構(gòu)到微服務(wù)架構(gòu)——精細拆分業(yè)務(wù) 14
1.3.1 一張圖看懂微服務(wù)架構(gòu) 14
1.3.2 微服務(wù)架構(gòu)的核心特性 16
1.3.3 微服務(wù)架構(gòu)與單體架構(gòu)的區(qū)別 17
1.3.4 為什么企業(yè)選擇微服務(wù)架構(gòu) 18
1.3.5 微服務(wù)架構(gòu)的基本組件 19
1.3.6 設(shè)計微服務(wù)架構(gòu)需要考慮的關(guān)鍵點 20
▲1.4 微服務(wù)架構(gòu)與分布式架構(gòu) 21
1.4.1 一張圖看懂分布式架構(gòu)與微服務(wù)架構(gòu) 22
1.4.2 什么是分布式架構(gòu) 23
1.4.3 微服務(wù)架構(gòu)與分布式架構(gòu)的區(qū)別 23
1.4.4 在分布式系統(tǒng)中微服務(wù)是如何工作的 25
▲1.5 從單體架構(gòu)到微服務(wù)架構(gòu)的遷移——讓系統(tǒng)更穩(wěn)定 27
1.5.1 遷移到微服務(wù)架構(gòu)需要考慮的因素 28
1.5.2 遷移到微服務(wù)架構(gòu)的步驟 29
-
第2章 幾張圖了解后端系統(tǒng) 31
▲2.1 一張圖看懂整個后端系統(tǒng)架構(gòu) 31
2.1.1 CDN(內(nèi)容分發(fā)網(wǎng)絡(luò)) 32
2.1.2 負載均衡器 33
2.1.3 API網(wǎng)關(guān) 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 服務(wù)配置與管理 48
2.1.10 服務(wù)注冊與發(fā)現(xiàn) 49
2.1.11 服務(wù)治理與監(jiān)控 51
2.1.12 服務(wù)追蹤 52
▲2.2 一張圖看懂分布式架構(gòu)的組成 53
▲2.3 一張圖看懂本書的核心內(nèi)容 55
-
第3章 微服務(wù)間的交互 60
▲3.1 為何微服務(wù)間需要交互 60
3.1.1 對比單體應(yīng)用與微服務(wù)應(yīng)用的交互模式 60
3.1.2 在電商系統(tǒng)中,用戶下單業(yè)務(wù)的服務(wù)交互流程 63
3.1.3 【實戰(zhàn)】基于Spring Cloud實現(xiàn)服務(wù)之間的交互 64
▲3.2 微服務(wù)間的通信方式——同步通信與異步通信 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——事件驅(qū)動 78
3.2.7 【實戰(zhàn)】基于Spring Boot實現(xiàn)異步通信 79
▲3.3 服務(wù)間的通信協(xié)議——從HTTP到gRPC 82
3.3.1 HTTP、REST和RESTful流行的主要原因 83
3.3.2 RESTful設(shè)計的痛點及解決辦法 84
3.3.3 【實戰(zhàn)】基于Spring Boot搭建一個RESTful產(chǎn)品信息服務(wù) 85
3.3.4 為何越來越多企業(yè)選擇gRPC 87
3.3.5 gRPC在電商系統(tǒng)中的應(yīng)用 88
3.3.6 對比gRPC與HTTP 88
3.3.7 【實戰(zhàn)】從零搭建gRPC服務(wù) 89
-
第2篇 分布式技術(shù)專項
-
第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)絡(luò)通信的工作原理 100
4.1.6 Socket網(wǎng)絡(luò)通信在電商系統(tǒng)中的應(yīng)用 102
4.1.7 【實戰(zhàn)】基于Socket實現(xiàn)網(wǎng)絡(luò)通信 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時鐘跟蹤事件因果關(guān)系 111
▲4.3 CAP定理——三者不可兼得 114
4.3.1 CAP定理基礎(chǔ) 114
4.3.2 網(wǎng)絡(luò)分區(qū) 115
4.3.3 CAP定理在電商系統(tǒng)中的應(yīng)用 116
4.3.4 高并發(fā)系統(tǒng)中一致性與可用性的權(quán)衡 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ù)恢復(fù)與自動故障轉(zhuǎn)移——節(jié)點出現(xiàn)故障時的處理方案 130
▲5.2 分布式關(guān)系數(shù)據(jù)庫 130
5.2.1 分布式關(guān)系數(shù)據(jù)庫的優(yōu)缺點 131
5.2.2 【實戰(zhàn)】對電商系統(tǒng)進行分庫分表 131
5.2.3 主從復(fù)制的工作原理 134
5.2.4 【實戰(zhàn)】配置主從復(fù)制 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基礎(chǔ) 140
5.3.3 【實戰(zhàn)】操作MongoDB中的商品信息 142
5.3.4 Redis基礎(chǔ) 143
5.3.5 【實戰(zhàn)】使用Redis緩存和檢索用戶的瀏覽歷史 145
5.3.6 Cassandra基礎(chǔ) 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 未授權(quán)訪問 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的架構(gòu) 165
6.1.2 HDFS數(shù)據(jù)的存儲與復(fù)制 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)關(guān)系數(shù)據(jù)庫的區(qū)別 176
6.2.2 HBase的數(shù)據(jù)模型及架構(gòu) 177
6.2.3 HBase的存儲原理 180
6.2.4 HBase的高可用機制與故障恢復(fù)機制 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的集群架構(gòu)和文檔的讀寫原理 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章 分布式事務(wù)——確保分布式系統(tǒng)中的數(shù)據(jù)一致性 218
▲7.1 什么是分布式事務(wù) 218
7.1.1 三張圖看懂分布式事務(wù) 218
7.1.2 分布式事務(wù)面臨的挑戰(zhàn)及應(yīng)對策略 220
▲7.2 分布式事務(wù)的提交機制——兩階段提交與三階段提交 221
7.2.1 兩階段提交的工作原理 221
7.2.2 兩階段提交帶來的問題——死鎖和性能瓶頸 222
7.2.3 三階段提交的工作原理 223
7.2.4 對比三階段提交與兩階段提交 224
▲7.3 Saga模式——長事務(wù)的解決方案 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 分布式事務(wù)的其他解決方案 232
7.4.1 TCC模式——解決復(fù)雜業(yè)務(wù)中跨表和跨庫資源鎖定問題 232
7.4.2 最大努力通知模式——確保數(shù)據(jù)的最終一致性 235
7.4.3 可靠消息最終一致性策略——確保接收消息的可靠性 237
▲7.5 分布式事務(wù)的企業(yè)級應(yīng)用 238
7.5.1 亞馬遜、谷歌、阿里巴巴如何處理分布式事務(wù) 238
7.5.2 阿里巴巴Seata框架的工作原理 239
▲7.6 分布式鎖——解決分布式系統(tǒng)中的并發(fā)控制問題 241
7.6.1 ZooKeeper的集群架構(gòu)和數(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的集群架構(gòu) 255
8.2.3 Kafka處理海量消息的原理 256
8.2.4 【實戰(zhàn)】構(gòu)建一個分布式、高性能的Kafka集群 258
▲8.3 RabbitMQ——高可用的消息隊列系統(tǒng) 260
8.3.1 RabbitMQ的工作原理 260
8.3.2 RabbitMQ在電商系統(tǒng)中的應(yī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è)務(wù)需求選擇合適的消息中間件 271
▲8.6 在微服務(wù)中利用消息中間件實現(xiàn)事件驅(qū)動 273
▲8.7 在分布式存儲和計算中使用消息中間件 274
8.7.1 【實戰(zhàn)】進行分布式系統(tǒng)的數(shù)據(jù)同步和復(fù)制 274
8.7.2 【實戰(zhàn)】用消息中間件和日志收集工具進行日志處理 275
8.7.3 【實戰(zhàn)】構(gòu)建一個搜索引擎用戶行為分析系統(tǒng) 278
-
第3篇 高可用與數(shù)據(jù)安全策略
-
第9章 冗余備份——數(shù)據(jù)的備份和容災(zāi)策略 284
▲9.1 兩張圖看懂冗余備份 284
▲9.2 選擇合適的冗余備份策略 286
9.2.1 【實戰(zhàn)】熱備、冷備和溫備在電商系統(tǒng)中的應(yīng)用 286
9.2.2 【實戰(zhàn)】通過數(shù)據(jù)冗余和應(yīng)用冗余應(yīng)對流量激增 291
9.2.3 【實戰(zhàn)】利用RAID技術(shù)實現(xiàn)磁盤冗余,提高數(shù)據(jù)可靠性 293
9.2.4 【實戰(zhàn)】基于AWS S3服務(wù)實現(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)境中實施備份技術(shù) 298
9.3.3 【實戰(zhàn)】在系統(tǒng)故障時利用備份數(shù)據(jù)進行快速恢復(fù) 300
-
第10章 高可用與異地多活——提高系統(tǒng)的穩(wěn)定性和故障恢復(fù)能力 302
▲10.1 一張圖看懂高可用 302
▲10.2 設(shè)計一個高可用架構(gòu) 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ā)場景下,使用“熔斷”防止服務(wù)雪崩 316
10.2.5 【實戰(zhàn)】在高并發(fā)場景下,使用“降級”應(yīng)對性能瓶頸 319
▲10.3 利用容器化技術(shù)部署和管理項目 323
10.3.1 什么是Docker 323
10.3.2 【實戰(zhàn)】利用Docker快速部署電商系統(tǒng)的商品服務(wù) 324
10.3.3 什么是Kubernetes 325
10.3.4 在項目開發(fā)中,何時用Docker,何時用Kubernetes 327
10.3.5 【實戰(zhàn)】利用Kubernetes管理電商系統(tǒng)的各個服務(wù) 328
▲10.4 【實戰(zhàn)】大型在線游戲的高可用策略 330
10.4.1 負載均衡與集群化 330
10.4.2 數(shù)據(jù)冗余與備份 330
10.4.3 容災(zāi)與故障恢復(fù) 331
10.4.4 無縫更新與維護 331
▲10.5 異地多活——多地區(qū)數(shù)據(jù)中心的部署策略 334
10.5.1 一張圖看懂異地多活 334
10.5.2 異地多活與高可用、容災(zāi)的關(guān)系 337
-
第4篇 分布式系統(tǒng)項目設(shè)計
-
第11章 【項目實戰(zhàn)】支持5000萬用戶同時在線的短視頻系統(tǒng)設(shè)計 340
▲11.1 業(yè)務(wù)分析 340
11.1.1 需求分析 340
11.1.2 業(yè)務(wù)流程分析 341
▲11.2 架構(gòu)設(shè)計 341
▲11.3 存儲設(shè)計 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 利用編碼技術(shù)優(yōu)化視頻帶寬 355
▲11.6 視頻個性化推薦設(shè)計 356
11.6.1 數(shù)據(jù)收集與預(yù)處理 357
11.6.2 特征提取與用戶畫像構(gòu)建 358
-
第12章 【項目實戰(zhàn)】日均訂單量8000萬的外賣系統(tǒng)設(shè)計 363
▲12.1 業(yè)務(wù)需求 363
▲12.2 微服務(wù)架構(gòu)設(shè)計 364
▲12.3 數(shù)據(jù)庫選擇與設(shè)計 365
▲12.4 緩存設(shè)計 366
12.4.1 使用Redis和Memcached緩存數(shù)據(jù) 366
12.4.2 構(gòu)建外賣系統(tǒng)的緩存架構(gòu) 368
▲12.5 外賣員派單系統(tǒng)設(shè)計 369
12.5.1 實時更新外賣員的地理位置 369
12.5.2 設(shè)計外賣員派單算法 372