Spring Cloud 微服務和分佈式系統實踐

楊開振

  • Spring Cloud 微服務和分佈式系統實踐-preview-1
  • Spring Cloud 微服務和分佈式系統實踐-preview-2
Spring Cloud 微服務和分佈式系統實踐-preview-1

買這商品的人也買了...

商品描述

《Spring Cloud微服務和分佈式系統實踐》從企業的真實需求出發,理論結合實際,
深入講解Spring Cloud微服務和分佈式系統的知識。書中既包括Spring Cloud微服務的各類常用組件的講解,
又包括分佈式系統的常用知識的介紹。Spring Cloud組件方面主要講解服務註冊和服務發現(Eureka)、
服務調用(Ribbon和OpenFeign)、斷路器(Hystrix和Resilience4j)、網關(Zuul和Gateway)、
配置(Config)、全鏈路追蹤(Sleuth) 、微服務的監控(Admin)等;分佈式系統方面主要講解分佈式數據庫、
分佈式緩存、會話和權限以及發號機制等。本書的實踐部分通過Apache Thrift講解了遠程過程調用(RPC)在分佈式系統中的應用,
並且分析了處理高並發的一些常用方法,最後還通過一個簡單的實例講解了微服務系統的搭建。

本書適合想要學習Spring Cloud微服務、分佈式系統開發的各類Java開發人員閱讀,包括初學者和開發工程師。
本書對架構師也有一定的幫助。

作者簡介

楊開振

精通Java互聯網技術,擁有十餘年企業一線開發和實踐經驗,著有《深入淺出Spring Boot 2.x》
《深入淺出MyBatis技術原理與實戰》《Java EE互聯網輕量級框架整合開發——SSM框架
(Spring MVC+Spring+MyBatis)和Redis實現》等業內暢銷書。

目錄大綱

 

第一部分概述和基礎


第1章分佈式和微服務概述3
1.1互聯網系統的特徵4
1.2分佈式系統概述4
1.2.1分佈式的切分方法5
1.2.2分佈式系統所面臨的問題8
1.2.3分佈式的衡量標準9
1.3分佈式系統的設計原則10
1.3.1 CAP原則10
1.3.2 BASE理論11
1.4微服務架構12
1.4.1概述12
1.4.2微服務的風格12
1.4.3微服務和分佈式系統的關係15
1.5 Spring Cloud 15
1.5.1 Spring Cloud的各個組件的簡介16
1.5.2 Spring Cloud版本說明16
1.6微服務系統樣例簡介17
 

第2章技術基礎19
2.1 Spring Boot 19
2.1.1創建Spring Boot工程19
2.1.2 Spring Boot開發簡介21
2.1.3多文件配置25
2.1.4打包和運行27
2.1.5 Spring Boot監控28
2.1.6 Spring Boot小結29
2.2 REST風格簡介29
2.2.1 REST風格概述30
2.2.2 REST風格端點開發31
2.2.3狀態碼和響應頭35
2.2.4客戶端RestTemplate的使用38
 

第二部分Spring Cloud微服務
 

第3章服務治理——Eureka 43
3.1服務治理中心43
3.1.1搭建Eureka服務治理中心43
3.1.2服務發現47
3.1.3多個服務治理中心實例51
3.2 Eureka治理機制54
3.2.1基礎架構54
3.2.2服務治理中心工作原理57
3.2.3 Region和Zone 60
3.2.4 Eureka關鍵源碼解讀62
3.2.5 Eureka使用注意點69
3.3 Eureka配置69
3.3.1客戶端服務註冊配置70
3.3.2客戶端服務實例配置71
 

第4章客戶端負載均衡——Ribbon 73
4.1負載均衡概述73
4.2初識Ribbon 74
4.2.1 Ribbon概述74
4.2.2 Ribbon是如何實現負載均衡的75
4.3 Ribbon負載均衡器和策略80
4.3.1負載均衡器80
4.3.2負載均衡策略84
4.4 Ribbon服務實例清單維護93
4.4.1獲取服務實例清單94
4.4.2更新服務實例清單96
4.4.3服務實例的心跳監測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服務降級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單體監控147
5.5.2 Turbine聚合監控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斷路器的狀態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通過配置創建斷路器181
6.8.2通過配置創建限速器183
 

第7章聲明式調用——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使用服務降級200
7.2.2 Hystrix中關於OpenFeign的其他配置203
7.2.3使用建議204
7.3使用Resilience4j調用OpenFeign接口204
 

第8章舊API網關——Zuul 207
8.1什麼是網關208
8.2 Zuul入門實例209
8.3 Zuul原理——過濾器211
8.3.1過濾器設計和責任鏈211
8.3.2開發過濾器214
8.3.3 Zuul自動裝配的過濾器218
8.4限流220
8.4.1 Resilience4j限速器限流220
8.4.2 spring-cloud-zuul-ratelimit限速222
8.5動態路由224
8.5.1動態路由原理224
8.5.2動態路由實例226
8.6灰度發布(金絲雀發布) 230
8.6.1標記微服務是否為灰色發布230
8.6.2網關過濾231
8.7使用Hystrix熔斷232
 

