Spring Cloud與Docker微服務(wù)架構(gòu)實(shí)戰(zhàn)(第2版)
定 價(jià):79 元
叢書名:高等學(xué)校計(jì)算機(jī)基礎(chǔ)教育教材精選
- 作者:周立
- 出版時(shí)間:2018/7/1
- ISBN:9787121340154
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP368.5
- 頁碼:328
- 紙張:
- 版次:01
- 開本:16開
作為一部幫助大家實(shí)現(xiàn)微服務(wù)架構(gòu)落地的作品,《Spring Cloud與Docker微服務(wù)架構(gòu)實(shí)戰(zhàn)(第2版)》覆蓋了微服務(wù)理論、微服務(wù)開發(fā)框架(Spring Cloud)以及運(yùn)行平臺(tái)(Docker)三大主題。全書可分為三部分,第1章對(duì)微服務(wù)架構(gòu)進(jìn)行了系統(tǒng)的介紹;第2-11章使用Spring Cloud開發(fā)框架編寫了一個(gè)"電影售票系統(tǒng)”;第12-14章則講解了如何將微服務(wù)應(yīng)用運(yùn)行在Docker之上。全書Demo驅(qū)動(dòng)學(xué)習(xí),以連貫的場(chǎng)景、具體的代碼示例來引導(dǎo)讀者學(xué)習(xí)相關(guān)知識(shí),最終使用特定的技術(shù)棧實(shí)現(xiàn)微服務(wù)架構(gòu)的落地。
周立,Spring Cloud中國(guó)社區(qū)聯(lián)合發(fā)起人。擁有近7年的軟件系統(tǒng)開發(fā)經(jīng)驗(yàn),多年系統(tǒng)架構(gòu)經(jīng)驗(yàn)。對(duì)Spring Cloud、微服務(wù)、持續(xù)集成、持續(xù)交付有一定見地。熱愛技術(shù)交流,曾代表公司參加全球微服務(wù)架構(gòu)高峰論壇、QCon等技術(shù)沙龍。擁抱開源,在GitHub與Git@OSC上開源多個(gè)項(xiàng)目,并獲得了開源中國(guó)的推薦,例如開源電子書《使用Spring Cloud與Docker實(shí)戰(zhàn)微服務(wù)》等! 」P者博客:http://itmuch.com,定期分享Spring Cloud相關(guān)博客。讀者可掃碼關(guān)注Spring Cloud 中國(guó)社區(qū)公眾號(hào)以及作者公眾號(hào)。
1 微服務(wù)架構(gòu)概述 1
1.1 單體應(yīng)用架構(gòu)存在的問題 1
1.2 如何解決單體應(yīng)用架構(gòu)存在的問題 3
1.3 什么是微服務(wù). 3
1.4 微服務(wù)架構(gòu)的優(yōu)點(diǎn)與挑戰(zhàn) 4
1.4.1 微服務(wù)架構(gòu)的優(yōu)點(diǎn) 5
1.4.2 微服務(wù)架構(gòu)面臨的挑戰(zhàn) 5
1.5 微服務(wù)設(shè)計(jì)原則6
1.6 如何實(shí)現(xiàn)微服務(wù)架構(gòu) 7
1.6.1 技術(shù)選型7
1.6.2 架構(gòu)圖及常用組件 8
2 微服務(wù)開發(fā)框架——Spring Cloud 9
2.1 Spring Cloud 簡(jiǎn)介 . 9
2.2 Spring Cloud 特點(diǎn) . 10
2.3 Spring Cloud 版本 . 10
2.3.1 版本簡(jiǎn)介10
2.3.2 子項(xiàng)目一覽 12
2.3.3 Spring Cloud/Spring Boot 版本兼容性 13
3 開始使用Spring Cloud 實(shí)戰(zhàn)微服務(wù).14
3.1 Spring Cloud 實(shí)戰(zhàn)前提 14
3.1.1 技術(shù)儲(chǔ)備14
3.1.2 工具及軟件版本 15
3.2 服務(wù)提供者與服務(wù)消費(fèi)者 16
3.3 編寫服務(wù)提供者16
3.3.1 手動(dòng)編寫項(xiàng)目 . 17
3.3.2 使用Spring Initializr 快速創(chuàng)建Spring Boot 項(xiàng)目. 21
3.4 編寫服務(wù)消費(fèi)者23
3.5 為項(xiàng)目整合Spring Boot Actuator 25
3.6 硬編碼有哪些問題 28
4 微服務(wù)注冊(cè)與發(fā)現(xiàn)
4.1 服務(wù)發(fā)現(xiàn)簡(jiǎn)介. 30
4.2 Eureka 簡(jiǎn)介 . 32
4.3 Eureka 原理 . 32
4.4 編寫Eureka Server 34
4.5 將微服務(wù)注冊(cè)到Eureka Server 上 . 36
4.6 Eureka Server 的高可用 38
4.6.1 編寫高可用Eureka Server . 38
4.6.2 將應(yīng)用注冊(cè)到Eureka Server 集群上 41
4.7 用戶認(rèn)證 . 41
4.7.1 為Eureka Server 添加用戶認(rèn)證 41
4.7.2 將微服務(wù)注冊(cè)到需認(rèn)證的Eureka Server 43
4.8 Eureka 的元數(shù)據(jù)43
4.8.1 改造用戶微服務(wù) 43
4.8.2 改造電影微服務(wù) 44
4.9 Eureka Server 的REST 端點(diǎn) 46
4.9.1 示例 47
4.9.2 注銷微服務(wù)實(shí)例 52
4.10 Eureka 的自我保護(hù)模式 53
4.11 多網(wǎng)卡環(huán)境下的IP 選擇 54
4.12 Eureka 的健康檢查 56
4.13 排除Jersey 依賴. 57
5 使用Ribbon 實(shí)現(xiàn)客戶端側(cè)負(fù)載均衡 59
5.1 Ribbon 簡(jiǎn)介 59
5.2 為服務(wù)消費(fèi)者整合Ribbon 60
5.3 Ribbon 配置自定義 63
5.3.1 使用Java 代碼自定義Ribbon 配置63
5.3.2 使用屬性自定義Ribbon 配置 67
5.4 脫離Eureka 使用Ribbon . 68
5.5 饑餓加載 . 70
6 使用Feign 實(shí)現(xiàn)聲明式REST 調(diào)用 72
6.1 Feign 簡(jiǎn)介 73
6.2 為服務(wù)消費(fèi)者整合Feign . 73
6.3 自定義Feign 配置 . 75
6.3.1 使用Java 代碼自定義Feign 配置75
6.3.2 使用屬性自定義Feign 配置 79
6.4 手動(dòng)創(chuàng)建Feign80
6.4.1 修改用戶微服務(wù) 80
6.4.2 修改電影微服務(wù) 84
6.5 Feign 對(duì)繼承的支持 86
6.6 Feign 對(duì)壓縮的支持 87
6.7 Feign 的日志 87
6.7.1 編碼方式設(shè)置日志級(jí)別 88
6.7.2 使用屬性配置日志級(jí)別 89
6.8 使用Feign 構(gòu)造多參數(shù)請(qǐng)求 90
6.8.1 GET 請(qǐng)求多參數(shù)的URL 90
6.8.2 POST 請(qǐng)求包含多個(gè)參數(shù) .91
6.9 使用Feign 上傳文件 92
7 使用Hystrix 實(shí)現(xiàn)微服務(wù)的容錯(cuò)處理 94
7.1 實(shí)現(xiàn)容錯(cuò)的手段 94
7.1.1 雪崩效應(yīng)95
7.1.2 如何容錯(cuò)95
7.2 使用Hystrix 實(shí)現(xiàn)容錯(cuò) . 97
7.2.1 Hystrix 簡(jiǎn)介 97
目錄xv
7.2.2 通用方式整合Hystrix. 98
7.2.3 Hystrix 斷路器的狀態(tài)監(jiān)控與深入理解 102
7.2.4 Hystrix 線程隔離策略與傳播上下文 103
7.2.5 Feign 使用Hystrix . 106
7.3 Hystrix 的監(jiān)控112
7.4 使用Hystrix Dashboard 可視化監(jiān)控?cái)?shù)據(jù). 113
7.5 使用Turbine 聚合監(jiān)控?cái)?shù)據(jù) 116
7.5.1 Turbine 簡(jiǎn)介 116
7.5.2 使用Turbine 監(jiān)控多個(gè)微服務(wù). 117
7.5.3 使用消息中間件收集數(shù)據(jù). 119
8 使用Zuul 構(gòu)建微服務(wù)網(wǎng)關(guān) 124
8.1 為什么要使用微服務(wù)網(wǎng)關(guān) 124
8.2 Zuul 簡(jiǎn)介 . 126
8.3 編寫Zuul 微服務(wù)網(wǎng)關(guān) . 126
8.4 管理端點(diǎn) . 129
8.4.1 routes 端點(diǎn) 129
8.4.2 filters 端點(diǎn) 131
8.5 路由配置詳解. 132
8.6 Zuul 的安全與Header . 136
8.6.1 敏感Header 的設(shè)置 136
8.6.2 忽略Header 136
8.7 使用Zuul 上傳文件 137
8.8 Zuul 的過濾器140
8.8.1 過濾器類型與請(qǐng)求生命周期 . 140
8.8.2 內(nèi)置過濾器詳解 141
8.8.3 編寫Zuul 過濾器 . 144
8.8.4 禁用Zuul 過濾器 . 146
8.9 Zuul 的容錯(cuò)與回退 146
8.10 饑餓加載 . 149
8.11 Query String 編碼 . 150
8.12 Hystrix 隔離策略與線程池 150
8.12.1 隔離策略150
8.12.2 線程池配置 151
8.13 Zuul 的高可用152
8.13.1 Zuul 客戶端也注冊(cè)到了Eureka Server 上 152
8.13.2 Zuul 客戶端未注冊(cè)到Eureka Server 上. 152
8.14 使用Sidecar 整合非JVM 微服務(wù) 154
8.14.1 編寫Node.js 微服務(wù) 154
8.14.2 編寫Sidecar 155
8.14.3 Sidecar 的端點(diǎn) . 157
8.14.4 Sidecar 與Node.js 微服務(wù)分離部署. 158
8.14.5 Sidecar 原理分析 . 158
8.15 使用Zuul 聚合微服務(wù) . 160
9 使用Spring Cloud Config 統(tǒng)一管理微服務(wù)配置. 166
9.1 為什么要統(tǒng)一管理微服務(wù)配置 166
9.2 Spring Cloud Config 簡(jiǎn)介 . 167
9.3 編寫Config Server . 168
9.4 編寫Config Client . 171
9.5 Config Server 的Git 倉庫配置詳解 173
9.5.1 占位符支持 173
9.5.2 模式匹配174
9.5.3 搜索目錄174
9.5.4 啟動(dòng)時(shí)加載配置文件. 175
9.6 Config Server 的健康狀況指示器 176
9.7 配置內(nèi)容的加解密 177
9.7.1 安裝JCE 177
9.7.2 Config Server 的加解密端點(diǎn) 177
9.7.3 對(duì)稱加密177
9.7.4 存儲(chǔ)加密的內(nèi)容 178
9.7.5 非對(duì)稱加密 179
目錄xvii
9.8 使用/refresh 端點(diǎn)手動(dòng)刷新配置 180
9.9 使用Spring Cloud Bus 自動(dòng)刷新配置 . 181
9.9.1 Spring Cloud Bus 簡(jiǎn)介. 181
9.9.2 實(shí)現(xiàn)自動(dòng)刷新 . 182
9.9.3 局部刷新183
9.9.4 架構(gòu)改進(jìn)184
9.9.5 跟蹤總線事件 . 184
9.10 Spring Cloud Config 與Eureka 配合使用. 186
9.11 Spring Cloud Config 的用戶認(rèn)證 187
9.12 Config Server 的高可用 188
9.12.1 Git 倉庫的高可用 . 188
9.12.2 RabbitMQ 的高可用 189
9.12.3 Config Server 自身的高可用 189
10 使用Spring Cloud Sleuth 實(shí)現(xiàn)微服務(wù)跟蹤 191
10.1 為什么要實(shí)現(xiàn)微服務(wù)跟蹤 191
10.2 Spring Cloud Sleuth 簡(jiǎn)介 192
10.3 整合Spring Cloud Sleuth 194
10.4 Spring Cloud Sleuth 與ELK 配合使用 . 196
10.5 Spring Cloud Sleuth 與Zipkin 配合使用 200
10.5.1 Zipkin 簡(jiǎn)介 200
10.5.2 編寫Zipkin Server 200
10.5.3 微服務(wù)整合Zipkin 202
10.5.4 Zipkin 與Eureka 配合使用 205
10.5.5 使用消息中間件收集數(shù)據(jù) . 206
10.5.6 使用Elasticsearch 存儲(chǔ)跟蹤數(shù)據(jù). 209
10.5.7 依賴關(guān)系圖 211
11 Spring Cloud 常見問題與總結(jié) 213
11.1 Eureka 常見問題213
11.1.1 Eureka 注冊(cè)服務(wù)慢 213
11.1.2 已停止的微服務(wù)節(jié)點(diǎn)注銷慢或不注銷 . 214
xviii 目錄
11.1.3 如何自定義微服務(wù)的Instance ID 215
11.1.4 Eureka 的UNKNOWN 問題總結(jié)與解決 217
11.2 整合Hystrix 后首次請(qǐng)求失敗. 218
11.2.1 原因分析218
11.2.2 解決方案218
11.3 Turbine 聚合的數(shù)據(jù)不完整 219
11.4 Spring Cloud 各組件超時(shí) . 220
11.4.1 RestTemplate 的超時(shí) 221
11.4.2 Ribbon 的超時(shí) . 221
11.4.3 Feign 的超時(shí) 221
11.4.4 Hystrix 的超時(shí) 222
11.4.5 Zuul 的超時(shí) 222
11.5 Spring Cloud 各組件重試 . 223
11.5.1 重試步驟224
11.5.2 基于HTTP 響應(yīng)碼重試 224
11.5.3 關(guān)閉重試224
11.5.4 注意點(diǎn)224
11.6 Spring Cloud 各組件調(diào)優(yōu) . 225
11.6.1 Tomcat 參數(shù) 225
11.6.2 Hystrix 參數(shù) 225
11.6.3 Feign 參數(shù) 226
11.6.4 Zuul 參數(shù) . 226
11.7 Spring Cloud 各組件配置屬性. 228
11.7.1 Spring Boot 的配置 228
11.7.2 Spring Cloud 的配置 228
11.7.3 原生配置229
11.8 Spring Cloud 定位問題思路總結(jié) 229
12 Docker 入門232
12.1 Docker 簡(jiǎn)介 232
12.2 版本與迭代計(jì)劃232
12.2.1 版本區(qū)別233
目錄xix
12.2.2 迭代計(jì)劃233
12.3 Docker 的架構(gòu)234
12.4 安裝Docker 236
12.4.1 CentOS 7 安裝Docker 236
12.4.2 Ubuntu 安裝Docker 239
12.4.3 Windows 安裝Docker. 244
12.4.4 Mac OS 安裝Docker 245
12.5 配置鏡像加速器245
12.6 Docker 常用命令246
12.6.1 Docker 鏡像常用命令. 246
12.6.2 Docker 容器常用命令. 252
13 將微服務(wù)運(yùn)行在Docker上 260
13.1 使用Dockerfile 構(gòu)建Docker 鏡像 . 260
13.1.1 Dockerfile 常用指令 261
13.1.2 使用Dockerfile 構(gòu)建鏡像 . 266
13.2 使用Docker Registry 管理Docker 鏡像 268
13.2.1 使用Docker Hub 管理鏡像 268
13.2.2 使用私有倉庫管理鏡像 270
13.3 使用Maven 插件構(gòu)建Docker 鏡像 271
13.3.1 快速入門272
13.3.2 插件讀取Dockerfile 進(jìn)行構(gòu)建 273
13.3.3 將插件綁定在某個(gè)phase 執(zhí)行 274
13.3.4 推送鏡像 275
13.4 常見問題與總結(jié)277
14 使用Docker Compose 編排微服務(wù) 278
14.1 Docker Compose 簡(jiǎn)介 . 278
14.2 安裝Docker Compose . 279
14.2.1 安裝Compose . 279
14.2.2 安裝Compose 命令補(bǔ)全工具 . 279
14.3 Docker Compose 快速入門 280
14.3.1 基本步驟 280
14.3.2 入門示例 280
14.3.3 工程、服務(wù)、容器 281
14.4 docker-compose.yml 常用命令281
14.5 docker-compose 常用命令 285
14.6 Docker Compose 網(wǎng)絡(luò)設(shè)置 286
14.6.1 基本概念 286
14.6.2 更新容器 287
14.6.3 links 287
14.6.4 指定自定義網(wǎng)絡(luò) 288
14.6.5 配置默認(rèn)網(wǎng)絡(luò) . 289
14.6.6 使用已存在的網(wǎng)絡(luò) 289
14.7 綜合實(shí)戰(zhàn):使用Docker Comose 編排Spring Cloud 微服務(wù) 289
14.7.1 編排Spring Cloud 微服務(wù) . 289
14.7.2 編排高可用的Eureka Server 293
14.7.3 編排高可用Spring Cloud 微服務(wù)集群及動(dòng)態(tài)伸縮 295
14.8 常見問題與總結(jié) 297
后記 298
附錄A:本書配套代碼 299
附錄B:Spring Cloud YES——快速開發(fā)腳手架 300
附錄C:使用Docker 快速安裝本書中的組件 301