Spring Cloud微服務(wù)和分布式系統(tǒng)實踐
定 價:119 元
叢書名:微服務(wù)
- 作者:楊開振
- 出版時間:2020/5/1
- ISBN:9787115532206
- 出 版 社:人民郵電出版社
- 中圖法分類:TP368.5
- 頁碼:514
- 紙張:
- 版次:01
- 開本:16開
《Spring Cloud微服務(wù)和分布式系統(tǒng)實踐》從企業(yè)的真實需求出發(fā),理論結(jié)合實際,深入講解Spring Cloud微服務(wù)和分布式系統(tǒng)的知識。書中既包括Spring Cloud微服務(wù)的各類常用組件的講解,又包括分布式系統(tǒng)的常用知識的介紹。Spring Cloud組件方面主要講解服務(wù)注冊和服務(wù)發(fā)現(xiàn)(Eureka)、服務(wù)調(diào)用(Ribbon和OpenFeign)、斷路器(Hystrix和Resilience4j)、網(wǎng)關(guān)(Zuul和Gateway)、配置(Config)、全鏈路追蹤(Sleuth)、微服務(wù)的監(jiān)控(Admin)等;分布式系統(tǒng)方面主要講解分布式數(shù)據(jù)庫、分布式緩存、會話和權(quán)限以及發(fā)號機制等。本書的實踐部分通過Apache Thrift講解了遠程過程調(diào)用(RPC)在分布式系統(tǒng)中的應(yīng)用,并且分析了處理高并發(fā)的一些常用方法,最后還通過一個簡單的實例講解了微服務(wù)系統(tǒng)的搭建。
本書適合想要學習Spring Cloud微服務(wù)、分布式系統(tǒng)開發(fā)的各類Java開發(fā)人員閱讀,包括初學者和開發(fā)工程師。本書對架構(gòu)師也有一定的幫助。
- 結(jié)合實踐講解Spring Cloud 微服務(wù)系統(tǒng)基礎(chǔ)組件的原理和應(yīng)用
- 結(jié)合微服務(wù)講解分布式系統(tǒng)的相關(guān)知識
- 結(jié)合企業(yè)真實需求講解微服務(wù)(分布式)系統(tǒng)的開發(fā)
- 基于Spring Boot 2.x和Greenwich.RELEASE進行講解。
本書是講述Spring Cloud微服務(wù)及其組件的專業(yè)技術(shù)書籍。微服務(wù)系統(tǒng)作為分布式系統(tǒng)的一種形式,必然會帶有分布式系統(tǒng)的各種弊病,因此本書也會介紹分布式系統(tǒng)的一些常見知識,以更好滿足企業(yè)構(gòu)建系統(tǒng)的需求。
本書首先介紹分布式系統(tǒng)和微服務(wù)的概念以及技術(shù)基礎(chǔ);然后介紹Spring Cloud的主要組件,包含服務(wù)治理和服務(wù)發(fā)現(xiàn)、服務(wù)調(diào)用、斷路器、API網(wǎng)關(guān)、服務(wù)配置和服務(wù)監(jiān)控等,這部分是本書的主要內(nèi)容;接著介紹企業(yè)實踐中經(jīng)常用到的分布式技術(shù),包括分布式數(shù)據(jù)庫事務(wù)、分布式Redis緩存等;最后介紹遠程過程調(diào)用(RPC)以及微服務(wù)設(shè)計和高并發(fā)實踐。
楊開振,精通Java互聯(lián)網(wǎng)技術(shù),擁有十余年企業(yè)一線開發(fā)和實踐經(jīng)驗,著有《深入淺出Spring Boot 2.x》《深入淺出MyBatis技術(shù)原理與實戰(zhàn)》《Java EE互聯(lián)網(wǎng)輕量級框架整合開發(fā)——SSM框架(Spring MVC+Spring+MyBatis)和Redis實現(xiàn)》等業(yè)內(nèi)暢銷書。
目 錄
第 一部分 概述和基礎(chǔ)
第 1章 分布式和微服務(wù)概述 3
1.1 互聯(lián)網(wǎng)系統(tǒng)的特征 4
1.2 分布式系統(tǒng)概述 4
1.2.1 分布式的切分方法 5
1.2.2 分布式系統(tǒng)所面臨的問題 8
1.2.3 分布式的衡量標準 9
1.3 分布式系統(tǒng)的設(shè)計原則 10
1.3.1 CAP原則 10
1.3.2 BASE理論 11
1.4 微服務(wù)架構(gòu) 12
1.4.1 概述 12
1.4.2 微服務(wù)的風格 12
1.4.3 微服務(wù)和分布式系統(tǒng)的關(guān)系 15
1.5 Spring Cloud 15
1.5.1 Spring Cloud的各個組件的簡介 16
1.5.2 Spring Cloud版本說明 16
1.6 微服務(wù)系統(tǒng)樣例簡介 17
第 2章 技術(shù)基礎(chǔ) 19
2.1 Spring Boot 19
2.1.1 創(chuàng)建Spring Boot工程 19
2.1.2 Spring Boot開發(fā)簡介 21
2.1.3 多文件配置 25
2.1.4 打包和運行 27
2.1.5 Spring Boot監(jiān)控 28
2.1.6 Spring Boot小結(jié) 29
2.2 REST風格簡介 29
2.2.1 REST風格概述 30
2.2.2 REST風格端點開發(fā) 31
2.2.3 狀態(tài)碼和響應(yīng)頭 35
2.2.4 客戶端RestTemplate的使用 38
第二部分 Spring Cloud微服務(wù)
第3章 服務(wù)治理——Eureka 43
3.1 服務(wù)治理中心 43
3.1.1 搭建Eureka服務(wù)治理中心 43
3.1.2 服務(wù)發(fā)現(xiàn) 47
3.1.3 多個服務(wù)治理中心實例 51
3.2 Eureka治理機制 54
3.2.1 基礎(chǔ)架構(gòu) 54
3.2.2 服務(wù)治理中心工作原理 57
3.2.3 Region和Zone 60
3.2.4 Eureka關(guān)鍵源碼解讀 62
3.2.5 Eureka使用注意點 69
3.3 Eureka配置 69
3.3.1 客戶端服務(wù)注冊配置 70
3.3.2 客戶端服務(wù)實例配置 71
第4章 客戶端負載均衡——Ribbon 73
4.1 負載均衡概述 73
4.2 初識Ribbon 74
4.2.1 Ribbon概述 74
4.2.2 Ribbon是如何實現(xiàn)負載均衡的 75
4.3 Ribbon負載均衡器和策略 80
4.3.1 負載均衡器 80
4.3.2 負載均衡策略 84
4.4 Ribbon服務(wù)實例清單維護 93
4.4.1 獲取服務(wù)實例清單 94
4.4.2 更新服務(wù)實例清單 96
4.4.3 服務(wù)實例的心跳監(jiān)測 97
4.4.4 IPing接口 99
4.5 自定義Ribbon客戶端 100
4.5.1 全局配置 101
4.5.2 局部定義 101
4.6 Ribbon使用實踐 103
第5章 斷路器——Hystrix 105
5.1 概述 105
5.1.1 熔斷的概念 105
5.1.2 服務(wù)降級 107
5.1.3 Hystrix的功能簡介 108
5.2 入門實例 108
5.3 Hystrix工作原理 112
5.3.1 Hystrix命令 113
5.3.2 緩存 114
5.3.3 斷路器 115
5.3.4 隔離 119
5.4 Hystrix實踐 122
5.4.1 使用Hystrix命令 123
5.4.2 請求緩存 129
5.4.3 請求合并 137
5.4.4 線程池劃分 145
5.5 儀表盤 146
5.5.1 單體監(jiān)控 147
5.5.2 Turbine聚合監(jiān)控 151
5.6 Hystrix屬性配置 153
5.6.1 命令屬性配置 154
5.6.2 線程池屬性配置 157
第6章 新斷路器——Resilience4j 158
6.1 斷路器(CircuitBreaker) 160
6.1.1 斷路器配置和注冊機 160
6.1.2 斷路器的狀態(tài) 162
6.1.3 使用斷路器的實例 162
6.1.4 異常處理 165
6.1.5 拾遺 166
6.2 限速器(RateLimiter) 168
6.2.1 使用實踐 168
6.2.2 拾遺 170
6.3 艙壁隔離(Bulkhead) 171
6.3.1 使用艙壁隔離 171
6.3.2 拾遺 173
6.4 重試器(Retry) 173
6.4.1 使用重試機制 173
6.4.2 拾遺 175
6.5 緩存(Cache) 176
6.5.1 使用Resilience4j緩存 176
6.5.2 拾遺 178
6.6 時間限制器(TimeLimiter) 178
6.7 組件混用 179
6.8 使用Spring Boot 2的配置方式 181
6.8.1 通過配置創(chuàng)建斷路器 181
6.8.2 通過配置創(chuàng)建限速器 183
第7章 聲明式調(diào)用——OpenFeign 185
7.1 OpenFeign的使用 186
7.1.1 入門實例 186
7.1.2 常見的傳參場景 188
7.1.3 OpenFeign客戶端接口的繼承 190
7.1.4 OpenFeign客戶端的配置 191
7.1.5 OpenFeign的全局配置 197
7.2 配置Hystrix 199
7.2.1 使用服務(wù)降級 200
7.2.2 Hystrix中關(guān)于OpenFeign的其他配置 203
7.2.3 使用建議 204
7.3 使用Resilience4j調(diào)用OpenFeign接口 204
第8章 舊API網(wǎng)關(guān)——Zuul 207
8.1 什么是網(wǎng)關(guān) 208
8.2 Zuul入門實例 209
8.3 Zuul原理——過濾器 211
8.3.1 過濾器設(shè)計和責任鏈 211
8.3.2 開發(fā)過濾器 214
8.3.3 Zuul自動裝配的過濾器 218
8.4 限流 220
8.4.1 Resilience4j限速器限流 220
8.4.2 spring-cloud-zuul-ratelimit限速 222
8.5 動態(tài)路由 224
8.5.1 動態(tài)路由原理 224
8.5.2 動態(tài)路由實例 226
8.6 灰度發(fā)布(金絲雀發(fā)布) 230
8.6.1 標記微服務(wù)是否為灰色發(fā)布 230
8.6.2 網(wǎng)關(guān)過濾 231
8.7 使用Hystrix熔斷 232
第9章 新網(wǎng)關(guān)——Spring CloudGateway 235
9.1 認識Gateway 236
9.1.1 入門實例 237
9.1.2 Gateway執(zhí)行原理 238
9.2 斷言(Predicate) 242
9.2.1 Before路由斷言工廠 242
9.2.2 After路由斷言工廠 243
9.2.3 Between路由斷言工廠 244
9.2.4 Cookie路由斷言工廠 245
9.2.5 Header路由斷言工廠 246
9.2.6 Host路由斷言工廠 246
9.2.7 Method路由斷言工廠 247
9.2.8 Path路由斷言工廠 248
9.2.9 Query路由斷言工廠 249
9.2.10 RemoteAddr路由斷言工廠 250
9.2.11 Weight路由斷言工廠 250
9.3 過濾器(Filter)概述 253
9.4 內(nèi)置過濾器工廠 253
9.4.1 AddRequestHeader過濾器工廠 254
9.4.2 AddRequestParameter過濾器工廠 254
9.4.3 AddResponseHeader過濾器工廠 255
9.4.4 Retry過濾器工廠 256
9.4.5 Hystrix過濾器工廠 258
9.4.6 RequestRateLimiter過濾器工廠 259
9.4.7 StripPrefix過濾器工廠 262
9.4.8 RewritePath過濾器工廠 263
9.4.9 SetStatus過濾器工廠 264
9.4.10 小結(jié) 265
9.5 自定義過濾器 265
9.5.1 自定義過濾器——使用Resilience4j限流 265
9.5.2 全局過濾器——轉(zhuǎn)發(fā)token 268
9.5.3 過濾器的順序 269
9.6 Gateway知識補充 273
9.6.1 基于服務(wù)發(fā)現(xiàn)的路由 273
9.6.2 度量和動態(tài)更新路由 274
第 10章 配置——Spring Cloud Config 277
10.1 入門實例——使用Git倉庫 277
10.1.1 服務(wù)端開發(fā) 278
10.1.2 客戶端開發(fā) 280
10.1.3 驗證配置 281
10.1.4 小結(jié) 282
10.2 使用其他方式實現(xiàn)配置 282
10.2.1 使用本地文件 282
10.2.2 使用SVN配置 283
10.2.3 使用數(shù)據(jù)庫 284
10.3 服務(wù)端的使用詳解 286
10.3.1 敏感配置加密和解密 286
10.3.2 查看配置文件和監(jiān)控端點 289
10.3.3 安全認證 291
10.3.4 高可用的Config配置 293
第 11章 Spring Cloud Sleuth全鏈路追蹤 295
11.1 鏈路追蹤的基本概念 295
11.2 Spring Cloud Sleuth和Zipkin 297
11.3 實例 298
11.3.1 搭建Zipkin服務(wù)器 298
11.3.2 搭建服務(wù)提供者和服務(wù)消費者 300
11.3.3 搭建網(wǎng)關(guān)服務(wù) 303
11.3.4 查看全鏈路追蹤 304
11.3.5 在鏈路中自定義樣本標記屬性 306
11.4 持久化 308
11.4.1 在數(shù)據(jù)庫中存儲鏈路樣本 308
11.4.2 在Elasticsearch中存儲鏈路樣本 309
第 12章 微服務(wù)的監(jiān)控——Spring Boot Admin 312
12.1 本章實例簡介 313
12.2 URL注冊方式 313
12.2.1 Admin服務(wù)端開發(fā) 313
12.2.2 Admin客戶端開發(fā) 314
12.2.3 查看Admin服務(wù)端監(jiān)測平臺 315
12.3 服務(wù)發(fā)現(xiàn)注冊方式 316
12.4 使用Spring Security保護Admin服務(wù)端 319
第三部分 分布式技術(shù)
第 13章 生成唯一的ID——發(fā)號機制 323
13.1 生成ID的常見辦法 323
13.1.1 使用UUID 324
13.1.2 為什么不用UUID 324
13.1.3 數(shù)據(jù)庫自增長 325
13.1.4 使用Redis生成ID 327
13.1.5 時鐘算法 329
13.1.6 變異時鐘算法——SnowFlake算法 331
13.1.7 小結(jié) 334
13.2 自定義發(fā)號機制 334
第 14章 分布式數(shù)據(jù)庫技術(shù) 337
14.1 基礎(chǔ)知識 337
14.1.1 數(shù)據(jù)庫的分表、分庫和分區(qū)的概念 337
14.1.2 Spring多數(shù)據(jù)源支持 339
14.2 開發(fā)環(huán)境搭建 341
14.2.1 SSM框架整合 342
14.2.2 配置多數(shù)據(jù)源 345
14.3 分片算法 350
14.3.1 哈希分片之求余算法 351
14.3.2 一致性哈希算法 352
14.3.3 熱點分配法 357
14.4 分片中間件ShardingSphere 358
14.4.1 概述 358
14.4.2 ShardingSphere的重要概念 359
14.4.3 ShardingSphere的分片 360
14.4.4 實例 361
14.4.5 結(jié)束語 363
第 15章 分布式數(shù)據(jù)庫事務(wù) 364
15.1 強一致性事務(wù) 364
15.1.1 兩階段提交協(xié)議——XA協(xié)議 365
15.1.2 三階段提交協(xié)議 371
15.1.3 為什么微服務(wù)不適合使用強一致性事務(wù) 372
15.2 弱一致性事務(wù) 373
15.2.1 本節(jié)樣例模型和沖正交易的概念 374
15.2.2 使用狀態(tài)表 375
15.2.3 使用可靠消息源——RabbitMQ 376
15.2.4 提高嘗試次數(shù)和冪等性 380
15.2.5 TCC補償事務(wù) 381
15.2.6 小結(jié) 383
15.3 分布式事務(wù)應(yīng)用的實踐理論 383
15.3.1 什么時候使用分布式事務(wù) 383
15.3.2 數(shù)據(jù)修復(fù)思路 384
第 16章 分布式緩存——Redis 387
16.1 Redis的高可用 388
16.1.1 哨兵模式 389
16.1.2 Redis集群 394
16.2 使用一致性哈希(ShardedJedis) 402
16.3 分布式緩存實踐 403
16.3.1 大對象的緩存 403
16.3.2 緩存穿透、并發(fā)和雪崩 404
16.3.3 緩存實踐的一些建議 406
第 17章 分布式會話 407
17.1 分布式會話的幾種方式 407
17.2 黏性會話 408
17.3 服務(wù)器會話復(fù)制 408
17.4 使用緩存(spring-session-data-redis) 409
17.5 持久化到數(shù)據(jù)庫 411
第 18章 分布式系統(tǒng)權(quán)限驗證 412
18.1 Spring Security 412
18.1.1 簡單使用Spring Security 413
18.1.2 使用自定義用戶驗證 415
18.1.3 使用緩存共享實現(xiàn)分布式權(quán)限 421
18.1.4 跨站點請求偽造(CSRF)攻擊 423
18.1.5 使用自定義頁面 425
18.2 自定義微服務(wù)權(quán)限控制 427
18.2.1 基礎(chǔ)包開發(fā) 428
18.2.2 開發(fā)Eureka客戶端 432
18.2.3 網(wǎng)關(guān)開發(fā) 434
18.2.4 服務(wù)調(diào)用 438
18.3 OAuth 2.0概述 441
18.3.1 OAuth的概念和流程 441
18.3.2 使用JWT進行安全認證 443
18.3.3 spring-security-oauth2 444
18.4 Spring Cloud Security 445
18.4.1 構(gòu)建認證服務(wù)器 446
18.4.2 開發(fā)SSO客戶端 450
18.4.3 測試 453
第四部分 微服務(wù)系統(tǒng)實踐
第 19章 遠程過程調(diào)用 459
19.1 遠程過程調(diào)用 459
19.1.1 REST風格服務(wù)調(diào)用性能測試 459
19.1.2 RPC入門 460
19.1.3 RPC和REST風格服務(wù)調(diào)用的對比 461
19.2 Thrift簡介 462
19.2.1 配置Thrift 462
19.2.2 Thrift的數(shù)據(jù)結(jié)構(gòu)和服務(wù)接口 463
19.2.3 開發(fā)業(yè)務(wù)邏輯 464
19.2.4 啟動Thrift服務(wù)器 465
19.2.5 Thrift客戶端 466
19.2.6 使用斷路器保護服務(wù)調(diào)用 468
19.3 RPC小結(jié) 469
第 20章 微服務(wù)設(shè)計和高并發(fā)實踐 470
20.1 微服務(wù)設(shè)計原則 470
20.1.1 服務(wù)拆分方法 470
20.1.2 微服務(wù)的設(shè)計原則 471
20.1.3 微服務(wù)架構(gòu) 471
20.2 高并發(fā)系統(tǒng)的一些優(yōu)化經(jīng)驗 472
20.2.1 提高性能 473
20.2.2 服務(wù)高可用 479
20.3 簡易微服務(wù)系統(tǒng)實例 488
20.3.1 服務(wù)治理中心(ms-eureka) 489
20.3.2 搭建產(chǎn)品微服務(wù)(ms-product) 490
20.3.3 網(wǎng)關(guān)微服務(wù)開發(fā)(ms-zuul) 498
20.3.4 資金微服務(wù)(ms-fund) 508
20.3.5 服務(wù)實例監(jiān)測平臺(ms-admin) 510
20.3.6 Hystrix儀表盤(ms-dashboard) 511
20.3.7 服務(wù)鏈路追蹤(ms-sleuth) 512