內容簡介
本書基於Spring Cloud Edgware RELEASE 與Docker 17.09,以指導技術團隊實現微服務架構落地為宗旨,覆蓋微服務理論、微服務開發框架(Spring Cloud)及運行平台(Docker)三大主題。全書分為3部分,第1部分對微服務架構進行系統介紹;第2部分使用Spring Cloud 開發框架編寫一個“電影售票系統”;第3部分講解如何將微服務套用運行在Docker 之上。全書採用精心設計的Demo 驅動,以連貫的場景、真實的代碼示例來引導讀者學習用強大的微服務技術實現架構設計。作為第2版,本書增補大量新版本框架獨有的技術特性及其技巧、用例,以幫助讀者避開升級中可能遇到的困難與陷阱。
本書適合Java 工程師、架構師及運維人員及技術愛好者閱讀。
圖書目錄
1 微服務架構概述 1
1.1 單體套用架構存在的問題 1
1.2 如何解決單體套用架構存在的問題 3
1.3 什麼是微服務. 3
1.4 微服務架構的優點與挑戰 4
1.4.1 微服務架構的優點 5
1.4.2 微服務架構面臨的挑戰 5
1.5 微服務設計原則6
1.6 如何實現微服務架構 7
1.6.1 技術選型7
1.6.2 架構圖及常用組件 8
2 微服務開發框架——Spring Cloud 9
2.1 Spring Cloud 簡介 . 9
2.2 Spring Cloud 特點 . 10
2.3 Spring Cloud 版本 . 10
2.3.1 版本簡介10
2.3.2 子項目一覽 12
2.3.3 Spring Cloud/Spring Boot 版本兼容性 13
3 開始使用Spring Cloud 實戰微服務.14
3.1 Spring Cloud 實戰前提 14
3.1.1 技術儲備14
3.1.2 工具及軟體版本 15
3.2 服務提供者與服務消費者 16
3.3 編寫服務提供者16
3.3.1 手動編寫項目 . 17
3.3.2 使用Spring Initializr 快速創建Spring Boot 項目. 21
3.4 編寫服務消費者23
3.5 為項目整合Spring Boot Actuator 25
3.6 硬編碼有哪些問題 28
4 微服務註冊與發現
4.1 服務發現簡介. 30
4.2 Eureka 簡介 . 32
4.3 Eureka 原理 . 32
4.4 編寫Eureka Server 34
4.5 將微服務註冊到Eureka Server 上 . 36
4.6 Eureka Server 的高可用 38
4.6.1 編寫高可用Eureka Server . 38
4.6.2 將套用註冊到Eureka Server 集群上 41
4.7 用戶認證 . 41
4.7.1 為Eureka Server 添加用戶認證 41
4.7.2 將微服務註冊到需認證的Eureka Server 43
4.8 Eureka 的元數據43
4.8.1 改造用戶微服務 43
4.8.2 改造電影微服務 44
4.9 Eureka Server 的REST 端點 46
4.9.1 示例 47
4.9.2 註銷微服務實例 52
4.10 Eureka 的自我保護模式 53
4.11 多網卡環境下的IP 選擇 54
4.12 Eureka 的健康檢查 56
4.13 排除Jersey 依賴. 57
5 使用Ribbon 實現客戶端側負載均衡 59
5.1 Ribbon 簡介 59
5.2 為服務消費者整合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 實現聲明式REST 調用 72
6.1 Feign 簡介 73
6.2 為服務消費者整合Feign . 73
6.3 自定義Feign 配置 . 75
6.3.1 使用Java 代碼自定義Feign 配置75
6.3.2 使用屬性自定義Feign 配置 79
6.4 手動創建Feign80
6.4.1 修改用戶微服務 80
6.4.2 修改電影微服務 84
6.5 Feign 對繼承的支持 86
6.6 Feign 對壓縮的支持 87
6.7 Feign 的日誌 87
6.7.1 編碼方式設定日誌級別 88
6.7.2 使用屬性配置日誌級別 89
6.8 使用Feign 構造多參數請求 90
6.8.1 GET 請求多參數的URL 90
6.8.2 POST 請求包含多個參數 .91
6.9 使用Feign 上傳檔案 92
7 使用Hystrix 實現微服務的容錯處理 94
7.1 實現容錯的手段 94
7.1.1 雪崩效應95
7.1.2 如何容錯95
7.2 使用Hystrix 實現容錯 . 97
7.2.1 Hystrix 簡介 97
目錄xv
7.2.2 通用方式整合Hystrix. 98
7.2.3 Hystrix 斷路器的狀態監控與深入理解 102
7.2.4 Hystrix 執行緒隔離策略與傳播上下文 103
7.2.5 Feign 使用Hystrix . 106
7.3 Hystrix 的監控112
7.4 使用Hystrix Dashboard 可視化監控數據. 113
7.5 使用Turbine 聚合監控數據 116
7.5.1 Turbine 簡介 116
7.5.2 使用Turbine 監控多個微服務. 117
7.5.3 使用訊息中間件收集數據. 119
8 使用Zuul 構建微服務網關 124
8.1 為什麼要使用微服務網關 124
8.2 Zuul 簡介 . 126
8.3 編寫Zuul 微服務網關 . 126
8.4 管理端點 . 129
8.4.1 routes 端點 129
8.4.2 filters 端點 131
8.5 路由配置詳解. 132
8.6 Zuul 的安全與Header . 136
8.6.1 敏感Header 的設定 136
8.6.2 忽略Header 136
8.7 使用Zuul 上傳檔案 137
8.8 Zuul 的過濾器140
8.8.1 過濾器類型與請求生命周期 . 140
8.8.2 內置過濾器詳解 141
8.8.3 編寫Zuul 過濾器 . 144
8.8.4 禁用Zuul 過濾器 . 146
8.9 Zuul 的容錯與回退 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 客戶端也註冊到了Eureka Server 上 152
8.13.2 Zuul 客戶端未註冊到Eureka Server 上. 152
8.14 使用Sidecar 整合非JVM 微服務 154
8.14.1 編寫Node.js 微服務 154
8.14.2 編寫Sidecar 155
8.14.3 Sidecar 的端點 . 157
8.14.4 Sidecar 與Node.js 微服務分離部署. 158
8.14.5 Sidecar 原理分析 . 158
8.15 使用Zuul 聚合微服務 . 160
9 使用Spring Cloud Config 統一管理微服務配置. 166
9.1 為什麼要統一管理微服務配置 166
9.2 Spring Cloud Config 簡介 . 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 啟動時載入配置檔案. 175
9.6 Config Server 的健康狀況指示器 176
9.7 配置內容的加解密 177
9.7.1 安裝JCE 177
9.7.2 Config Server 的加解密端點 177
9.7.3 對稱加密177
9.7.4 存儲加密的內容 178
9.7.5 非對稱加密 179
目錄xvii
9.8 使用/refresh 端點手動刷新配置 180
9.9 使用Spring Cloud Bus 自動刷新配置 . 181
9.9.1 Spring Cloud Bus 簡介. 181
9.9.2 實現自動刷新 . 182
9.9.3 局部刷新183
9.9.4 架構改進184
9.9.5 跟蹤匯流排事件 . 184
9.10 Spring Cloud Config 與Eureka 配合使用. 186
9.11 Spring Cloud Config 的用戶認證 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 實現微服務跟蹤 191
10.1 為什麼要實現微服務跟蹤 191
10.2 Spring Cloud Sleuth 簡介 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 簡介 200
10.5.2 編寫Zipkin Server 200
10.5.3 微服務整合Zipkin 202
10.5.4 Zipkin 與Eureka 配合使用 205
10.5.5 使用訊息中間件收集數據 . 206
10.5.6 使用Elasticsearch 存儲跟蹤數據. 209
10.5.7 依賴關係圖 211
11 Spring Cloud 常見問題與總結 213
11.1 Eureka 常見問題213
11.1.1 Eureka 註冊服務慢 213
11.1.2 已停止的微服務節點註銷慢或不註銷 . 214
xviii 目錄
11.1.3 如何自定義微服務的Instance ID 215
11.1.4 Eureka 的UNKNOWN 問題總結與解決 217
11.2 整合Hystrix 後首次請求失敗. 218
11.2.1 原因分析218
11.2.2 解決方案218
11.3 Turbine 聚合的數據不完整 219
11.4 Spring Cloud 各組件逾時 . 220
11.4.1 RestTemplate 的逾時 221
11.4.2 Ribbon 的逾時 . 221
11.4.3 Feign 的逾時 221
11.4.4 Hystrix 的逾時 222
11.4.5 Zuul 的逾時 222
11.5 Spring Cloud 各組件重試 . 223
11.5.1 重試步驟224
11.5.2 基於HTTP 回響碼重試 224
11.5.3 關閉重試224
11.5.4 注意點224
11.6 Spring Cloud 各組件調優 . 225
11.6.1 Tomcat 參數 225
11.6.2 Hystrix 參數 225
11.6.3 Feign 參數 226
11.6.4 Zuul 參數 . 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 定位問題思路總結 229
12 Docker 入門232
12.1 Docker 簡介 232
12.2 版本與疊代計畫232
12.2.1 版本區別233
目錄xix
12.2.2 疊代計畫233
12.3 Docker 的架構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 將微服務運行在Docker上 260
13.1 使用Dockerfile 構建Docker 鏡像 . 260
13.1.1 Dockerfile 常用指令 261
13.1.2 使用Dockerfile 構建鏡像 . 266
13.2 使用Docker Registry 管理Docker 鏡像 268
13.2.1 使用Docker Hub 管理鏡像 268
13.2.2 使用私有倉庫管理鏡像 270
13.3 使用Maven 外掛程式構建Docker 鏡像 271
13.3.1 快速入門272
13.3.2 外掛程式讀取Dockerfile 進行構建 273
13.3.3 將外掛程式綁定在某個phase 執行 274
13.3.4 推送鏡像 275
13.4 常見問題與總結277
14 使用Docker Compose 編排微服務 278
14.1 Docker Compose 簡介 . 278
14.2 安裝Docker Compose . 279
14.2.1 安裝Compose . 279
14.2.2 安裝Compose 命令補全工具 . 279
14.3 Docker Compose 快速入門 280
14.3.1 基本步驟 280
14.3.2 入門示例 280
14.3.3 工程、服務、容器 281
14.4 docker-compose.yml 常用命令281
14.5 docker-compose 常用命令 285
14.6 Docker Compose 網路設定 286
14.6.1 基本概念 286
14.6.2 更新容器 287
14.6.3 links 287
14.6.4 指定自定義網路 288
14.6.5 配置默認網路 . 289
14.6.6 使用已存在的網路 289
14.7 綜合實戰:使用Docker Comose 編排Spring Cloud 微服務 289
14.7.1 編排Spring Cloud 微服務 . 289
14.7.2 編排高可用的Eureka Server 293
14.7.3 編排高可用Spring Cloud 微服務集群及動態伸縮 295
14.8 常見問題與總結 297
後記 298
附錄A:本書配套代碼 299
附錄B:Spring Cloud YES——快速開發腳手架 300
附錄C:使用Docker 快速安裝本書中的組件 301