分佈式系統開發實戰
柳偉衛
買這商品的人也買了...
-
$475從 Paxos 到 Zookeeper:分佈式一致性原理與實踐
-
$490$382 -
$450$356 -
$265Web API 的設計與開發 (Web API : the Good Parts)
-
$650$507 -
$500$390 -
$474$450 -
$653數據密集型應用系統設計 (Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems)
-
$480$379 -
$480$408 -
$720$562 -
$780$663 -
$556MySQL 是怎樣運行的 -- 從根兒上理解 MySQL
-
$474$450 -
$580$435 -
$1,000$660 -
$734掌握分佈式跟蹤:微服務和復雜系統性能分析
-
$780$616 -
$520$390 -
$780$616 -
$800$632 -
$580$458 -
$650$507 -
$600$468 -
$620$484
相關主題
商品描述
本書從原理和實踐角度全面介紹如何設計分佈式系統。內容包括節點、通信、並發與並行、面向對象的分佈式架構、面向服務的分佈式架構、面向消息的分佈式架構、 EST 風格的架構、微服務架構、 Serverless 架構、 Cloud Native 架構、虛擬化與容器技術、分佈式計算、分佈式存儲、分佈式監控、分佈式版本控制、數據一致性、分佈式事務、安全性、可用性等,內容豐富、案例新穎,相關理論與技術實踐較為前瞻。本書最後還提供了一個綜合實戰案例,手把手教讀者如何來基於Spring Cloud 技術來實現微服務架構。
作者簡介
在多家知名IT 公司擔任項目經理、架構師、高級開發顧問等職位,具有多年軟件開發管理及系統架構經驗。
負責過多個省、***大型分佈式系統的設計與研發,參與了多個大型項目的微服務架構的技術改造,在實際工作中,積累了大量的分佈式系統及微服務架構經驗。
業餘時間創建了waylau.com 網站,用於分享個人技術心得。
喜歡開源,長期躍於各大開源社區,是CSDN、 開源中國、雲棲社區等技術社區專家。
為開源社區無私編著了《Spring Framework 4.x參考文檔》、《Netty 實戰(精髓)》、《REST 實戰》、《分佈式Java》、《Spring Boot 教程》、《Spring Security 教程》、《Thymeleaf 教程》等近30餘篇技術教程,廣受網友好評。其中出版了《分佈式系統常用技術及案例分析》、《Spring Boot 企業級應用開發實戰》、《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