第9章新網關——Spring CloudGateway 235
9.1認識Gateway 236
9.1.1入門實例237
9.1.2 Gateway執行原理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內置過濾器工廠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小結265
9.5自定義過濾器265
9.5.1自定義過濾器——使用Resilience4j限流265
9.5.2全局過濾器——轉發token 268
9.5.3過濾器的順序269
9.6 Gateway知識補充273
9.6.1基於服務發現的路由273
9.6.2度量和動態更新路由274
 

第10章配置——Spring Cloud Config 277
10.1入門實例——使用Git倉庫277
10.1.1服務端開發278
10.1.2客戶端開發280
10.1.3驗證配置281
10.1.4小結282
10.2使用其他方式實現配置282
10.2.1使用本地文件282
10.2.2使用SVN配置283
10.2.3使用數據庫284
10.3服務端的使用詳解286
10.3.1敏感配置加密和解密286
10.3.2查看配置文件和監控端點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服務器298
11.3.2搭建服務提供者和服務消費者300
11.3.3搭建網關服務303
11.3.4查看全鏈路追踪304
11.3.5在鏈路中自定義樣本標記屬性306
11.4持久化308
11.4.1在數據庫中存儲鏈路樣本308
11.4 .2在Elasticsearch中存儲鏈路樣本309
 

第12章微服務的監控——Spring Boot Admin 312
12.1本章實例簡介313
12.2 URL註冊方式313
12.2.1 Admin服務端開發313
12.2.2 Admin客戶端開發314
12.2.3查看Admin服務端監測平台315
12.3服務發現註冊方式316
12.4使用Spring Security保護Admin服務端319
 

第三部分分佈式技術


第13章生成唯一的ID——發號機制323
13.1生成ID的常見辦法323
13.1.1使用UUID 324
13.1.2為什麼不用UUID 324
13.1. 3數據庫自增長325
13.1.4使用Redis生成ID 327
13.1.5時鐘算法329
13.1.6變異時鐘算法——SnowFlake算法331
13.1.7小結334
13.2自定義發號機制334
 

第14章分佈式數據庫技術337
14.1基礎知識337
14.1.1數據庫的分錶、分庫和分區的概念337
14.1.2 Spring多數據源支持339
14.2開發環境搭建341
14.2.1 SSM框架整合342
14.2.2配置多數據源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結束語363
 

第15章分佈式數據庫事務364
15.1強一致性事務364
15.1.1兩階段提交協議——XA協議365
15.1.2三階段提交協議371
15.1.3為什麼微服務不適合使用強一致性事務372
15.2弱一致性事務373
15.2.1本節樣例模型和沖正交易的概念374
15.2.2使用狀態表375
15.2.3使用可靠消息源——RabbitMQ 376
15.2.4提高嘗試次數和冪等性380
15.2.5 TCC補償事務381
15.2.6小結383
15.3分佈式事務應用的實踐理論383
15.3.1什麼時候使用分佈式事務383
15.3.2數據修復思路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緩存穿透、並發和雪崩404
16.3.3緩存實踐的一些建議406
 

第17章分佈式會話407
17.1分佈式會話的幾種方式407
17.2黏性會話408
17.3服務器會話複製408
17.4使用緩存(spring-session-data-redis) 409
17.5持久化到數據庫411
 

第18章分佈式系統權限驗證412
18.1 Spring Security 412
18.1.1簡單使用Spring Security 413
18.1.2使用自定義用戶驗證415
18.1.3使用緩存共享實現分佈式權限421
18.1.4跨站點請求偽造(CSRF)攻擊423
18.1.5使用自定義頁面425
18. 2自定義微服務權限控制427
18.2.1基礎包開發428
18.2.2開發Eureka客戶端432
18.2.3網關開發434
18.2.4服務調用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構建認證服務器446
18.4.2開發SSO客戶端450
18.4.3測試453
 

第四部分微服務系統實踐


第19章遠程過程調用459
19.1遠程過程調用459
19.1. 1 REST風格服務調用性能測試459
19.1.2 RPC入門460
19.1.3 RPC和REST風格服務調用的對比461
19.2 Thrift簡介462
19.2.1配置Thrift 462
19.2.2 Thrift的數據結構和服務接口463
19.2.3開發業務邏輯464
19.2.4啟動Thrift服務器465
19.2.5 Thrift客戶端466
19.2.6使用斷路器保護服務調用468
19.3 RPC小結469
 

第20章微服務設計和高並發實踐470
20.1微服務設計原則470
20.1.1服務拆分方法470
20.1.2微服務的設計原則471
20.1.3微服務架構471
20.2高並發系統的一些優化經驗472
20.2.1提高性能473
20.2.2服務高可用479
20. 3簡易微服務系統實例488
20.3.1服務治理中心(ms-eureka) 489
20.3.2搭建產品微服務(ms-product) 490
20.3.3網關微服務開發(ms-zuul) 498
20.3.4資金微服務(ms-fund) 508
20.3.5服務實例監測平台(ms-admin) 510
20.3.6 Hystrix儀錶盤(ms-dashboard) 511
20.3.7服務鏈路追踪(ms-sleuth) 512