《Spring Cloud微服務架構實戰派》是2020年4月電子工業出版社出版的圖書,作者是龍中華。
基本介紹
- 書名:Spring Cloud微服務架構實戰派
- 作者:龍中華
- 出版社:電子工業出版社
- 出版時間:2020年4月1日
- 頁數:368 頁
- 定價:89 元
- 開本:16 開
- 裝幀:平裝
- ISBN:9787121386251
圖書介紹,圖書目錄,作者簡介,
圖書介紹
本書針對Spring Cloud 2.0及以上版本。在編寫過程中,不僅考慮到企業任職所需的技能,還考慮到求職面試時可能會遇到的知識點。本書採用“知識點+實例”形式編寫,共有“39個基於知識點的實例 + 1個綜合性項目”,深入講解了Spring Cloud的各類組件、微服務架構的解決方案和開發實踐,以及容器、Kubernetes和Jenkins等DevOps(開發運維一體化)相關知識。本書的主脈絡是:是什麼,為什麼用,怎樣用,為什麼要這樣用,如何用得更好,有什麼最佳的實踐。
圖書目錄
-------------第1篇 入門
-
第1章 進入微服務世界 2
1.1 系統架構的發展階段 2
|1.1.1 單體套用階段 2
|1.1.2 垂直套用階段 3
|1.1.3 分散式系統階段 4
|1.1.4 服務治理階段 5
|1.1.5 微服務階段 6
|1.1.6 服務格線階段 6
1.2 主流的微服務框架 8
|1.2.1 主流微服務框架一覽表 8
|1.2.2 Dubbo 9
|1.2.3 Spring Cloud 10
1.3 服務格線(Service Mesh)框架Istio 11
1.4 比較Dubbo、Spring Cloud和Istio 12
|1.4.1 對比架構 12
|1.4.2 對比各項數據 15
|1.4.3 總結 15
-
第2章 準備開發環境和工具 17
2.1 搭建環境 17
|2.1.1 安裝Java開發環境JDK 17
|2.1.2 配置JDK的環境變數 18
2.2 安裝和配置Maven 20
|2.2.1 安裝和配置 20
|2.2.2 認識pom.xml檔案 22
|2.2.3 了解Maven的運作方式 25
|2.2.4 配置國內倉庫 26
2.3 安裝及配置開發工具IDEA 27
|2.3.1 安裝IDEA 27
|2.3.2 配置IDEA的Maven環境 29
|2.3.3 安裝Spring Assistant外掛程式 29
2.4 安裝及配置開發工具Eclipse 30
|2.4.1 安裝Eclipse 30
|2.4.2 安裝Spring Tools 4外掛程式 30
|2.4.3 配置Eclipse的Maven環境 31
|2.4.4 創建Spring Cloud項目 32
2.5 熟悉Spring官方開發工具STS 32
2.6 如何使用本書源碼 33
|2.6.1 在IDEA中使用 33
|2.6.2 在Eclipse(STS)中使用 33
-
第3章 實例1:用Spring Cloud實現一個微服務系統 35
3.1 本實例的架構和實現步驟 35
3.2 創建Spring Cloud項目 36
3.3 用Eureka實現“服務中心” 37
|3.3.1 添加配置 37
|3.3.2 實現“服務中心”集群(滿足高可用) 38
|3.3.3 打包和部署“服務中心” 40
3.4 用Eureka實現“服務提供者” 42
|3.4.1 實現“服務提供者”的客戶端 42
|3.4.2 實現“服務提供者”的接口 44
|3.4.3 檢查服務的有效性 44
|3.4.4 實現“服務提供者”集群 44
3.5 用Feign實現“服務消費者” 45
|3.5.1 用Feign實現“服務消費者”的客戶端 45
|3.5.2 調用“服務提供者”的接口 46
3.6 測試微服務系統 48
-
-------------第2篇 基礎
-
第4章 認識微服務 50
4.1 微服務的優點和缺點 50
|4.1.1 微服務的優點 50
|4.1.2 微服務的缺點 52
4.2 微服務設計的原則 53
4.3 領域驅動設計(DDD) 56
4.4 跨服務的事務管理模式 57
|4.4.1 2PC/3PC算法模式 58
|4.4.2 TCC事務機制模式 60
|4.4.3 訊息中間件模式 60
|4.4.4 Saga模式 61
|4.4.5 Paxos算法模式 61
4.5 跨服務的查詢模式 62
|4.5.1 API組合器模式 62
|4.5.2 CQRS模式 62
4.6 微服務部署 63
|4.6.1 部署模式 63
|4.6.2 升級模式 64
4.7 微服務架構與雲原生的關係 66
|4.7.1 了解雲原生 66
|4.7.2 微服務架構和雲原生架構的區別 67
-
第5章 Spring Cloud基礎 68
5.1 了解Spring Cloud生態 68
|5.1.1 Spring Cloud的總體架構 68
|5.1.2 主要子項目 69
|5.1.3 Netflix家族項目 70
|5.1.4 阿里巴巴家族項目 71
|5.1.5 其他子項目 72
|5.1.6 常用的技術棧 73
5.2 了解Spring Cloud 74
|5.2.1 Spring Cloud與Spring、Spring Boot的關係 74
|5.2.2 Spring Cloud的版本 76
|5.2.3 Spring Cloud項目的結構 77
|5.2.4 Spring Cloud的入口類 78
|5.2.5 Spring Cloud的自動配置 78
|5.2.6 開箱即用 79
5.3 了解註解 80
|5.3.1 什麼是註解 80
|5.3.2 Spring Boot的系統註解 80
|5.3.3 Spring Boot的常用註解 81
|5.3.4 Spring Cloud的常用註解 86
5.4 了解Starter 87
|5.4.1 Spring Boot的Starter 87
|5.4.2 Spring Cloud的Starter 88
|5.4.3 如何使用Starter 88
5.5 使用配置檔案 88
|5.5.1 配置檔案application.properties 89
|5.5.2 實例2:使用配置檔案application.properties 91
|5.5.3 配置檔案application.yml 93
|5.5.4 實例3:使用配置檔案application.yml 94
|5.5.5 實例4:用application.yml和application.properties配置多環境 98
|5.5.6 了解application.yml和application.properties的遷移 100
|5.5.7 比較配置檔案bootstrap和application 100
5.6 應用程式分層開發模式——MVC 101
|5.6.1 了解MVC模式 101
|5.6.2 MVC和三層架構的關係 102
5.7 回響式編程——WebFlux 103
|5.7.1 什麼是WebFlux 103
|5.7.2 比較MVC和WebFlux 103
|5.7.3 比較Mono和Flux 105
|5.7.4 開發WebFlux的流程 106
5.8 了解Spring Cloud Commons 106
|5.8.1 Spring Cloud的上下文 107
|5.8.2 Spring Cloud的公共抽象類 107
-
-------------第3篇 進階
-
第6章 用Consul實現服務治理 110
6.1 為什麼需要服務治理 110
6.2 主流的“服務中心” 111
|6.2.1 Eureka 111
|6.2.2 Zookeeper 112
|6.2.3 ETCD 113
|6.2.4 Consul 113
|6.2.5 比較Eureka、Consul、ETCD、Zookeeper和Nacos 114
|6.2.6 了解CAP(一致性、可用性、分區容錯性) 115
|6.2.7 在容器化時代如何選擇“服務中心” 115
6.3 認識“服務發現”接口 116
|6.3.1 如何進行服務的註冊和發現 116
|6.3.2 @EnableDiscoveryClient與@EnableEurekaClient的區別 117
6.4 認識Consul 117
|6.4.1 Consul的術語 117
|6.4.2 Consul的工作原理 118
|6.4.3 集群的實現原理 119
|6.4.4 健康檢查 120
|6.4.5 安裝和實現Consul集群 122
|6.4.6 在Linux中構建Consul集群 124
6.5 實例5:用Consul實現“服務提供者”集群和“服務消費者” 125
|6.5.1 實現“服務提供者”集群 126
|6.5.2 實現“服務消費者” 128
6.6 將“服務中心”從Eureka遷移到Consul 129
-
第7章 用Ribbon和Feign實現客戶端負載均衡和服務調用 130
7.1 認識負載均衡 130
|7.1.1 伺服器端負載均衡 130
|7.1.2 客戶端負載均衡 131
7.2 認識Ribbon 131
|7.2.1 Ribbon的工作原理 131
|7.2.2 Ribbon的主要組件 132
|7.2.3 認識負載均衡器 133
|7.2.4 了解註解@LoadBalanced 135
|7.2.5 Ping機制 136
7.3 認識負載均衡策略 137
|7.3.1 Ribbon支持的9大負載均衡策略 137
|7.3.2 實例6:自定義負載均衡策略 139
7.4 實例7:在沒有“服務中心”的情況下,實現自維護的客戶端負載均衡 141
|7.4.1 添加依賴和配置,並啟用客戶端負載均衡 142
|7.4.2 編寫負載均衡控制器 143
|7.4.3 測試客戶端負載均衡 143
7.5 了解Feign 143
|7.5.1 Feign簡介 143
|7.5.2 了解Feign的Bean 144
|7.5.3 壓縮請求和回響 145
|7.5.4 了解註解@QueryMap 145
|7.5.5 使用Feign 146
7.6 實例8:覆蓋Feign的默認配置 147
|7.6.1 添加依賴和配置,並啟用支持 147
|7.6.2 自定義Feign的配置 147
|7.6.3 自定義Feign的接口 148
7.7 實例9:在Feign中實現日誌記錄 148
|7.7.1 添加配置項 148
|7.7.2 設定記錄日誌等級 149
|7.7.3 實現接口類 149
|7.7.4 實現調用接口 149
7.8 用Feign構建多參數請求 150
|7.8.1 用GET方式構建多參數請求 150
|7.8.2 用POST方式構建多參數請求 150
7.9 Ribbon和Feign的區別 151
-
第8章 用Hystrix實現容錯處理 152
8.1 雪崩效應 152
|8.1.1 什麼是雪崩效應 152
|8.1.2 造成服務雪崩的原因 153
8.2 主流的容錯項目 155
|8.2.1 流量防衛兵Sentinel 155
|8.2.2 容錯框架Resilience4j 156
|8.2.3 容錯框架Hystrix 156
|8.2.4 對比Sentinel、Hystrix和Resilience4j 157
8.3 Hystrix處理容錯的機制 157
|8.3.1 熔斷機制 157
|8.3.2 隔離機制 158
|8.3.3 降級機制 160
|8.3.4 快取機制 160
8.4 實例10:在Feign中用Hystrix實現服務調用的容錯 160
|8.4.1 了解Feign對Hystrix的支持 161
|8.4.2 添加依賴和配置,並啟用支持 162
|8.4.3 實現回調類 163
|8.4.4 添加fallback屬性 163
|8.4.5 測試fallback狀態 163
8.5 實例11:用Hystrix Dashboard實現數據的可視化監控 163
|8.5.1 添加依賴和配置 164
|8.5.2 配置啟動類和Servlet 165
|8.5.3 查看監控數據 165
8.6 實例12:用Turbine聚合監控數據 166
|8.6.1 添加依賴並啟用支持 166
|8.6.2 創建多個“服務消費者” 167
|8.6.3 配置多監控點 167
|8.6.4 啟動並測試聚合監控 168
-
第9章 用Spring Cloud Gateway構建微服務網關 169
9.1 認識微服務網關 169
|9.1.1 什麼是微服務網關 169
|9.1.2 為什麼要使用微服務網關 169
|9.1.3 認識Spring Cloud Gateway 170
|9.1.4 Spring Cloud Gateway的工作流程 171
|9.1.5 比較Zuul與Spring Cloud Gateway 172
9.2 路由(Route) 173
|9.2.1 認識路由的謂詞接口和謂詞工廠 173
|9.2.2 認識配置路由規則的方式 173
|9.2.3 實例13:用Java API和配置檔案方式構建路由 175
|9.2.4 實例14:套用Spring Cloud Gateway的11種路由規則 176
|9.2.5 實例15:測試多種路由規則匹配優先權 181
|9.2.6 實例16:將網關註冊到“服務中心”,實現服務轉發 183
9.3 過濾器(Filter) 184
|9.3.1 過濾器的基本知識 184
|9.3.2 網關過濾器(GatewayFilter) 184
|9.3.3 全局過濾器(GlobalFilter) 186
|9.3.4 實例17:用AddRequestHeader過濾器工廠給請求添加Header參數 189
9.4 實例18:實現路由容錯 190
|9.4.1 處理未定義的路由 190
|9.4.2 用Hystrix處理路由熔斷 191
9.5 限流 193
|9.5.1 為什麼要限流 193
|9.5.2 常見的限流措施 193
|9.5.3 限流算法 194
|9.5.4 實例19:用Spring Cloud Gateway內置的限流工廠實現限流 195
9.6 高可用 197
9.7 Spring Cloud Gateway的端點 197
|9.7.1 認識Spring Cloud Gateway的端點 197
|9.7.2 實例20:通過Spring Cloud Gateway的端點添加動態路由 198
-
第10章 用Spring Cloud Sleuth實現微服務鏈路跟蹤 200
10.1 微服務鏈路跟蹤 200
|10.1.1 為什麼要實現微服務鏈路跟蹤 200
|10.1.2 微服務鏈路跟蹤的技術要求 201
10.2 一些開源的鏈路跟蹤項目——Skywalking、Pinpoint、Zipkin和CAT 202
10.3 認識Sleuth和Zipkin 203
|10.3.1 Sleuth 203
|10.3.2 Zipkin 203
10.4 實例21:用Sleuth實現日誌採樣 204
10.5 實例22:在Spring Cloud中使用Zipkin 205
|10.5.1 搭建Zipkin伺服器 205
|10.5.2 添加依賴和配置 206
|10.5.3 測試鏈路數據 207
-
第11章 用Spring Cloud Config配置微服務 209
11.1 了解配置中心 209
|11.1.1 配置信息的管理方式 209
|11.1.2 對比主流配置中心 211
|11.1.3 了解Spring Cloud Config 212
|11.1.4 Spring Cloud Config的常用配置 213
11.2 設定配置中心的安全 214
11.3 加/解密配置檔案 215
|11.3.1 實例23:用對稱加密方式加/解密配置檔案 215
|11.3.2 實例24:用非對稱加密方式加/解密配置檔案 217
11.4 實例25:用Git配置“配置伺服器” 220
|11.4.1 在Git倉庫中創建配置檔案 220
|11.4.2 添加配置中心的依賴和配置,並啟用支持 220
|11.4.3 讀取配置信息 221
11.5 實例26:從客戶端獲取“配置伺服器”放置在Git倉庫中的配置檔案 222
|11.5.1 添加依賴和配置 222
|11.5.2 創建用來獲取配置的控制器 223
|11.5.3 測試獲取到的數據 223
11.6 實例27:用Spring Cloud Bus自動刷新配置信息 224
|11.6.1 Spring Cloud Bus簡介 224
|11.6.2 添加伺服器端的依賴和配置,並啟用支持 224
|11.6.3 添加客戶端的依賴和配置,並啟用支持 225
|11.6.4 啟動並刷新客戶端的配置 227
|11.6.5 實現配置的自動刷新 228
|11.6.6 局部刷新客戶端的配置信息 229
|11.6.7 跟蹤Bus事件 229
11.7 實例28:實現配置中心和配置客戶端的服務化 230
|11.7.1 實現伺服器端服務化 230
|11.7.2 實現客戶端服務化 231
-
第12章 用Spring Cloud Alibaba組件實現服務治理和流量控制 232
12.1 認識Spring Cloud Alibaba組件 232
|12.1.1 Spring Cloud Alibaba是什麼 232
|12.1.2 Spring Cloud Alibaba、Netflix和Spring Cloud的關係 233
|12.1.3 Spring Cloud Alibaba與Spring Boot、Spring Cloud的版本兼容關係 234
12.2 認識Sentinel 235
|12.2.1 Sentinel概述 235
|12.2.2 安裝和啟動Sentinel 239
|12.2.3 認識流控規則 239
|12.2.4 降級規則 241
|12.2.5 系統規則 241
|12.2.7 Sentinel對RestTemplate和Feign的支持 242
|12.2.8 Sentinel的規則持久化 243
12.3 用Sentinel實現Spring Cloud項目的流控和降級 244
|12.3.1 實例29:實現直接限流 244
|12.3.2 實例30:實現關聯限流 246
|12.3.3 實例31:實現鏈路限流 247
|12.3.4 測試流控模式 249
|12.3.5 測試降級模式 250
12.4 認識Nacos 251
|12.4.1 Nacos概述 251
|12.4.2 下載和使用Nacos 251
12.5 實例32:用Nacos實現“服務提供者”和“服務消費者” 252
|12.5.1 用Nacos實現“服務提供者” 252
|12.5.2 用Nacos實現“服務消費者” 253
|12.5.3 測試服務接口 254
12.6 實例33:用Nacos實現“配置中心” 254
|12.6.1 添加依賴和配置 255
|12.6.2 創建屬性承載類 255
|12.6.3 在Nacos控制台中添加配置 255
12.6.4 測試動態刷新 256
12.6.5 測試配置回滾 257
12.7 實例34:用Nacos存儲Sentinel的限流規則 257
|12.7.1 添加依賴和配置 257
|12.7.2 自定義埋點 258
|12.7.3 添加Nacos配置 258
|12.7.4 測試配置的持久化 259
12.8 實例35:實現Nacos的數據持久化和集群 260
|12.8.1 實現Nacos的數據持久化 260
|12.8.2 部署集群 261
-
第13章 用Spring Cloud Security實現微服務安全 264
13.1 認識Spring Security與Spring Cloud Security 264
|13.1.1 Spring Security 264
|13.1.2 Spring Cloud Security 266
13.2 認識OAuth 2.0 267
|13.2.1 OAuth 2.0概述 267
|13.2.2 客戶端的授權模式 268
13.3 Spring Cloud Security如何實現OAuth 2.0 273
|13.3.1 認識Oauth 2.0服務提供端 273
|13.3.2 配置授權伺服器 274
|13.3.3 配置資源伺服器 276
13.4 實例36:用Spring Security實現安全認證和授權 276
|13.4.1 添加依賴和配置資料庫 276
|13.4.2 創建用戶實體類 277
|13.4.3 實現用戶註冊和密碼加密 278
|13.4.4 自定義認證管理器 279
|13.4.5 實現Spring Security配置類 279
|13.4.6 實現登錄驗證成功處理類 280
|13.4.7 實現登錄驗證失敗處理類 281
|13.4.8 測試註冊和登錄 281
13.5 實例37:用OAuth 2.0實現認證和授權 282
|13.5.1 添加OAuth 2.0的依賴 282
|13.5.2 配置認證伺服器 282
|13.5.3 配置資源伺服器 284
|13.5.4 實現用戶實體類和角色映射 284
|13.5.5 實現角色實體類 285
|13.5.6 實現測試控制器 286
|13.5.7 測試用密碼模式獲取Token 286
|13.5.8 測試攜帶Token訪問資源 288
|13.5.9 測試用授權碼模式獲得Token 288
13.6 實例38:用MySQL實現Token信息的持久化 290
13.7 實例39:用Redis實現Token信息的持久化 292
-
-------------第4篇 項目實戰
-
第14章 實例40:用Spring Cloud實現頁面日訪問量3000萬的某平台微服務架構 296
14.1 本實例的整體架構 296
|14.1.1 實施方案 296
|14.1.2 整體架構 297
14.2 實現“配置中心”以提供配置信息 297
|14.2.1 創建配置檔案,並將其上傳到Git倉庫中 297
|14.2.2 編寫“配置伺服器”的信息 298
14.3 實現“服務提供者”集群、“服務消費者”及客戶端自動配置 298
|14.3.1 實現“服務提供者”集群 298
|14.3.2 實現“服務消費者”,並通過“配置中心”實現客戶端的自動配置 299
14.4 用OAuth 2.0實現統一的認證和授權 301
|14.4.1 實現認證伺服器 301
|14.4.2 配置“服務消費者”的資源安全 301
14.5 在Spring Cloud中用“Redis+MySQL”實現路由伺服器 302
|14.5.1 整體思路 302
|14.5.2 設計並實現自定義路由模型 303
|14.5.3 實現路由信息和版本信息實體 303
|14.5.4 實現路由和版本的控制器 304
|14.5.5 實現路由伺服器的服務化 306
14.6 用Spring Cloud Gateway實現網關集群 306
|14.6.1 同步路由信息 306
|14.6.2 轉換路由對象 308
|14.6.3 開啟計畫任務和負載均衡 308
|14.6.4 實現網關的服務化 309
14.7 用Nginx實現負載均衡 309
|14.7.1 認識Nginx 309
|14.7.2 實現網關負載均衡 312
|14.7.3 實現Nginx自身負載均衡 313
14.8 用Spring Boot Admin監控Spring Cloud應用程式 314
|14.8.1 集成Actuator 314
|14.8.2 集成Spring Boot admin以監控套用 316
14.9 集成“Prometheus+Grafana”以監控服務 319
|14.9.1 安裝和配置Prometheus 319
|14.9.2 在Spring Cloud中集成Prometheus 321
|14.9.3 用Grafana實現可視化監控 322
-
-------------第5篇 開發運維一體化(DevOps)
-
第15章 基於Docker、K8s、Jenkins的DevOps實踐 324
15.1 認識DevOps 324
|15.1.1 軟體開發的演變過程 324
|15.1.2 認識DevOps 326
|15.1.3 開發模式的關係 327
|15.1.4 為什麼要踐行DevOps 328
|15.1.5 了解DevOps工具 329
15.2 認識Docker 332
|15.2.1 認識虛擬機和容器 332
|15.2.2 什麼是Docker 334
|15.2.3 Docker的特點 335
|15.2.4 Docker的基本概念 335
15.3 使用Docker 337
|15.3.1 在Linux中安裝Docker 337
|15.3.2 在Windows中安裝Docker 338
|15.3.3 配置國內鏡像加速器 338
|15.3.4 Docker的常用操作 340
15.4 用Docker Compose管理容器 342
|15.4.1 了解Docker Compose工具 342
|15.4.2 安裝Docker Compose工具 342
|15.4.3 用Docker Compose工具運行容器 344
15.5 管理鏡像 344
|15.5.1 用Docker Hub管理鏡像 344
|15.5.2 創建私有倉庫 345
15.6 認識Docker Swarm、Kubernetes(K8s)和Jenkins 345
|15.6.1 Docker Swarm 345
|15.6.2 Kubernetes(K8s) 347
|15.6.3 Jenkins 349
|15.6.4 比較Docker、Compose、Swarm、K8s和Jenkins 350
作者簡介
龍中華
12年來一直在某一線網際網路公司擔任資深系統分析師。帶領3個研發團隊,承擔系統分析、設計、實施、演進、技術團隊管理和各部門的培訓等職責。
專注於某領域的領域驅動設計(DDD)和命令查詢職責分離(CQRS)。以工程思維、領域思維等全面理解業務需求;設計和實施系統的解決方案;保證系統質量、可擴展性、自動化部署、持續演進性以及運維一體化(DevOps)。有獨到的團隊建設和管理經驗。對網際網路多種技術特點和發展趨勢有較深入研究。對多種技術如Spring Boot、Spring Cloud和Service Mesh有深入的研究和實戰經驗。