分散式系統開發實戰

分散式系統開發實戰

《分散式系統開發實戰》是人民郵電出版社2021年3月出版的書籍,本書從原理和實踐角度全面介紹如何設計分散式系統。

基本介紹

  • 中文名:分散式系統開發實戰
  • 作者:柳偉衛
  • 出版社:人民郵電出版社
  • ISBN:9787115541017
內容簡介,圖書目錄,作者簡介,

內容簡介

本書從原理和實踐角度全面介紹如何設計分散式系統。內容包括節點、通信、並發與並行、面向對象的分散式架構、面向服務的分散式架構、面向訊息的分散式架構、 EST 風格的架構、微服務架構、 Serverless 架構、 Cloud Native 架構、虛擬化與容器技術、分散式計算、分散式存儲、分散式監控、分散式版本控制、數據一致性、分散式事務、安全性、可用性等,內容豐富、案例新穎,相關理論與技術實踐較為前瞻。本書最後還提供了一個綜合實戰案例,手把手教讀者如何來基於Spring Cloud 技術來實現微服務架構。

圖書目錄

第1章 分散式系統概述 1
1.1 什麼是分散式系統 1
1.2 分散式系統常用術語 2
1.3 集中式系統與分散式系統 3
1.4 分散式系統特徵 4
1.5 設計分散式系統所面臨的挑戰 5
1.6 本章小結 6
1.7 習題 6
第2章 節點 7
2.1 什麼是執行緒 7
2.2 進程和執行緒 8
2.3 執行緒和纖程 8
2.4 程式語言中的執行緒對象 9
2.4.1 定義和啟動一個執行緒 9
2.4.2 暫停執行緒執行 9
2.4.3 中斷執行緒 10
2.4.4 等待另一個執行緒完成 11
2.5 節點之間的通信 11
2.5.1 訊息丟失 11
2.5.2 訊息亂序 12
2.5.3 數據錯誤 12
2.5.4 不可靠的TCP 12
2.6 本章小結 12
2.7 習題 13
第3章 通信 14
3.1 本地過程調用 14
3.1.1 本地過程調用的概念 14
3.1.2 本地過程調用的實現 14
3.2 遠程過程調用 16
3.2.1 遠程過程調用原理 16
3.2.2 如何實現遠程過程調用 18
3.2.3 遠程過程調用API 20
3.2.4 遠程過程調用發展歷程 20
3.3 常用網路I/O模型 21
3.3.1 阻塞I/O模型 21
3.3.2 非阻塞I/O模型 22
3.3.3 I/O復用模型 22
3.3.4 信號驅動I/O模型 23
3.3.5 異步I/O模型 23
3.3.6 幾種I/O模型的比較 24
3.4 I/O操作中的常用術語 25
3.4.1 阻塞和非阻塞 25
3.4.2 同步與異步 25
3.4.3 總結 25
3.5 實戰:在Java中實現常用網路I/O模型 26
3.5.1 Java OIO 26
3.5.2 Java NIO 29
3.5.3 Java AIO 33
3.6 事件驅動 37
3.6.1 事件驅動編程 37
3.6.2 事件循環的實現 38
3.6.3 Reactor模型 38
3.6.4 Proactor模型 40
3.7 本章小結 41
3.8 習題 41
第4章 並發與並行 42
4.1 並發與並行的區別 42
4.2 執行緒與並發 43
4.3 並髮帶來的風險 43
4.3.1 死鎖 44
4.3.2 飢餓 45
4.3.3 活鎖 45
4.4 解決並發風險 45
4.4.1 同步 45
4.4.2 原子訪問 49
4.5 提升系統並發能力 49
4.5.1 無鎖化設計提升並發能力 49
4.5.2 快取提升並發能力 49
4.5.3 更細顆粒度的並發單元 50
4.6 本章小結 50
4.7 習題 50
第5章 面向對象的分散式架構 51
5.1 基於對象的分散式架構 51
5.2 常用的分散式對象系統 52
5.2.1 微軟DCOM 52
5.2.2 CORBA 53
5.2.3 Java RMI 54
5.3 分散式對象系統優缺點 57
5.4 實戰:基於Java RMI實現分散式對象通信 57
5.4.1 示例概述 57
5.4.2 編寫RMI伺服器 58
5.4.3 編寫RMI客戶端 60
5.4.4 運行 61
5.5 本章小結 61
5.6 習題 62
第6章 面向服務的分散式架構 63
6.1 什麼是面向服務的架構 63
6.2 SOA的基本概念 64
6.3 基於Web服務的SOA 65
6.3.1 XML-RPC 66
6.3.2 SOAP 66
6.3.3 Microsoft .NET Remoting 69
6.3.4 Java中的XML Web服務 75
6.3.5 超越SOAP 75
6.3.6 SOA的演變 76
6.4 Web服務的分類 76
6.4.1 “大”Web服務 76
6.4.2 RESTful Web服務 77
6.4.3 Web服務技術選型 77
6.5 實戰:基於JAX-WS實現Web服務 78
6.5.1 JAX-WS概述 78
6.5.2 創建Web伺服器和客戶端的基本步驟 78
6.5.3 JAX-WS終端要求 79
6.5.4 創建基於JAX-WS的伺服器 79
6.5.5 創建基於JAX-WS的客戶端 80
6.5.6 運行 80
6.6 本章小結 82
6.7 習題 82
第7章 面向訊息的分散式架構 83
7.1 什麼是面向訊息的分散式架構 83
7.1.1 常用術語 83
7.1.2 使用場景 83
7.1.3 常用技術 84
7.2 常見訊息中間件產品介紹 84
7.2.1 Apache ActiveMQ 84
7.2.2 RabbitMQ 85
7.2.3 Apache RocketMQ 86
7.3 訊息通信常用模式 88
7.3.1 工作佇列 88
7.3.2 發布/訂閱 89
7.3.3 路由 90
7.3.4 主題 91
7.3.5 RPC 92
7.4 了解JMS規範 94
7.4.1 JMS訊息風格 94
7.4.2 JMS接口 95
7.5 實戰:基於JMS的訊息傳送和接收 96
7.5.1 項目概述 96
7.5.2 項目配置 97
7.5.3 編碼實現 99
7.5.4 運行 104
7.6 本章小結 107
7.7 習題 108
第8章 REST風格的架構 109
8.1 什麼是REST 109
8.2 REST設計原則 110
8.3 成熟度模型 111
8.3.1 第0級:使用HTTP作為傳輸方式 111
8.3.2 第 1級:引入了資源的概念 113
8.3.3 第 2級:根據語義使用HTTP動詞 113
8.3.4 第3級:使用HATEOAS 114
8.4 REST API管理 116
8.5 常用技術 118
8.5.1 JAX-RS規範 118
8.5.2 Jersey 123
8.5.3 Apache CXF 123
8.5.4 Spring Web MVC 124
8.6 實戰:基於Java實現REST API 124
8.6.1 基於Jersey來構建REST服務 124
8.6.2 基於Apache CXF來構建REST服務 131
8.6.3 基於Spring Web MVC來構建REST服務 140
8.7 本章小結 145
8.8 習題 145
第9章 微服務架構 146
9.1 什麼是微服務架構 146
9.2 微服務架構與SOA架構的區別 147
9.2.1 單體架構的例子 147
9.2.2 微服務架構的例子 148
9.3 何時採用微服務架構 150
9.4 常用技術 150
9.4.1 Jetty HTTP Server 151
9.4.2 構建REST程式 151
9.4.3 運行 153
9.5 實戰:基於Spring Boot實現微服務 153
9.5.1 配置環境 153
9.5.2 REST API設計 154
9.5.3 編寫程式代碼 155
9.5.4 安裝REST客戶端 159
9.5.5 運行、測試程式 160
9.6 微服務與通信 160
9.6.1 HTTP通信 161
9.6.2 訊息通信 161
9.6.3 事件驅動的通信 161
9.7 了解CQRS 162
9.7.1 CQRS概述 162
9.7.2 CQRS與Event Sourcing的關係 163
9.7.3 CQRS好處 164
9.8 實戰:基於CQRS微服務通信 164
9.8.1 配置 165
9.8.2 Aggregate 165
9.8.3 Command 168
9.8.4 Event 169
9.8.5 測試 170
9.9 本章小結 171
9.10 習題 171
第 10章 Serverless架構 172
10.1 什麼是Serverless架構 172
10.2 Serverless架構的典型套用 173
10.2.1 UI驅動的套用 173
10.2.2 訊息驅動的套用 174
10.3 常見的Serverless架構 175
10.3.1 AWS Lambda 175
10.3.2 Google Cloud Functions 175
10.3.3 Iron.io 175
10.3.4 IBM OpenWhisk 175
10.3.5 Serverless Framework 176
10.3.6 Azure WebJobs 176
10.4 Serverless架構原則 176
10.4.1 根據需要使用計算服務執行代碼 177
10.4.2 編寫單一用途的無狀態函式 177
10.4.3 設計基於推送的、事件驅動的管道 177
10.4.4 創建更粗實、更強大的前端 177
10.4.5 擁抱第三方服務 178
10.5 實戰:使用AWS平台實現Serverless架構 178
10.6 本章小結 182
10.7 習題 182
第 11章 Cloud Native架構 183
11.1 Cloud Native概述 183
11.1.1 軟體需求的發展 183
11.1.2 開發方式的巨變 184
11.1.3 雲是大勢所趨 185
11.2 Cloud Native特性 185
11.2.1 以云為基礎架構 186
11.2.2 雲服務 186
11.2.3 無服務 186
11.2.4 可擴展 187
11.2.5 高可用 189
11.2.6 敏捷 190
11.2.7 雲優先 190
11.3 12-Factor 191
11.3.1 基準代碼 192
11.3.2 依賴 192
11.3.3 配置 193
11.3.4 後端服務 193
11.3.5 構建、發布、運行 193
11.3.6 進程 194
11.3.7 連線埠綁定 194
11.3.8 並發 195
11.3.9 易處理 196
11.3.10 開發環境與線上環境等價 196
11.3.11 日誌 196
11.3.12 管理進程 197
11.4 Cloud Native成功案例分析 197
11.4.1 Amazon 197
11.4.2 Netflix 198
11.4.3 淘寶網 199
11.5 Cloud Native與微服務架構的關係 201
11.6 Cloud Native與Serverless架構的關係 201
11.7 Cloud Native的優點及面臨的挑戰 201
11.7.1 Cloud Native優點 201
11.7.2 Cloud Native不是“銀彈” 202
11.7.3 面臨的挑戰 203
11.8 本章小結 203
11.9 習題 203
第 12章 虛擬化與容器技術 204
12.1 虛擬化技術 204
12.2 容器與虛擬機 204
12.2.1 成熟度方面的比較 205
12.2.2 啟動速度的比較 205
12.2.3 安全方面的比較 205
12.2.4 性能方面的比較 206
12.3 基於容器的持續部署 206
12.3.1 持續部署管道 207
12.3.2 測試 207
12.3.3 構建 208
12.3.4 部署 209
12.3.5 藍-綠部署 209
12.3.6 運行預集成以及集成後測試 210
12.3.7 回滾與清理 211
12.3.8 決定每個步驟的執行環境 212
12.3.9 完成整個持續部署流 212
12.4 容器技術與微服務架構 212
12.4.1 基於Google Kubernetes架構 213
12.4.2 基於DaoCloud DCE架構 213
12.5 容器技術與Cloud Native架構 213
12.6 實戰:基於Docker發布微服務 214
12.6.1 創建微服務 214
12.6.2 微服務容器化 214
12.6.3 使用Gradle來構建Docker image 215
12.6.4 運行image 216
12.6.5 訪問套用 217
12.6.6 關閉容器 217
12.6.7 Docker發布微服務 217
12.7 本章小結 217
12.8 習題 217
第 13章 分散式計算 218
13.1 分散式計算概述 218
13.2 分散式計算套用場景 218
13.3 分散式計算常用技術 219
13.3.1 MapReduce 219
13.3.2 Apache Hadoop 221
13.3.3 Apache Spark 222
13.4 實戰:基於Spark詞頻統計 223
13.4.1 項目概述 224
13.4.2 項目配置 224
13.4.3 編碼實現 224
13.4.4 運行 225
13.5 本章小結 227
13.6 習題 227
第 14章 分散式存儲 228
14.1 分散式存儲概述 228
14.2 分散式存儲套用場景 228
14.3 分散式存儲常用技術 229
14.3.1 Bigtable 229
14.3.2 Apache HBase 231
14.3.3 Apache Cassandra 233
14.3.4 Memcached 235
14.3.5 Redis 237
14.3.6 MongoDB 237
14.4 實戰:基於MongoDB檔案伺服器 239
14.4.1 檔案伺服器的需求 239
14.4.2 所需技術 239
14.4.3 檔案伺服器的實現 241
14.4.4 運行 247
14.4.5 其他配置項 247
14.5 本章小結 248
14.6 習題 248
第 15章 分散式監控 249
15.1 分散式監控概述 249
15.2 分散式監控套用場景 249
15.3 分散式監控常用技術 249
15.3.1 Nagios 250
15.3.2 Zabbix 250
15.3.3 Consul 253
15.3.4 ZooKeeper 255
15.4 實戰:基於ZooKeeper的服務註冊和發現 258
15.4.1 項目概述 258
15.4.2 項目配置 258
15.4.3 編碼實現 259
15.4.4 運行 262
15.5 本章小結 264
15.6 習題 264
第 16章 分散式版本控制 265
16.1 版本控制系統簡史 265
16.2 集中式與分散式版本控制系統 265
16.3 常用技術 266
16.3.1 Bazaar 266
16.3.2 Mercurial 266
16.3.3 Git 267
16.4 了解Git Flow 269
16.4.1 分支定義 269
16.4.2 新功能開發工作流 269
16.4.3 Bug修復工作流 270
16.4.4 版本發布工作流 270
16.5 本章小結 271
16.6 習題 271
第 17章 數據一致性 272
17.1 什麼是CAP理論 272
17.2 為什麼CAP只能三選二 273
17.3 CAP常見模型 274
17.3.1 犧牲分區容錯性(CA模型) 274
17.3.2 犧牲可用性(CP模型) 274
17.3.3 犧牲一致性(AP模型) 274
17.4 CAP的意義及發展 275
17.4.1 CAP發展 275
17.4.2 BASE 275
17.5 以數據為中心的一致性模型 276
17.5.1 嚴格一致性 276
17.5.2 持續一致性 276
17.5.3 順序一致性 276
17.5.4 因果一致性 276
17.5.5 入口一致性 276
17.6 以客戶為中心的一致性模型 277
17.6.1 單調讀一致性 277
17.6.2 單調寫一致性 277
17.6.3 讀寫一致性 277
17.6.4 寫讀一致性 277
17.7 本章小結 278
17.8 習題 278
第 18章 分散式事務 279
18.1 本地事務 279
18.1.1 一個銀行轉賬的例子 279
18.1.2 事務隔離級別 280
18.2 分散式事務面臨的挑戰 282
18.3 節點複製 283
18.3.1 Master-Slave複製 283
18.3.2 Master-Master多主複製 283
18.4 兩階段提交 283
18.4.1 準備階段 284
18.4.2 提交階段 284
18.4.3 兩階段提交狀態機 284
18.4.4 兩階段提交的缺陷 285
18.5 三階段提交 285
18.5.1 CanCommit 285
18.5.2 PreCommit 286
18.5.3 DoCommit 286
18.5.4 三階段提交狀態機 286
18.5.5 三階段提交的缺陷 287
18.6 Paxos算法 287
18.6.1 問題描述 287
18.6.2 提案的選定 288
18.6.3 獲取被選定的提案值 289
18.6.4 進展性 290
18.6.5 實現 290
18.6.6 總結 291
18.6.7 缺陷 292
18.7 Raft算法 292
18.7.1 Raft概述 293
18.7.2 複製狀態機 293
18.7.3 Raft算法基礎 294
18.7.4 Raft算法Leader選舉 296
18.7.5 Raft算法日誌同步 297
18.7.6 Raft算法安全性 299
18.7.7 處理Follower和Candidate異常 302
18.7.8 時間要求及可用性 302
18.7.9 集群成員關係變更 303
18.7.10 日誌壓縮 305
18.7.11 客戶端互動 306
18.7.12 總結 307
18.8 訊息 307
18.8.1 本地訊息表 308
18.8.2 事務訊息 308
18.8.3 如何保障冪等性 309
18.8.4 總結 310
18.9 本章小結 310
18.10 習題 310
第 19章 安全性 311
19.1 基本概念 311
19.1.1 安全威脅、策略和機制 311
19.1.2 密碼與數字簽名 312
19.2 加密算法 313
19.2.1 對稱加密 313
19.2.2 使用對稱密鑰加密的數字簽名 313
19.2.3 非對稱加密 314
19.2.4 使用公鑰加密的數字簽名 315
19.3 安全通道 315
19.3.1 SSL/TLS 315
19.3.2 SSL握手過程 316
19.3.3 HTTPS 318
19.4 訪問控制 318
19.4.1 防火牆 319
19.4.2 堡壘機 319
19.4.3 拒絕服務 319
19.4.4 訪問控制的模型 320
19.5 實戰:基於Spring Security實現安全認證 320
19.5.1 添加依賴 321
19.5.2 添加業務代碼 322
19.5.3 配置訊息轉換器 322
19.5.4 配置Spring Security 323
19.5.5 創建套用配置類 324
19.5.6 創建內嵌Jetty的伺服器 324
19.5.7 套用啟動器 325
19.5.8 運行套用 326
19.6 本章小結 327
19.7 習題 327
第 20章 可用性 328
20.1 故障不可避免 328
20.2 使用冗餘提升系統可用性 328
20.3 常用副本控制協定 329
20.3.1 中心化副本控制協定 329
20.3.2 primary-secondary協定 329
20.3.3 去中心化副本控制協定 331
20.4 負載均衡技術 332
20.4.1 客戶端發現模式 332
20.4.2 服務端發現模式 333
20.5 實戰:基於NGINX實現服務高可用 334
20.5.1 配置負載均衡 334
20.5.2 負載均衡常用算法 335
20.5.3 實現Web服務的高可用 336
20.5.4 運行 336
20.6 本章小結 337
20.7 習題 337
第 21章 綜合實戰:基於Spring Cloud的微服務架構設計與實現 338
21.1 Spring Cloud概述 338
21.1.1 什麼是Spring Cloud 338
21.1.2 Spring Cloud與Spring Boot的關係 339
21.2 Spring Cloud入門配置 339
21.2.1 Maven配置 339
21.2.2 Gradle配置 340
21.2.3 聲明式方法 340
21.3 Spring Cloud的子項目介紹 341
21.3.1 Spring Cloud子項目的組成 341
21.3.2 Spring Cloud組件的版本 342
21.4 實現微服務的註冊與發現 343
21.4.1 服務發現的意義 343
21.4.2 如何集成Eureka Server 343
21.4.3 如何集成Eureka Client 347
21.4.4 實現服務的註冊與發現 347
21.5 本章小結 348
21.6 習題 348
附錄 本書所涉及的軟體及相關版本 349
參考文獻 350

作者簡介

在多家知名 IT 公司擔任項目經理、架構師、高級開發顧問等職位,具有多年軟體開發管理及系統架構經驗。負責過多個省、大型分散式系統的設計與研發,參與了多個大型項目的微服務架構的技術改造,在實際工作中,積累了大量的分散式系統及微服務架構經驗。業餘時間創建了 waylau.com 網站,用於分享個人技術心得。喜歡開源,長期躍於各大開源社區,是 CSDN、 開源中國、雲棲社區等技術社區專家。為開源社區無私編著了《Spring Framework 4.x參考文檔》、《Netty 實戰(精髓)》、《REST 實戰》、《分散式 Java》、《Spring Boot 教程》、《Spring Security 教程》、《Thymeleaf 教程》等近30餘篇技術教程,廣受網友好評。其中出版了《分散式系統常用技術及案例分析》、《Spring Boot 企業級套用開發實戰》、《Spring Cloud 微服務架構開發實戰》等專著。

相關詞條

熱門詞條

聯絡我們