Spring微服務(wù)實(shí)戰(zhàn)(第2版)
定 價(jià):109.9 元
- 作者:[美] 約翰·卡內(nèi)爾(John Carnell)
- 出版時(shí)間:2022/5/1
- ISBN:9787115587480
- 出 版 社:人民郵電出版社
- 中圖法分類:TP368.5
- 頁(yè)碼:358
- 紙張:
- 版次:02
- 開本:16開
本書以一個(gè)名為O-stock的項(xiàng)目為主線,介紹云、微服務(wù)等概念以及Spring Boot和Spring Cloud等諸多Spring項(xiàng)目,并介紹如何將O-stock項(xiàng)目一步一步地從單體架構(gòu)重構(gòu)成微服務(wù)架構(gòu),進(jìn)而將這個(gè)項(xiàng)目拆分成眾多微服務(wù),讓它們運(yùn)行在各自的Docker容器中,實(shí)現(xiàn)持續(xù)集成/持續(xù)部署,并最終自動(dòng)部署到云環(huán)境(AWS)的 Kubernetes集群中。針對(duì)在重構(gòu)過(guò)程中遇到的各種微服務(wù)開發(fā)會(huì)面臨的典型問(wèn)題(包括開發(fā)、測(cè)試和運(yùn)維等問(wèn)題),本書介紹了解決這些問(wèn)題的核心模式,以及在實(shí)戰(zhàn)中如何選擇特定Spring Cloud子項(xiàng)目或其他工具(如 KeyCloak、Zipkin、ELK技術(shù)棧)解決這些問(wèn)題。本書適合擁有構(gòu)建分布式應(yīng)用程序的經(jīng)驗(yàn)、擁有Spring的知識(shí)背景以及對(duì)學(xué)習(xí)構(gòu)建基于微服務(wù)的應(yīng)用程序感興趣的Java開發(fā)人員閱讀。對(duì)于希望使用微服務(wù)構(gòu)建基于云的應(yīng)用程序,以及希望了解如何將基于微服務(wù)的應(yīng)用部署到云上的開發(fā)人員,本書也具有很好的學(xué)習(xí)參考價(jià)值。
1.本書將O-stock項(xiàng)目拆解劃分成眾多微服務(wù),讓它們運(yùn)行在各自的Docker容器中,實(shí)現(xiàn)持續(xù)集成/持續(xù)部署。
2.作者在十幾年的計(jì)算機(jī)工作中一直致力于軟件開發(fā),使用不同的語(yǔ)言和不同類型的軟件架構(gòu),一直保持著好奇心與從業(yè)初心,不斷地研究并將新知識(shí)應(yīng)用到開發(fā)中
3.微服務(wù)將逐漸成為單體應(yīng)用程序的替代方案,它通過(guò)將大型代碼庫(kù)分解為小的、定義良好的部分,幫助解決代碼的復(fù)雜問(wèn)題
約翰·卡內(nèi)爾(John Carnell)是一位資深云工程師,擁有二十多年的Java開發(fā)經(jīng)驗(yàn)。他大部分時(shí)間都在使用AWS平臺(tái)構(gòu)建基于電話的微服務(wù)。他的日常工作主要是設(shè)計(jì)和構(gòu)建跨Java、Clojure和Go等多種技術(shù)平臺(tái)的微服務(wù)。伊拉里·華盧波·桑切斯(Illary Huaylupo Sánchez)是一名軟件工程師,擁有十多年的Oracle認(rèn)證開發(fā)經(jīng)驗(yàn),目前,Illary 在哥斯達(dá)黎加圣何塞的微軟公司擔(dān)任高級(jí)軟件工程師,在那里她將大部分時(shí)間花在研究和開發(fā)各種流行的最新項(xiàng)目上。
第 1章 歡迎邁入云世界,Spring 1
1.1 微服務(wù)架構(gòu)的演進(jìn) 1
1.1.1 n 層架構(gòu) 2
1.1.2 什么是單體架構(gòu) 2
1.1.3 什么是微服務(wù) 3
1.1.4 為什么要改變構(gòu)建應(yīng)用的方式 5
1.2 使用Spring 開發(fā)微服務(wù) 6
1.3 我們?cè)跇?gòu)建什么 7
1.4 本書涵蓋什么內(nèi)容 8
1.4.1 在本書中你會(huì)學(xué)到什么 8
1.4.2 為什么本書與你有關(guān) 9
1.5 云和基于微服務(wù)的應(yīng)用程序 9
1.5.1 使用Spring Boot 來(lái)構(gòu)建微服務(wù) 10
1.5.2 云計(jì)算到底是什么 14
1.5.3 為什么是云和微服務(wù) 16
1.6 微服務(wù)不只是編寫代碼 17
1.7 核心開發(fā)模式 18
1.8 路由模式 19
1.9 客戶端彈性模式 21
1.10 安全模式 22
1.11 日志記錄和跟蹤模式 23
1.12 應(yīng)用程序度量模式 24
1.13 構(gòu)建/部署模式 25
1.14 小結(jié) 26
第 2章 使用Spring Cloud 探索微服務(wù)世界 27
2.1 什么是Spring Cloud 27
2.1.1 Spring Cloud Config 28
2.1.2 Spring Cloud 服務(wù)發(fā)現(xiàn) 29
2.1.3 Spring Cloud LoadBalancer和Resilience4j 29
2.1.4 Spring Cloud API Gateway 29
2.1.5 Spring Cloud Stream 29
2.1.6 Spring Cloud Sleuth 30
2.1.7 Spring Cloud Security 30
2.2 通過(guò)示例來(lái)介紹Spring Cloud 30
2.3 如何構(gòu)建云原生微服務(wù) 32
2.3.1 代碼庫(kù) 34
2.3.2 依賴 35
2.3.3 配置 35
2.3.4 后端服務(wù) 36
2.3.5 構(gòu)建、發(fā)布和運(yùn)行 37
2.3.6 進(jìn)程 37
2.3.7 端口綁定 38
2.3.8 并發(fā) 38
2.3.9 可任意處置 38
2.3.10 開發(fā)環(huán)境/生產(chǎn)環(huán)境等同 38
2.3.11 日志 39
2.3.12 管理進(jìn)程 39
2.4 確保本書的示例是有意義的 40
2.5 使用Spring Boot和Java來(lái)構(gòu)建微服務(wù) 40
2.5.1 設(shè)置環(huán)境 41
2.5.2 從骨架項(xiàng)目開始 41
2.5.3 引導(dǎo)Spring Boot 應(yīng)用程序:編寫引導(dǎo)類 45
2.6 小結(jié) 46
第3章 使用Spring Boot 構(gòu)建微服務(wù) 48
3.1 架構(gòu)師的故事:設(shè)計(jì)微服務(wù)架構(gòu) 49
3.1.1 分解業(yè)務(wù)問(wèn)題 49
3.1.2 建立服務(wù)粒度 51
3.1.3 定義服務(wù)接口 53
3.2 何時(shí)不要使用微服務(wù) 53
3.2.1 構(gòu)建分布式系統(tǒng)時(shí)的復(fù)雜性 54
3.2.2 服務(wù)器或容器散亂 54
3.2.3 應(yīng)用程序的類型 54
3.2.4 數(shù)據(jù)事務(wù)和一致性 54
3.3 開發(fā)人員的故事:用Spring Boot和Java構(gòu)建微服務(wù) 55
3.3.1 構(gòu)建微服務(wù)的入口:Spring Boot 控制器 55
3.3.2 將國(guó)際化添加到許可證服務(wù) 64
3.3.3 實(shí)現(xiàn)Spring HATEOAS 來(lái)顯示相關(guān)的鏈接 68
3.4 DevOps 故事:構(gòu)建運(yùn)行時(shí)的嚴(yán)謹(jǐn)性 71
3.4.1 服務(wù)裝配:打包和部署微服務(wù) 72
3.4.2 服務(wù)引導(dǎo):管理微服務(wù)的配置 73
3.4.3 服務(wù)注冊(cè)和發(fā)現(xiàn):客戶端如何與微服務(wù)通信 74
3.4.4 傳達(dá)微服務(wù)的健康狀況 75
3.5 將視角綜合起來(lái) 77
3.6 小結(jié) 77
第4章 歡迎來(lái)到Docker 79
4.1 容器還是虛擬機(jī) 80
4.2 Docker 是什么 81
4.3 Dockerfile 83
4.4 Docker Compose 84
4.5 集成Docker 與微服務(wù) 86
4.5.1 構(gòu)建Docker 鏡像 86
4.5.2 使用Spring Boot 創(chuàng)建Docker鏡像 91
4.5.3 使用Docker Compose 啟動(dòng)服務(wù) 93
4.6 小結(jié) 94
第5章 使用Spring Cloud Config服務(wù)器端控制配置 96
5.1 關(guān)于管理配置(和復(fù)雜性) 97
5.1.1 配置管理架構(gòu) 97
5.1.2 實(shí)施選擇 99
5.2 構(gòu)建Spring Cloud Config服務(wù)器端 100
5.2.1 創(chuàng)建Spring Cloud Config引導(dǎo)類 104
5.2.2 使用帶有文件系統(tǒng)的Spring Cloud Config 服務(wù)器端 105
5.2.3 創(chuàng)建服務(wù)的配置文件 106
5.3 將Spring Cloud Config與Spring Boot客戶端集成 110
5.3.1 建立許可證服務(wù)的Spring Cloud Config 服務(wù)依賴項(xiàng) 111
5.3.2 配置許可證服務(wù)以使用Spring Cloud Config 112
5.3.3 使用Spring Cloud Config服務(wù)器端連接數(shù)據(jù)源 115
5.3.4 使用@ConfigurationProperties直接讀取屬性 118
5.3.5 使用Spring Cloud Config服務(wù)器端刷新屬性 119
5.3.6 使用Spring Cloud Config服務(wù)器端和Git 120
5.3.7 使用Spring Cloud Config服務(wù)集成Vault 122
5.3.8 Vault UI 122
5.4 保護(hù)敏感配置信息 125
5.4.1 創(chuàng)建對(duì)稱加密密鑰 125
5.4.2 加密和解密屬性 126
5.5 最后的想法 128
5.6 小結(jié) 128
第6章 關(guān)于服務(wù)發(fā)現(xiàn) 129
6.1 我的服務(wù)在哪里 130
6.2 云中的服務(wù)發(fā)現(xiàn) 132
6.2.1 服務(wù)發(fā)現(xiàn)架構(gòu) 132
6.2.2 使用Spring 和Netflix Eureka進(jìn)行服務(wù)發(fā)現(xiàn)實(shí)戰(zhàn) 135
6.3 構(gòu)建Spring Eureka服務(wù) 136
6.4 通過(guò)Spring Eureka注冊(cè)服務(wù) 141
6.4.1 Eureka 的REST API 144
6.4.2 Eureka 儀表板 145
6.5 使用服務(wù)發(fā)現(xiàn)來(lái)查找服務(wù) 146
6.5.1 使用Spring Discovery Client查找服務(wù)實(shí)例 148
6.5.2 使用帶有Load Balancer功能的Spring Rest模板調(diào)用服務(wù) 150
6.5.3 使用Netflix Feign 客戶端調(diào)用服務(wù) 152
6.6 小結(jié) 153
第7章 當(dāng)糟糕的事情發(fā)生時(shí):使用Spring Cloud和Resilience4j的彈性模式 154
7.1 什么是客戶端彈性模式 155
7.1.1 客戶端負(fù)載均衡模式 156
7.1.2 斷路器模式 156
7.1.3 后備模式 156
7.1.4 艙壁模式 156
7.2 為什么客戶端彈性很重要 157
7.3 實(shí)現(xiàn)Resilience4j 160
7.4 設(shè)置許可證服務(wù)以使用Spring Cloud和Resilience4j 160
7.5 實(shí)現(xiàn)斷路器 162
7.5.1 向組織服務(wù)添加斷路器 166
7.5.2 定制斷路器 166
7.6 后備處理 168
7.7 實(shí)現(xiàn)艙壁模式 169
7.8 實(shí)現(xiàn)重試模式 172
7.9 實(shí)現(xiàn)限流器模式 174
7.10 ThreadLocal和Resilience4j 176
7.11 小結(jié) 180
第8章 使用Spring Cloud Gateway進(jìn)行服務(wù)路由 182
8.1 什么是服務(wù)網(wǎng)關(guān) 183
8.2 Spring Cloud Gateway簡(jiǎn)介 184
8.2.1 建立Spring Cloud Gateway項(xiàng)目 185
8.2.2 配置Spring Cloud Gateway與Eureka 進(jìn)行通信 188
8.3 在Spring Cloud Gateway 中配置路由 189
8.3.1 通過(guò)服務(wù)發(fā)現(xiàn)自動(dòng)映射路由 189
8.3.2 使用服務(wù)發(fā)現(xiàn)手動(dòng)映射路由 191
8.3.3 動(dòng)態(tài)重新加載路由配置 194
8.4 Spring Cloud Gateway 的真正威力:斷言和過(guò)濾器工廠 194
8.4.1 內(nèi)置的斷言工廠 195
8.4.2 內(nèi)置的過(guò)濾器工廠 196
8.4.3 自定義過(guò)濾器 197
8.5 構(gòu)建前置過(guò)濾器 200
8.6 在服務(wù)中使用關(guān)聯(lián)ID 203
8.6.1 UserContextFilter:攔截傳入的HTTP請(qǐng)求 205
8.6.2 UserContext:使服務(wù)易于訪問(wèn)HTTP首部 206
8.6.3 自定義RestTemplate和UserContextInteceptor:確保關(guān)聯(lián)ID被傳播 207
8.7 構(gòu)建接收關(guān)聯(lián)ID的后置過(guò)濾器 208
8.8 小結(jié) 210
第9章 保護(hù)微服務(wù) 211
9.1 OAuth2是什么 212
9.2 Keycloak簡(jiǎn)介 213
9.3 從小事做起:使用Spring和Keycloak來(lái)保護(hù)單個(gè)端點(diǎn) 214
9.3.1 將Keycloak服務(wù)添加到Docker 214
9.3.2 設(shè)置Keycloak 215
9.3.3 注冊(cè)客戶端應(yīng)用程序 218
9.3.4 配置O-stock用戶 222
9.3.5 對(duì)O-stock用戶進(jìn)行身份認(rèn)證 224
9.4 使用Keycloak保護(hù)組織服務(wù) 227
9.4.1 將Spring Security和Keycloak JAR添加到各個(gè)服務(wù) 228
9.4.2 配置服務(wù)以指向Keycloak服務(wù) 228
9.4.3 定義什么和誰(shuí)可以訪問(wèn)服務(wù) 229
9.4.4 傳播訪問(wèn)令牌 233
9.4.5 從JWT 中解析自定義字段 239
9.5 關(guān)于微服務(wù)安全的一些總結(jié) 240
9.5.1 對(duì)所有業(yè)務(wù)通信使用HTTPS/安全套接字層(SSL) 241
9.5.2 使用服務(wù)網(wǎng)關(guān)訪問(wèn)微服務(wù) 241
9.5.3 將服務(wù)劃分到公共API和私有API 241
9.5.4 通過(guò)封鎖不需要的網(wǎng)絡(luò)端口來(lái)限制微服務(wù)的攻擊面 241
9.6 小結(jié) 242
第 10章 使用Spring Cloud Stream的事件驅(qū)動(dòng)架構(gòu) 243
10.1 消息傳遞、EDA和微服務(wù)的案例 244
10.1.1 使用同步請(qǐng)求-響應(yīng)方式來(lái)傳達(dá)狀態(tài)變化 244
10.1.2 使用消息傳遞在服務(wù)之間傳達(dá)狀態(tài)更改 246
10.1.3 消息傳遞架構(gòu)的缺點(diǎn) 248
10.2 Spring Cloud Stream簡(jiǎn)介 249
10.3 編寫簡(jiǎn)單的消息生產(chǎn)者和消費(fèi)者 251
10.3.1 在Docker中配置Apache Kafka和Redis 252
10.3.2 在組織服務(wù)中編寫消息生產(chǎn)者 252
10.3.3 在許可證服務(wù)中編寫消息消費(fèi)者 258
10.3.4 在實(shí)際操作中查看消息服務(wù) 261
10.4 Spring Cloud Stream用例:分布式緩存 262
10.4.1 使用Redis來(lái)緩存查找 263
10.4.2 定義自定義通道 269
10.5 小結(jié) 271
第 11 章 使用Spring Cloud Sleuth和Zipkin進(jìn)行分布式跟蹤 272
11.1 Spring Cloud Sleuth與關(guān)聯(lián)ID 273
11.1.1 將Spring Cloud Sleuth添加到許可證服務(wù)和組織服務(wù)中 274
11.1.2 剖析Spring Cloud Sleuth跟蹤 274
11.2 日志聚合與Spring Cloud Sleuth 275
11.2.1 Spring Cloud Sleuth/ELK技術(shù)棧實(shí)現(xiàn)實(shí)戰(zhàn) 277
11.2.2 在服務(wù)中配置Logback 278
11.2.3 在Docker中定義和運(yùn)行ELK技術(shù)棧應(yīng)用程序 281
11.2.4 配置Kibana 284
11.2.5 在Kibana 中搜索Spring Cloud Sleuth的跟蹤ID 287
11.2.6 使用Spring Cloud Gateway將關(guān)聯(lián)ID添加到HTTP響應(yīng) 288
11.3 使用Zipkin 進(jìn)行分布式跟蹤 290
11.3.1 設(shè)置Spring Cloud Sleuth和Zipkin依賴項(xiàng) 291
11.3.2 配置服務(wù)以指向Zipkin 291
11.3.3 配置Zipkin服務(wù)器端 292
11.3.4 設(shè)置跟蹤級(jí)別 293
11.3.5 使用Zipkin跟蹤事務(wù) 293
11.3.6 可視化更復(fù)雜的事務(wù) 296
11.3.7 捕獲消息傳遞蹤跡 297
11.3.8 添加自定義跨度 299
11.4 小結(jié) 301
第 12章 部署微服務(wù) 303
12.1 構(gòu)建/部署管道的架構(gòu) 304
12.2 在云中設(shè)置O-stock的核心基礎(chǔ)設(shè)施 307
12.2.1 使用亞馬遜的RDS創(chuàng)建PostgreSQL數(shù)據(jù)庫(kù) 309
12.2.2 在AWS中創(chuàng)建Redis集群 312
12.3 超越基礎(chǔ)設(shè)施:部署O-stock和ELK 313
12.3.1 創(chuàng)建運(yùn)行EKL的EC2實(shí)例 313
12.3.2 在EC2實(shí)例中部署ELK技術(shù)棧 316
12.3.3 創(chuàng)建一個(gè)EKS集群 317
12.4 構(gòu)建/部署管道實(shí)戰(zhàn) 323
12.5 創(chuàng)建構(gòu)建/部署管道 324
12.5.1 設(shè)置GitHub 325
12.5.2 使服務(wù)能夠在Jenkins中構(gòu)建 326
12.5.3 理解并生成管道腳本 330
12.5.4 創(chuàng)建Kubernetes管道腳本 332
12.6 關(guān)于構(gòu)建/部署管道的總結(jié) 333
12.7 小結(jié) 334
附錄A 微服務(wù)架構(gòu)最佳實(shí)踐 335
A.1 Richardson成熟度模型 335
A.2 Spring HATEOAS 337
A.3 外部化配置 337
A.4 持續(xù)集成和持續(xù)交付 338
A.5 監(jiān)控 339
A.6 日志記錄 339
A.7 API網(wǎng)關(guān) 340
附錄B OAuth2授權(quán)類型 341
B.1 密碼授權(quán)類型 341
B.2 客戶端憑據(jù)授權(quán)類型 343
B.3 授權(quán)碼授權(quán)類型 344
B.4 隱式授權(quán)類型 345
B.5 如何刷新令牌 347
附錄C 監(jiān)控微服務(wù) 349
C.1 引入Spring Boot Actuator進(jìn)行監(jiān)控 349
C.1.1 添加Spring Boot Actuator 349
C.1.2 啟用Actuator端點(diǎn) 350
C.2 設(shè)置Micrometer和Prometheus 351
C.2.1 了解Micrometer和Prometheus 351
C.2.2 實(shí)現(xiàn)Micrometer和Prometheus 352
C.3 配置Grafana 354
C.4 小結(jié) 358