徹底改變Spring Cloud的生態:使用Docker實作微服務架構 | 被動收入的投資秘訣 - 2024年9月
![](https://www.books.com.tw/img/001/080/10/0010801085.jpg)
徹底改變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」的形式註記,提供有興趣的讀者依此專研,擴展視野。
本書特色
隨著業務的發展、程式的堆砌,公司專案變得日益臃腫、複雜、開發效率低落、難以維護?我們迫切需要能夠解放生產力的新技術──微服務架構Spring Cloud!
作者為 Spring Cloud 社區的創辦者之一,以實戰開發者的豐富經驗,將設定簡單、設計優雅的 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.3 撰寫服務提供者
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 Cloud Config統一管理微服務設定
9.1 為什麼要統一管理微服務設定
9.2 Spring Cloud Config簡介
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 Cloud Bus自動更新設定
9.10 Spring Cloud Config與Eureka配合使用
9.11 Spring Cloud Config的使用者認證
9.12 Config Server的高可用
chapter 10 使用Spring Cloud Sleuth實現微服務追蹤
10.1 為什麼要實現微服務追蹤
10.2 Spring Cloud Sleuth簡介
10.3 整合Spring Cloud Sleuth
10.4 Spring Cloud Sleuth與ELK配合使用
10.5 Spring Cloud Sleuth與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 常見問題與歸納
app A 附錄
A-1 本書搭配程式
A-2 Spring Cloud YES——快速開發腳手架
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開放原始碼書(github.com/eacdy/spring-cloud-book),沒想到竟然獲得開放原始碼中國的推薦。再然後,筆者在許進的邀請下,聯合創辦了Spring Cloud中國社區。最後,在群管理員馮靖的引薦下,認識了網紅級的高手張開濤,開濤幫忙引薦了電子工業出版社編輯俠少。從此,筆者正式撰寫實體書。
本以為,有了開放原始碼書的撰寫經驗,實體書應該是較為輕鬆的一件事。然而,樣稿發出後,卻被俠少鄙視⋯⋯主要是語文是體育老師教的,病句滿天飛,況且,理論不是我的專長。期間一度想要放棄,多虧了俠少的鼓勵,總算堅持寫了下去⋯⋯。
倉促完稿之際,感慨萬千,激動與感激交織,於是,本段不可免俗,進入老生常談的「鳴謝」環節—感謝我的家人,寫書是件費時費力的功夫,在近半年的時間,我的父母和妻子給予我相當大的支援;感謝電子工業出版社夥伴們的辛苦工作,沒有劉佳禾、孫奇俏、俠少等可愛的朋友們,我的書不可能問世;衷心感謝丁露、馮靖、張英磊、王天青、吳峻申(N本書的作者)在百忙之中幫忙校對;衷心感謝QQ群、微信群的朋友們,你們給了筆者最大的幫助和支援!(註:排名不分先後。)
特別鳴謝:感謝吳峻申對筆者提出很多中肯實用的建議和意見;感謝張英磊幫忙重繪、美化書中絕大部分架構圖。
謹以此書獻給想要學習微服務、Spring Cloud、Docker又不知從何開始的讀者朋友們。希望本書能切切實實地幫助你使用特定技術堆疊實現微服務架構的落地,也希望本書不會令你失望。本書很多理論性的內容並未展開,例如Cloud Native、12-factor APP、DDD等,但筆者都在文中延伸閱讀、Tips或Warning的形式進行註記,這部分內容希望讀者能夠自行延伸閱讀。本書書附程式碼放在Github上,網址為:「github.com/eacdy/spring-cloud-study」。
周立