Spring Cloud微服務:入門、實戰與進階 ( 簡體 字) |
作者:尹吉歡 著 | 類別:1. -> 程式設計 -> JAVA -> Spring |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 51311 詢問書籍請說出此書號!【缺書】 NT售價: 445 元 |
出版日:6/1/2019 |
頁數:400 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111627319 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:為什么要寫這本書
在互聯網時代,互聯網產品的最大特點就是需要快速發布新功能,支持高并發和大數據。傳統的架構已經慢慢不能支撐互聯網業務的發展,這時微服務架構便順勢而出。
最開始,國內很多公司都是基于阿里開源的 Dubbo 框架來構建微服務的,由于阿里內部的原因,Dubbo 已經幾年沒進行維護了,不過在2018年,阿里宣布重新開始維護。反觀Spring Cloud,其在國外發展得很好,但在國內,由于 Dubbo 的存在導致Spring Cloud鮮為人知。不過從 2017 年開始,Spring Cloud 在國內的普及度逐漸變高,很多中小型互聯網公司都開始擁抱 Spring Cloud。
Spring Cloud 提供一整套微服務的解決方案,基于 Spring Boot 可實現快速集成,且開發效率很高,堪稱中小型互聯網公司微服務開發的福音。而且 Spring Cloud 發布新功能的頻率非常高, 目前僅大版本就有很多個,同時還有龐大的社區支持,照這樣的發展勢頭,我相信未來幾年國內互聯網公司的公布式系統開發一定是 Spring Cloud 的天下。
我一直在使用 Spring Boot、Spring Data 等一系列框架來進行開發,作為一名 Spring Cloud的忠實粉絲,自然希望能夠有更多開發者參與進來,于是自己堅持寫 Spring Cloud 相關的文章,并且將文章涉及的代碼整理好放在 GitHub 上面進行分享。在這個過程中我得到了很多開發者的關注,他們向我咨詢一些微服務方面的問題,我也會在研究和解決了一些問題后,通過文章分享給各位開發者。在有幸結識了華章的楊老師后,我決定將這些文章整理成書,目的是想推廣 Spring Cloud 在國內的使用和發展,并分享自己在微服務領域的一些小經驗。
讀者對象
Java開發工程師
Spring Cloud用戶和愛好者
微服務愛好者
本書的讀者對象主要是 Java 開發人員,特別是工作 1∼3 年的開發人員,這個階段的開發人員資歷尚淺,需要一些實用的技術和經驗來提升自己,Spring Cloud 正是一門符合提升要求的技術。因為它現在正處于快速發展的階段,越來越多的企業也開始使用 Spring Cloud。相信在不久的將來,熟練掌握Spring Cloud 將會成為 Java 開發人員面試的門檻。
本書內容
本書主打的是與微服務相關的實戰體系。第一部分是準備篇,可以幫助各位讀者了解微服務以及 Spring Cloud 的概念。第二部分是基礎篇,會對 Spring Cloud 中常用的模塊進行詳細講解。第三部分是實戰篇,開始實戰性質的內容講解,包括選擇配置中心、自研發配置中心、分布式跟蹤、微服務安全認證、Spring Boot Admin 管理微服務、快速生成 API 文檔等實用內容。
最后一部分是高級篇,也是難度比較大的一部分,主要內容如下:
對 Zuul 進行擴展,即對認證、限流、降級、灰度發布等內容進行講解。
講解緩存框架的使用,解決緩存穿透、緩存雪崩等問題。
數據存儲的選型,比如對 MySQL、MongoDB、ElasticSearch 的使用進行講解。
分布式事務的解決方案,重點是利用消息隊列開發可靠性消息服務來實現數據的最終一致性。
講解分布式任務調度框架 Elastic-Job。
講解分庫分表的解決方案 Sharding-JDBC。
勘誤和支持
由于水平有限,書中難免會出現一些不準確的地方,懇請讀者批評指正。為此,特貼出本書源碼地址 。如果你遇到任何問題或者有其他寶貴意見,期待能夠得到你們的真摯反饋。
致謝
首先要感謝 Spring Cloud 的各位開發人員,感謝你們開發出這樣一個好用的框架。
感謝機械工業出版社華章公司的楊福川老師,是你在這半年多的時間中始終支持我的寫作,正因為有你的鼓勵和幫助,我才能順利完成全部書稿。
感謝機械工業出版社華章公司的張錫鵬老師,是你在本書的審稿過程中給了我很多實用的建議,讓我學習到了很多寫作方面的技巧。
最后感謝家人的支持和理解,讓我能夠把全部精力投入到本書的寫作中。謹以此書獻給我最親愛的家人,以及眾多熱愛 Spring Cloud 的朋友們! |
內容簡介:這是一部從技術原理、工程實踐和進階提升3個維度講解Spring Cloud微服務架構與開發的著作。
作者在Spring Cloud微服務領域有豐富的工程實踐經驗,他將帶領讀者零基礎入門Spring Cloud微服務,并快速掌握動手實踐能力,最終進階為Spring Cloud微服務領域的技術達人。
全書共21章,分為4個部分:
第一部分 準備篇(第1~2章)
首先對微服務和Spring Cloud的概念、優劣勢、功能模塊等做了整體性的介紹,然后演示了如何搭建Spring Cloud的開發環境,最后對Spring Boot做了詳細的介紹。
第二部分 基礎篇(第3~7章)
對Eureka注冊中心、客戶端負載均衡Ribbon、聲明式REST客戶端Feign、Hystrix 服務容錯處理、API 網關等Spring Cloud的重要模塊的技術原理、配置、使用方法等做了詳盡的講解。
第三部分 實戰篇(第8~14章)
對微服務架構中的普遍問題給出了實戰解決方案,包括選擇配置中心、自研發配置中心、分布式跟蹤、微服務安全認證、Spring Boot Admin管理微服務、快速生成API文檔等實用性內容。
第四部分 高級篇(第15~21章)
重點講解了Spring Cloud的擴展性使用,比如API網關、微服務的緩存和存儲、分布式事務解決方案、任務調度、分庫分表,以及大量優秀的生產實踐經驗等。
微服務的誕生絕非偶然,它是在互聯網高速發展、技術快速迭代,以及傳統架構無法適應快速變化的業務場景等多重因素的推動下誕生的產物。在Java領域,Spring Cloud是微服務架構的優秀解決方案,無論是學習成本還是功能的完備性都無可挑剔。本書涵蓋了Spring Cloud的大部分模塊,可以幫助讀者在快速入門Spring Cloud 的同時,掌握微服務典型場景的解決方案。
通過閱讀本書,你將掌握:
基于Spring Boot的Web項目開發
基于Spring Cloud的分布式系統開發
Spring Data Redis、Mongodb、ElasticSearch等工具的使用
配置中心Apollo的使用,以及結合Zuul進行動態限流降級
分布式事務的解決思路
分布式任務調度框架Elastic Job的使用
分庫分表中間件Sharding JDBC的使用
大量優秀的工程實踐經驗和方法的總結 |
目錄:贊譽 前言 第一部分 準備篇 第1章 Spring Cloud 與微服務概述 2 1.1 傳統的單體應用 2 1.1.1 改進單體應用的架構 2 1.1.2 向微服務靠攏 3 1.2 什么是微服務 4 1.2.1 使用微服務架構的優勢和劣勢 4 1.2.2 重構前的準備工作 5 1.3 什么是Spring Cloud 5 1.3.1 Spring Cloud模塊介紹 6 1.3.2 Spring Cloud版本介紹 6 1.4 本章小結 7 第2章 實戰前的準備工作 8 2.1 開發環境的準備 8 2.2 Spring Boot入門 9 2.2.1 Spring Boot簡介 9 2.2.2 搭建Spring Boot項目 9 2.2.3 編寫第一個REST接口 11 2.2.4 讀取配置文件 11 2.2.5 profiles多環境配置 13 2.2.6 熱部署 13 2.2.7 actuator監控 15 2.2.8 自定義actuator端點 17 2.2.9 統一異常處理 18 2.2.10 異步執行 20 2.2.11 隨機端口 22 2.2.12 編譯打包 24 2.3 Spring Boot Starter自定義 25 2.3.1 Spring Boot Starter項目創建 25 2.3.2 自動創建客戶端 26 2.3.3 使用Starter 27 2.3.4 使用注解開啟Starter自動構建 27 2.3.5 使用配置開啟Starter自動構建 28 2.3.6 配置Starter內容提示 29 2.4 本章小結 29 第二部分 基礎篇 第3章 Eureka 注冊中心 32 3.1 Eureka 32 3.2 使用 Eureka 編寫注冊中心服務 33 3.3 編寫服務提供者 35 3.3.1 創建項目注冊到Eureka 35 3.3.2 編寫提供接口 36 3.4 編寫服務消費者 37 3.4.1 直接調用接口 37 3.4.2 通過Eureka來消費接口 38 3.5 開啟 Eureka 認證 38 3.6 Eureka 高可用搭建 39 3.6.1 高可用原理 39 3.6.2 搭建步驟 40 3.7 常用配置講解 41 3.7.1 關閉自我保護 41 3.7.2 自定義Eureka的 InstanceID 41 3.7.3 自定義實例跳轉鏈接 42 3.7.4 快速移除已經失效的服務信息 43 3.8 擴展使用 44 3.8.1 Eureka REST API 44 3.8.2 元數據使用 46 3.8.3 EurekaClient使用 47 3.8.4 健康檢查 49 3.8.5 服務上下線監控 50 3.9 本章小結 51 第4章 客戶端負載均衡 Ribbon 52 4.1 Ribbon 52 4.1.1 Ribbon模塊 52 4.1.2 Ribbon 使用 53 4.2 RestTemplate 結合 Ribbon 使用 54 4.2.1 使用 RestTemplate 與整合 Ribbon 54 4.2.2 RestTemplate 負載均衡示例 57 4.2.3 @LoadBalanced 注解原理 58 4.2.4 Ribbon API 使用 62 4.2.5 Ribbon 饑餓加載 63 4.3 負載均衡策略介紹 64 4.4 自定義負載策略 65 4.5 配置詳解 66 4.5.1 常用配置 66 4.5.2 代碼配置 Ribbon 67 4.5.3 配置文件方式配置Ribbon 67 4.6 重試機制 68 4.7 本章小結 69 第5章 聲明式REST客戶端Feign 70 5.1 使用 Feign 調用服務接口 70 5.1.1 在Spring Cloud中集成Feign 71 5.1.2 使用Feign調用接口 71 5.2 自定義 Feign的配置 72 5.2.1 日志配置 72 5.2.2 契約配置 73 5.2.3 Basic認證配置 74 5.2.4 超時時間配置 75 5.2.5 客戶端組件配置 75 5.2.6 GZIP壓縮配置 76 5.2.7 編碼器解碼器配置 77 5.2.8 使用配置自定義Feign的配置 78 5.2.9 繼承特性 78 5.2.10 多參數請求構造 80 5.3 脫離 Spring Cloud 使用 Feign 80 5.3.1 原生注解方式 81 5.3.2 構建Feign對象 82 5.3.3 其他配置 83 5.4 本章小結 83 第6章 Hystrix 服務容錯處理 84 6.1 Hystrix 84 6.1.1 Hystrix的簡單使用 84 6.1.2 回退支持 85 6.1.3 信號量策略配置 86 6.1.4 線程隔離策略配置 86 6.1.5 結果緩存 87 6.1.6 緩存清除 88 6.1.7 合并請求 89 6.2 在 Spring Cloud 中使用Hystrix 91 6.2.1 簡單使用 91 6.2.2 配置詳解 92 6.2.3 Feign整合Hystrix服務容錯 95 6.2.4 Feign中禁用Hystrix 97 6.3 Hystrix 監控 97 6.4 整合 Dashboard 查看監控數據 98 6.5 Turbine 聚合集群數據 100 6.5.1 Turbine使用 100 6.5.2 context-path導致監控失敗 101 6.6 本章小結 102 第7章 API網關 103 7.1 Zuul 簡介 103 7.2 使用 Zuul 構建微服務網關 104 7.2.1 簡單使用 104 7.2.2 集成Eureka 105 7.3 Zuul 路由配置 105 7.4 Zuul過濾器講解 106 7.4.1 過濾器類型 106 7.4.2 請求生命周期 107 7.4.3 使用過濾器 108 7.4.4 過濾器禁用 109 7.4.5 過濾器中傳遞數據 110 7.4.6 過濾器攔截請求 111 7.4.7 過濾器中異常處理 113 7.5 Zuul 容錯和回退 115 7.5.1 容錯機制 115 7.5.2 回退機制 116 7.6 Zuul使用小經驗 118 7.6.1 /routes 端點 118 7.6.2 /filters 端點 118 7.6.3 文件上傳 119 7.6.4 請求響應信息輸出 121 7.6.5 Zuul自帶的Debug功能 124 7.7 Zuul 高可用 126 7.8 本章小結 127 第三部分 實戰篇 第8章 API 網關之Spring Cloud Gateway 130 8.1 Spring Cloud Gateway介紹 130 8.2 Spring Cloud Gateway工作原理 131 8.3 Spring Cloud Gateway快速上手 131 8.3.1 創建Gateway項目 131 8.3.2 路由轉發示例 132 8.3.3 整合Eureka路由 133 8.3.4 整合Eureka的默認路由 133 8.4 Spring Cloud Gateway路由斷言工廠 134 8.4.1 路由斷言工廠使用 134 8.4.2 自定義路由斷言工廠 136 8.5 Spring Cloud Gateway過濾器工廠 137 8.5.1 Spring Cloud Gateway過濾器工廠使用 137 8.5.2 自定義Spring Cloud Gateway過濾器工廠 138 8.6 全局過濾器 140 8.7 實戰案例 143 8.7.1 限流實戰 143 8.7.2 熔斷回退實戰 145 8.7.3 跨域實戰 145 8.7.4 統一異常處理 147 8.7.5 重試機制 150 8.8 本章小結 151 第9章 自研分布式配置管理 152 9.1 自研配置管理框架 Smconf 簡介 152 9.2 Smconf 工作原理 153 9.3 Smconf 部署 154 9.3.1 Mongodb 安裝 154 9.3.2 Zookeeper 安裝 155 9.3.3 Smconf Server 部署 156 9.4 項目中集成 Smconf 157 9.4.1 集成Smconf 157 9.4.2 使用Smconf 158 9.4.3 配置更新回調 159 9.5 Smconf 詳細使用 160 9.5.1 源碼編譯問題 160 9.5.2 后臺賬號管理 160 9.5.3 REST API 161 9.6 Smconf 源碼解析 163 9.6.1 Client啟動 163 9.6.2 啟動加載配置 165 9.6.3 配置修改推送原理 166 9.7 本章小結 167 第10章 分布式配置中心Apollo 168 10.1 Apollo簡介 168 10.2 Apollo的核心功能點 168 10.3 Apollo核心概念 170 10.4 Apollo本地部署 171 10.5 Apollo Portal管理后臺使用 172 10.6 Java中使用Apollo 174 10.6.1 普通Java項目中使用 174 10.6.2 Spring Boot中使用 177 10.7 Apollo的架構設計 179 10.7.1 Apollo架構設計介紹 179 10.7.2 Apollo服務端設計 181 10.7.3 Apollo客戶端設計 188 10.7.4 Apollo高可用設計 195 10.8 本章小結 196 第11章 Sleuth 服務跟蹤 197 11.1 Spring Cloud 集成 Sleuth 197 11.2 整合 Logstash 198 11.2.1 ELK 簡介 198 11.2.2 輸出 JSON 格式日志 198 11.3 整合 Zipkin 200 11.3.1 Zipkin 數據收集服務 200 11.3.2 項目集成 Zipkin 發送調用鏈數據 201 11.3.3 抽樣采集數據 203 11.3.4 異步任務線程池定義 203 11.3.5 TracingFilter 204 11.3.6 監控本地方法 205 11.3.7 過濾不想跟蹤的請求 206 11.3.8 用 RabbitMq 代替 Http 發送調用鏈數據 206 11.3.9 用 Elasticsearch 存儲調用鏈數據 207 11.4 本章小結 208 第12章 微服務之間調用的安全認證 209 12.1 什么是 JWT 209 12.2 創建統一的認證服務 210 12.2.1 表結構 210 12.2.2 JWT工具類封裝 210 12.2.3 認證接口 212 12.3 服務提供方進行調用認證 212 12.4 服務消費方申請 Token 214 12.5 Feign 調用前統一申請 Token 傳遞到調用的服務中 216 12.6 RestTemplate調用前統一申請 Token 傳遞到調用的服務中 217 12.7 Zuul 中傳遞 Token 到路由的服務中 218 12.8 本章小結 219 第13章 Spring Boot Admin 220 13.1 Spring Boot Admin 的使用方法 220 13.1.1 創建 Spring Boot Admin項目 220 13.1.2 將服務注冊到 Spring Boot Admin 221 13.1.3 監控內容介紹 223 13.1.4 如何在 Admin 中查看各個服務的日志 225 13.2 開啟認證 226 13.3 集成 Eureka 227 13.4 監控服務 228 13.4.1 郵件警報 228 13.4.2 自定義釘釘警報 229 13.5 本章小結 232 第14章 服務的API文檔管理 233 14.1 Swagger 簡介 233 14.2 集成 Swagger 管理 API 文檔 234 14.2.1 項目中集成 Swagger 234 14.2.2 使用 Swagger 生成文檔 234 14.2.3 在線測試接口 235 14.3 Swagger 注解 236 14.4 Eureka 控制臺快速查看 Swagger 文檔 240 14.5 請求認證 240 14.6 Zuul中聚合多個服務Swagger 241 14.7 本章小結 242 第四部分 高級篇 第15章 API 網關擴展 244 15.1 用戶認證 244 15.1.1 動態管理不需要攔截的 API 請求 244 15.1.2 創建認證的用戶服務 246 15.1.3 路由之前的認證 247 15.1.4 向下游微服務中傳遞認證之后的用戶信息 248 15.1.5 內部服務間的用戶信息傳遞 248 15.2 服務限流 250 15.2.1 限流算法 250 15.2.2 單節點限流 251 15.2.3 集群限流 255 15.2.4 具體服務限流 258 15.2.5 具體接口限流 258 15.3 服務降級 262 15.4 灰度發布 264 15.4.1 原理講解 264 15.4.2 根據用戶做灰度發布 265 15.4.3 根據 IP 做灰度發布 268 15.5 本章小結 268 第16章 微服務之緩存 269 16.1 Guava Cache 本地緩存 269 16.1.1 Guava Cache 簡介 269 16.1.2 代碼示例 270 16.1.3 回收策略 270 16.2 Redis 緩存 271 16.2.1 用 Redistemplate 操作 Redis 271 16.2.2 用 Repository 操作 Redis 272 16.2.3 Spring Cache 緩存數據 274 16.2.4 緩存異常處理 278 16.2.5 自定義緩存工具類 279 16.3 防止緩存穿透方案 282 16.3.1 什么是緩存穿透 282 16.3.2 緩存穿透的危害 282 16.3.3 解決方案 282 16.3.4 布隆過濾器介紹 283 16.3.5 代碼示例 283 16.4 防止緩存雪崩方案 284 16.4.1 什么是緩存雪崩 284 16.4.2 緩存雪崩的危害 284 16.4.3 解決方案 284 16.4.4 代碼示例 285 16.4.5 分布式鎖方式 285 16.5 本章小結 286 第17章 微服務之存儲 287 17.1 存儲選型 287 17.2 Mongodb 288 17.2.1 集成 Spring Data Mongodb 288 17.2.2 添加數據操作 288 17.2.3 索引使用 290 17.2.4 修改數據操作 291 17.2.5 刪除數據操作 293 17.2.6 查詢數據操作 294 17.2.7 GridFS 操作 295 17.2.8 用 Repository方式操作數據 296 17.2.9 自增 ID 實現 300 17.2.10 批量更新擴展 303 17.3 Mysql 304 17.3.1 集成 Spring Jdbc-Template 304 17.3.2 JdbcTemplate 代碼示例 305 17.3.3 封裝 JdbcTemplate 操作 Mysql 更簡單 305 17.3.4 擴展 JdbcTemplate 使用方式 306 17.3.5 常見問題 310 17.4 Elasticsearch 312 17.4.1 集成 Spring Data Elasticsearch 312 17.4.2 Repository 示例 312 17.4.3 ElasticsearchTemplate 示例 315 17.4.4 索引構建方式 318 17.5 本章小結 319 第18章 微服務之分布式事務解決方案 320 18.1 兩階段型 320 18.2 TCC 補償型 321 18.3 最終一致性 321 18.3.1 原理講解 321 18.3.2 創建可靠性消息服務 323 18.3.3 消息存儲表設計 324 18.3.4 提供服務接口 325 18.3.5 創建消息發送系統 329 18.3.6 消費消息邏輯 332 18.3.7 消息管理系統 335 18.4 最大努力通知型事務 335 18.5 本章小結 335 第19章 分布式任務調度 336 19.1 Elastic-Job 336 19.1.1 Elastic-Job 介紹 336 19.1.2 任務調度目前存在的問題 336 19.1.3 為什么選擇 Elastic-Job 337 19.2 快速集成 338 19.3 任務使用 339 19.3.1 簡單任務 339 19.3.2 數據流任務 340 19.3.3 腳本任務 340 19.4 配置參數講解 341 19.4.1 注冊中心配置 341 19.4.2 作業配置 342 19.4.3 dataflow 獨有配置 343 19.4.4 script獨有配置 343 19.5 多節點并行調度 344 19.5.1 分片概念 344 19.5.2 任務節點分片策略 344 19.5.3 業務數據分片處理 345 19.6 事件追蹤 347 19.7 擴展功能 349 19.7.1 自定義監聽器 349 19.7.2 定義異常處理 349 19.8 運維平臺 350 19.8.1 功能列表 350 19.8.2 部署運維平臺 351 19.8.3 運維平臺使用 351 19.9 使用經驗分享 355 19.9.1 任務的劃分和監控 355 19.9.2 任務的擴展性和節點數量 355 19.9.3 任務的重復執行 355 19.9.4 overwrite 覆蓋問題 356 19.9.5 流水式任務 356 19.10 本章小結 357 第20章 分庫分表解決方案 358 20.1 Sharding-JDBC 358 20.1.1 介紹 358 20.1.2 功能列表 359 20.1.3 相關概念 359 20.2 快速集成 360 20.3 讀寫分離實戰 362 20.3.1 準備數據 362 20.3.2 配置讀寫分離 363 20.3.3 驗證讀從庫 363 20.3.4 驗證寫主庫 365 20.3.5 Hint 強制路由主庫 366 20.4 分庫分表實戰 367 20.4.1 常用分片算法 367 20.4.2 使用分片算法 368 20.4.3 不分庫只分表實戰 368 20.4.4 既分庫又分表實戰 372 20.5 分布式主鍵 375 20.6 本章小結 377 第21章 最佳生產實踐經驗 378 21.1 開發環境和測試環境共用Eureka 378 21.2 Swagger和Actuator訪問進行權限控制 379 21.3 Spring Boot Admin監控被保護的服務 380 21.4 Apollo配置中心簡化版搭建分享 380 21.5 Apollo使用小經驗 382 21.5.1 公共配置 382 21.5.2 賬號權限 383 21.5.3 環境配置和項目配置 385 21.6 Apollo動態調整日志級別 385 21.7 Apollo存儲加密 387 21.8 擴展Apollo支持存儲加解密 390 21.9 Apollo結合Zuul實現動態路由 391 21.10 Apollo整合Archaius 393 21.11 Elastic-Job的Spring-Boot-Starter封裝 394 21.12 Spring Boot中Mongodb多數據源封裝 396 21.13 Zuul中對API進行加解密 398 21.14 本章小結 400 |
序: |