Spring Cloud是集微服務框架大成的超值套件
Docker是終極高效輕量級虛擬化的雲端超容器
一個實例貫穿Spring Cloud、微服務架構以及與Docker整合,一試就能上手掌握架構基礎與應用技術
本書特色:
隨著業務的發展、程式的堆砌,公司專案變得日益臃腫、複雜、開發效率低落、難以維護?我們迫切需要能夠解放生產力的新技術──微服務架構Spring Cloud!
作者為Spring Cloud社區創辦者之一,以實戰開發者之豐富經驗,將設定簡單、設計優雅的Spring Cloud所有相關的基礎知識和工具的使用,在本書中進行完整而精闢的剖析;最後則說解了如何將Spring Cloud微服務應用部署運行在Docker上,讓架構系統得予快速、輕鬆且高效運用。
精彩內容:
本書涵蓋了微服務理論、開發框架(Spring Cloud)以及執行平台(Docker)三大主題。
❑ Part 1(第1章):有系統的介紹微服務架構。
❑ Part 2(第2-11章):使用Spring Cloud開發框架編寫一個「電影售票系統」。
❑ Part 3(第12-14章):說明如何將微服務實際執行在Docker平台上。
全書採用精心設計的Demo驅動,以連貫的場景、真實的程式範例,來引導讀者學習如何使用強大的微服務技術實現架構設計。本書涵蓋最新版本架構所獨具的技術特性、技巧及案例,幫助讀者避開升級過程中可能遭遇到的困難與陷阱。
更多理論性的內容(如Cloud Native、12-factor APP、DDD等)在文中皆以「延伸閱讀」、「Tips」或「Warning」的形式註記,提供有興趣的讀者依此專研,擴展視野。
適用讀者群:
Java工程師、系統架構師和運行維護人員,以及對 Spring Cloud 有興趣的技術同好。目錄
前言
序一
序二
序三
序四
CHAPTER 01 微服務架構概述
1.1 單體應用架構存在的問題
1.2 如何解決單體應用架構存在的問題
1.3 什麼是微服務
1.4 微服務架構的優點與挑戰
1.5 微服務設計原則
1.6 如何實現微服務架構
CHAPTER 02 微服務開發架構—Spring Cloud
2.1 Spring Cloud簡介
2.2 Spring Cloud特點
2.3 Spring Cloud版本
CHAPTER 03 開始使用Spring Cloud實戰微服務
3.1 Spring Cloud實戰前提
3.2 服務提供者與服務消費者
3.4 撰寫服務消費者
3.5 為專案整合Spring Boot Actuator
3.6 強制寫入有哪些問題
CHAPTER 04 微服務註冊與發現
4.1 服務發現簡介
4.2 Eureka簡介
4.3 Eureka原理
4.4 撰寫Eureka Server
4.5 將微服務註冊到Eureka Server上
4.6 Eureka Server的高可用
4.7 使用者認證
4.8 Eureka的中繼資料
4.9 Eureka Server的REST端點
4.10 Eureka的自我保護模式
4.11 多網路卡環境下的IP選擇
4.12 Eureka的健康檢查
4.13 排除Jersey依賴
CHAPTER 05 使用Ribbon實現用戶端側負載平衡
5.1 Ribbon簡介
5.2 為服務消費者整合Ribbon
5.3 Ribbon設定自訂
5.4 脫離Eureka使用Ribbon
5.5 饑餓載入
CHAPTER 06 使用Feign實現宣告式REST呼叫
6.1 Feign簡介
6.2 為服務消費者整合Feign
6.3 自訂Feign設定
6.4 手動建立Feign
6.5 Feign對繼承的支援
6.6 Feign對壓縮的支援
6.7 Feign的記錄檔
6.8 使用Feign建置多參數請求
6.9 使用Feign上傳檔案
CHAPTER 07 使用Hystrix實現微服務的容錯處理
7.1 實現容錯的方法
7.2 使用Hystrix實現容錯
7.3 Hystrix的監控
7.4 使用Hystrix Dashboard視覺化監控資料
7.5 使用Turbine聚合監控資料
CHAPTER 08 使用Zuul建置微服務閘道
8.1 為什麼要使用微服務閘道
8.2 Zuul簡介
8.3 撰寫Zuul微服務閘道
8.4 管理端點
8.5 路由設定詳解
8.6 Zuul的安全與Header
8.7 使用Zuul上傳檔案
8.8 Zuul的篩檢程式
8.9 Zuul的容錯與回復
8.10 饑餓載入
8.11 Query String編碼
8.12 Hystrix隔離策略與執行緒池
8.13 Zuul的高可用
8.14 使用Sidecar整合非JVM微服務
8.15 使用Zuul聚合微服務
CHAPTER 09 使用Spring CloudConfig統一管理微服務設定
9.1 為什麼要統一管理微服務設定
9.2 Spring CloudConfig簡介
9.3 撰寫Config Server
9.4 撰寫Config Client
9.5 Config Server的Git倉庫設定詳解
9.6 Config Server的健康狀況指示器
9.7 設定內容的加解密
9.8 使用/refresh端點手動更新設定
9.9 使用Spring CloudBus自動更新設定
9.10 Spring CloudConfig與Eureka配合使用
9.11 Spring CloudConfig的使用者認證
9.12 Config Server的高可用
CHAPTER 10 使用Spring CloudSleuth實現微服務追蹤
10.1 為什麼要實現微服務追蹤
10.2 Spring CloudSleuth簡介
10.3 整合Spring CloudSleuth
10.4 Spring CloudSleuth與ELK配合使用
10.5 Spring CloudSleuth與Zipkin配合使用
CHAPTER 11 Spring Cloud常見問題與歸納
11.1 Eureka常見問題
11.2 整合Hystrix後第一次請求失敗
11.3 Turbine聚合的資料不完整
11.4 Spring Cloud各元件逾時
11.5 Spring Cloud各元件重試
11.6 Spring Cloud
11.7 Spring Cloud各元件設定屬性
11.8 Spring Cloud定位問題想法歸納
CHAPTER 12 Docker入門
12.1 Docker簡介
12.2 版本與疊代計畫
12.3 Docker的架構
12.4 安裝Docker
12.5 設定映像檔加速器
12.6 Docker常用指令
CHAPTER 13 將微服務執行在Docker上
13.1 使用Dockerfile建置Docker映像檔
13.2 使用Docker Registry管理Docker映像檔
13.3 使用Maven外掛程式建置Docker映像檔
13.4 常見問題與歸納
CHAPTER 14 使用Docker Compose編排微服務
14.1 Docker Compose簡介
14.2 安裝Docker Compose
14.3 Docker Compose快速入門
14.4 docker-compose.yml常用指令
14.5 docker-compose常用指令
14.6 Docker Compose網路設定
14.7 綜合實戰:使用Docker Comose編排Spring Cloud微服務
14.8 常見問題與歸納
APPENDIX A 附錄
A-1 本書搭配程式
A-2 Spring CloudYES—快速開發腳手架
A-3 使用Docker 快速安裝本書中的元件
序/導讀
前言
隨著業務的發展,筆者當時所在公司的專案越來越臃腫。隨著程式的堆砌,專案變得越來越複雜、開發效率越來越低、越來越難以維護,夥伴們苦不堪言,毫無幸福感可言。
我們迫切需要能夠解放生產力、放飛夥伴的「良藥」,於是,微服務進入視野。然而,微服務究竟是什麼,眾說紛紜,沒有人能說清楚什麼是微服務。不僅如此,大家對微服務的態度也是涇渭分明,吹捧者、貶低者比比皆是,在筆者的QQ群、微信群中硝煙四起。筆者參加了不少交流會,感覺許多分享常常停留在理論階段。一場會下來,覺得似乎懂了,卻苦於沒有對應的技術堆疊去實現這些理論。
Docker、Jenkins等工具筆者均有涉獵,然而使用什麼技術堆疊去實作微服務架構,在很長時間內都是筆者心中的疑問。
2015年中,筆者偶然在GitHub上看到一個名為Spring Cloud的架構,它以Spring Boot為基礎,設定簡單、設計優雅,且大多元件都經過了生產環境的考驗。筆者花1個月左右的時間詳細研究了Spring Cloud的相關元件後,體會更深。然而,技術選型必須進行客觀、多維度、全方位的分析,而不應由筆者個人的主觀意見作為決定因素。文件豐富程度、社區活躍度、技術堆疊生態、開發效率、執行效率、成功案例等,都是我們選型的重要因素。經過研究,其他幾點都很OK,只缺成功案例—在當時,中國大陸幾乎沒什麼成功案例,甚至連中文的部落格、相關資料都沒有。
這讓筆者陷入兩難,在這一過程中,公司一邊繼續使用阿里巴巴開放原始碼的Dubbo(Dubbo雖然非常流行,但畢竟有段時間沒有維護了,開放原始碼生態也不是很好),一邊在筆者的組織下進行一些Spring Cloud相關的技術分享。一方面是希望借此開拓夥伴們的視野,另一方面也希望能將兩者相互印證,看是否可在現有平台上參考Spring Cloud的設計或使用其部分元件。
2016年8月,筆者有幸代表公司參加了全球微服務架構高峰討論區。會上,Josh Long對Spring Cloud的說明在現場引起了不小的轟動,也讓筆者眼前為之一亮。會後筆者諮詢Josh,Spring Cloud是否可用於生產、是否適合大規模使用、國內是否已有成功案例,對方一一給予肯定的答覆。此一回覆消除了筆者最後的一絲疑慮,開始考慮從Dubbo逐步移轉至Spring Cloud的規劃與方案。會後,筆者心想,不妨將Spring Cloud相關知識歸納成一個「系列部落格」,一來是加深自己的了解,二來也算是豐富Spring Cloud的中文資料。於是,筆者建立自己的部落格(http://www.itmuch.com),並開始了系列部落格的撰寫。寫了兩篇後,筆者將部落格連結分享到微信群中,沒成想,剛好被Josh Long看到,並引用至Spring 官方部落格中。這讓筆者感到無比榮幸的同時,也讓自己貢獻開放原始碼社區的欲望空前強烈,於是乎,一口氣又寫了兩篇。
再後來,筆者成立了微服務/Spring Cloud/Docker相關的QQ群(157525002),在QQ群夥伴的鼓勵下,筆者決定寫一本Spring Cloud開放原始碼書(https://github.com/eacdy/spring-cloud-book),沒想到竟然獲得開放原始碼中國大陸的推薦。再然後,筆者在許進的邀請下,聯合創辦了Spring Cloud中國社區。最後,在群管理員馮靖的引薦下,認識了網紅級