作為一部幫助大家實現微服務架構落地的作品,《Spring Cloud與Docker微服務架構實戰》覆蓋了微服務理論、微服務開發框架(Spring Cloud)以及運行平臺(Docker)三大主題。全書可分為三部分,第1章對微服務架構進行了系統的介紹;第2-11章使用Spring Cloud開發框架編寫了一個“電影售票系統”;第12-14章則講解了如何將微服務應用運行在Docker之上。全書Demo驅動學習,以連貫的場景、具體的代碼示例來引導讀者學習相關知識,最終使用特定的技術棧實現微服務架構的落地。
√ Spring Cloud的崛起將取代Dubbo在微服務領域大行其道
n √ 作者標簽:Spring Cloud社區發起人|布道者|微服務專家
n √ Spring Cloud可謂實現Java企業級微服務應用之極限武器
n √ Spring Cloud是Spring Boot之上更完整、全能的解決方案
周立,Spring Cloud中國社區聯合發起人。擁有近7年的軟件系統開發經驗,多年系統架構經驗。對Spring Cloud、微服務、持續集成、持續交付有一定見地。
n 熱愛技術交流,曾代表公司參加全球微服務架構高峰論壇、QCon等技術沙龍。擁抱開源,在GitHub與Git@OSC上開源多個項目,并獲得了開源中國的推薦,例如開源電子書《使用Spring Cloud與Docker實戰微服務》等。
n 筆者博客:itmuch.com,定期分享Spring Cloud相關博客。讀者可掃碼關注Spring Cloud 中國社區公眾號以及作者公眾號。
1 微服務架構概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
n 1.1 單體應用架構存在的問題1
n 1.2 如何解決單體應用架構存在的問題3
n 1.3 什么是微服務3
n 1.4 微服務架構的優點與挑戰5
n 1.4.1 微服務架構的優點5
n 1.4.2 微服務架構面臨的挑戰5
n 1.5 微服務設計原則6
n 1.6 如何實現微服務架構7
n 1.6.1 技術選型7
n 1.6.2 架構圖及常用組件8
n 2 微服務開發框架——Spring Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
n 2.1 Spring Cloud 簡介10
n 2.2 Spring Cloud 特點10
n 2.3 Spring Cloud 版本11
n 2.3.1 版本簡介11
n 2.3.2 子項目一覽12
n 2.3.3 Spring Cloud/Spring Boot 版本兼容性13
n 3 開始使用Spring Cloud 實戰微服務. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
n 3.1 Spring Cloud 實戰前提14
n 3.1.1 技術儲備14
n 3.1.2 工具及軟件版本15
n 3.2 服務提供者與服務消費者16
n 3.3 編寫服務提供者16
n 3.3.1 手動編寫項目17
n 3.3.2 使用Spring Initializr 快速創建Spring Boot 項目21
n 3.4 編寫服務消費者23
n 3.5 為項目整合Spring Boot Actuator 25
n 3.6 硬編碼有哪些問題27
n 4 微服務注冊與發現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
n 4.1 服務發現簡介29
n 4.2 Eureka 簡介31
n 4.3 Eureka 原理31
n 4.4 編寫Eureka Server 33
n 4.5 將微服務注冊到Eureka Server 上35
n 4.6 Eureka Server 的高可用36
n 4.6.1 將應用注冊到Eureka Server 集群上38
n 4.7 為Eureka Server 添加用戶認證39
n 4.7.1 將微服務注冊到需認證的Eureka Server 40
n 4.8 理解Eureka 的元數據41
n 4.8.1 改造用戶微服務41
n 4.8.2 改造電影微服務41
n 4.9 Eureka Server 的REST 端點43
n 4.9.1 示例45
n 4.9.2 注銷微服務實例49
n 4.10 Eureka 的自我保護模式51
n 4.11 多網卡環境下的IP 選擇52
n 4.11.1 忽略指定名稱的網卡52
n 4.11.2 使用正則表達式,指定使用的網絡地址52
n 4.11.3 只使用站點本地地址53
n 4.11.4 手動指定IP 地址53
n 4.12 Eureka 的健康檢查53
n 5 使用Ribbon 實現客戶端側負載均衡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
n 5.1 Ribbon 簡介56
n 5.2 為服務消費者整合Ribbon 57
n 5.3 使用Java 代碼自定義Ribbon 配置60
n 5.4 使用屬性自定義Ribbon 配置63
n 5.5 脫離Eureka 使用Ribbon 64
n 6 使用Feign 實現聲明式REST 調用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
n 6.1 Feign 簡介67
n 6.2 為服務消費者整合Feign 67
n 6.3 自定義Feign 配置69
n 6.4 手動創建Feign 72
n 6.4.1 修改用戶微服務72
n 6.4.2 修改電影微服務76
n 6.5 Feign 對繼承的支持78
n 6.6 Feign 對壓縮的支持79
n 6.7 Feign 的日志80
n 6.8 使用Feign 構造多參數請求82
n 6.8.1 GET 請求多參數的URL 82
n 6.8.2 POST 請求包含多個參數83
n 7 使用Hystrix 實現微服務的容錯處理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
n 7.1 實現容錯的手段85
n 7.1.1 雪崩效應85
n 7.1.2 如何容錯86
n 7.2 使用Hystrix 實現容錯88
n 7.2.1 Hystrix 簡介88
n 7.2.2 通用方式整合Hystrix 89
n 7.2.3 Hystrix 斷路器的狀態監控與深入理解91
n 7.2.4 Hystrix 線程隔離策略與傳播上下文93
n 7.2.5 Feign 使用Hystrix 96
n 7.3 Hystrix 的監控101
n 7.3.1 Feign 項目的Hystrix 監控102
n 7.4 使用Hystrix Dashboard 可視化監控數據103
n 7.5 使用Turbine 聚合監控數據105
n 7.5.1 Turbine 簡介105
n 7.5.2 使用Turbine 監控多個微服務105
n 7.5.3 使用消息中間件收集數據108
n 8 使用Zuul 構建微服務網關. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
n 8.1 為什么要使用微服務網關113
n 8.2 Zuul 簡介115
n 8.3 編寫Zuul 微服務網關115
n 8.4 Zuul 的路由端點118
n 8.5 Zuul 的路由配置詳解119
n 8.6 Zuul 的安全與Header 122
n 8.6.1 敏感Header 的設置122
n 8.6.2 忽略Header 123
n 8.7 使用Zuul 上傳文件124
n 8.7.1 編寫文件上傳微服務124
n 8.8 Zuul 的過濾器127
n 8.8.1 過濾器類型與請求生命周期127
n 8.8.2 編寫Zuul 過濾器128
n 8.8.3 禁用Zuul 過濾器130
n 8.9 Zuul 的容錯與回退130
n 8.9.1 為Zuul 添加回退131
n 8.10 Zuul 的高可用133
n 8.10.1 Zuul 客戶端也注冊到了Eureka Server 上133
n 8.10.2 Zuul 客戶端未注冊到Eureka Server 上133
n 8.11 使用Sidecar 整合非JVM 微服務134
n 8.11.1 編寫Node.js 微服務135
n 8.11.2 編寫Sidecar 136
n 8.11.3 Sidecar 的端點138
n 8.11.4 Sidecar 與Node.js 微服務分離部署139
n 8.11.5 Sidecar 原理分析139
n 9 使用Spring Cloud Config 統一管理微服務配置. . . . . . . . . . . . . . . . . . . . . . . 142
n 9.1 為什么要統一管理微服務配置142
n 9.2 Spring Cloud Config 簡介143
n 9.3 編寫Config Server 144
n 9.3.1 Config Server 的端點145
n 9.4 編寫Config Client 147
n 9.5 Config Server 的Git 倉庫配置詳解149
n 9.6 Config Server 的健康狀況指示器152
n 9.7 配置內容的加解密153
n 9.7.1 安裝JCE 153
n 9.7.2 Config Server 的加解密端點153
n 9.7.3 對稱加密153
n 9.7.4 存儲加密的內容154
n 9.7.5 非對稱加密155
n 9.8 使用/refresh 端點手動刷新配置155
n 9.9 使用Spring Cloud Bus 自動刷新配置157
n 9.9.1 Spring Cloud Bus 簡介157
n 9.9.2 實現自動刷新158
n 9.9.3 局部刷新159
n 9.9.4 架構改進159
n 9.9.5 跟蹤總線事件160
n 9.10 Spring Cloud Config 與Eureka 配合使用161
n 9.11 Spring Cloud Config 的用戶認證162
n 9.11.1 Config Client 連接需用戶認證的Config Server 163
n 9.12 Config Server 的高可用164
n 9.12.1 Git 倉庫的高可用164
n 9.12.2 RabbitMQ 的高可用164
n 9.12.3 Config Server 自身的高可用165
n 10 使用Spring Cloud Sleuth 實現微服務跟蹤. . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
n 10.1 為什么要實現微服務跟蹤167
n 10.2 Spring Cloud Sleuth 簡介168
n 10.3 整合Spring Cloud Sleuth 170
n 10.4 Spring Cloud Sleuth 與ELK 配合使用172
n 10.5 Spring Cloud Sleuth 與Zipkin 配合使用176
n 10.5.1 Zipkin 簡介176
n 10.5.2 編寫Zipkin Server 176
n 10.5.3 微服務整合Zipkin 178
n 10.5.4 使用消息中間件收集數據181
n 10.5.5 存儲跟蹤數據183
n 11 Spring Cloud 常見問題與總結. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
n 11.1 Eureka 常見問題186
n 11.1.1 Eureka 注冊服務慢186
n 11.1.2 已停止的微服務節點注銷慢或不注銷187
n 11.1.3 如何自定義微服務的Instance ID 188
n 11.1.4 Eureka 的UNKNOWN 問題總結與解決189
n 11.2 Hystrix/Feign 整合Hystrix 后首次請求失敗190
n 11.2.1 原因分析191
n 11.2.2 解決方案191
n 11.3 Turbine 聚合的數據不完整191
n 11.3.1 解決方案192
n 11.4 Spring Cloud 各組件配置屬性193
n 11.4.1 Spring Cloud 的配置193
n 11.4.2 原生配置193
n 11.5 Spring Cloud 定位問題思路總結194
n 12 Docker 入門. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
n 12.1 Docker 簡介197
n 12.2 Docker 的架構197
n 12.3 安裝Docker 199
n 12.3.1 系統要求199
n 12.3.2 移除非官方軟件包199
n 12.3.3 設置Yum 源199
n 12.3.4 安裝Dokcer 200
n 12.3.5 卸載Docker 201
n 12.4 配置鏡像加速器201
n 12.5 Docker 常用命令202
n 12.5.1 Docker 鏡像常用命令202
n 12.5.2 Docker 容器常用命令204
n 13 將微服務運行在Docker 上. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
n 13.1 使用Dockerfile 構建Docker 鏡像209
n 13.1.1 Dockerfile 常用指令210
n 13.1.2 使用Dockerfile 構建鏡像215
n 13.2 使用Docker Registry 管理Docker 鏡像217
n 13.2.1 使用Docker Hub 管理鏡像217
n 13.2.2 使用私有倉庫管理鏡像219
n 13.3 使用Maven 插件構建Docker 鏡像220
n 13.3.1 快速入門221
n 13.3.2 插件讀取Dockerfile 進行構建222
n 13.3.3 將插件綁定在某個phase 執行223
n 13.3.4 推送鏡像224
n 13.4 常見問題與總結226
n 14 使用Docker Compose 編排微服務. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
n 14.1 Docker Compose 簡介227
n 14.2 安裝Docker Compose 227
n 14.2.1 安裝Compose 228
n 14.2.2 安裝Compose 命令補全工具228
n 14.3 Docker Compose 快速入門229
n 14.3.1 基本步驟229
n 14.3.2 入門示例229
n 14.3.3 工程、服務、容器230
n 14.4 docker-compose.yml 常用命令230
n 14.4.1 build 230
n 14.4.2 command 231
n 14.4.3 dns 231
n 14.4.4 dns_search 231
n 14.4.5 environment 231
n 14.4.6 env_file 232
n 14.4.7 expose 232
n 14.4.8 external_links 232
n 14.4.9 image 232
n 14.4.10 links 232
n 14.4.11 networks 233
n 14.4.12 network_mode 233
n 14.4.13 ports 233
n 14.4.14 volumes 233
n 14.4.15 volumes_from 234
n 14.5 docker-compose 常用命令234
n 14.5.1 build 234
n 14.5.2 help 235
n 14.5.3 kill 235
n 14.5.4 logs 235
n 14.5.5 port 235
n 14.5.6 ps 235
n 14.5.7 pull 235
n 14.5.8 rm 236
n 14.5.9 run 236
n 14.5.10 scale 236
n 14.5.11 start 236
n 14.5.12 stop 236
n 14.5.13 up 236
n 14.6 Docker Compose 網絡設置237
n 14.6.1 基本概念237
n 14.6.2 更新容器237
n 14.6.3 links 238
n 14.6.4 指定自定義網絡238
n 14.6.5 配置默認網絡239
n 14.6.6 使用已存在的網絡239
n 14.7 綜合實戰:使用Docker Comose 編排Spring Cloud 微服務240
n 14.7.1 編排Spring Cloud 微服務240
n 14.7.2 編排高可用的Eureka Server 243
n 14.7.3 編排高可用Spring Cloud 微服務集群及動態伸縮245
n 14.8 常見問題與總結247
n 后記. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248