Spring 微服務實戰 (Spring Microservices in Action)

[美]約翰·卡內爾

買這商品的人也買了...

商品描述

本書以一個名為EagleEye的項目為主線,介紹雲、微服務等概念以及Spring Boot和Spring Cloud等諸多Spring項目,並介紹如何將EagleEye項目一步一步地從單體架構重構成微服務架構,進而將這個項目拆分成眾多微服務,讓它們運行在各自的Docker容器中,實現持續集成/持續部署,並最終自動部署到雲環境(Amazon)中。

針對在重構過程中遇到的各種微服務開發會面臨的典型問題(包括開發、測試和運維等問題),本書介紹瞭解決這些問題的核心模式,以及在實戰中如何選擇特定Spring Cloud子項目或其他工具解決這些問題。

本書適合擁有構建分佈式應用程序的經驗、擁有Spring的知識背景以及對學習構建基於微服務的應用程序感興趣的Java開發人員閱讀。

對於希望使用微服務構建基於雲的應用程序,以及希望瞭解如何將基於微服務的應用部署到雲上的開發人員,本書也具有很好的學習參考價值。

作者簡介

作者:John Carnell  譯者:陳文輝
約翰·卡內爾(John Carnell)是一位知名云工程師,擁有20年的Java開發經驗。

他大部分時間都在使用AWS平台構建基於電話的微服務。他的日常工作主要是設計和構建跨Java、Clojure和Go等多種技術平台的微服務。

目錄大綱

第1章歡迎邁入雲世界,Spring 1 
1.1什麼是微服務1 
1.2什麼是Spring,為什麼它與微服務有關4 
1.3在本書中讀者會學到什麼5 
1.4為什麼本書與你有關6 
1.5使用Spring Boot來構建微服務6 
1.6為什麼要改變構建應用的方式10 
1.7雲到底是什麼11 
1.8為什麼是雲和微服務13 
1.9微服務不只是編寫代碼14 
1.9.1核心微服務開發模式15 
1.9. 2微服務路由模式16 
1.9.3微服務客戶端彈性模式17 
1.9.4微服務安全模式18 
1.9.5微服務日誌記錄和跟踪模式19 
1.9.6微服務構建和部署模式20 
1.10使用Spring Cloud構建微服務22 
1.10.1 Spring Boot 23 
1.10.2 Spring Cloud Config 23 
1.10.3 Spring Cloud服務發現24 
1.10.4 Spring Cloud與Netflix Hystrix和Netflix Ribbon 24 
1.10.5 Spring Cloud與Netflix Zuul 24 
1.10.6 Spring Cloud Stream 24
1.10.7 Spring Cloud Sleuth 24 
1.10.8 Spring Cloud Security 25 
1.10.9代碼供應25 
1.11通過示例來介紹Spring Cloud 25 
1.12確保本書的示例是有意義的27 
1.13小結28 

第2章使用Spring Boot構建微服務29 
2.1架構師的故事:設計微服務架構31 
2.1.1分解業務問題31 
2.1.2建立服務粒度32 
2.1.3互相交流:定義服務接口35 
2.2何時不應該使用微服務36 
2.2.1構建分佈式系統的複雜性36 
2.2.2服務器散亂36 
2.2.3應用程序的類型36 
2.2.4數據事務和一致性37 
2.3開發人員的故事:用SpringBoot和Java構建微服務37 
2.3.1從骨架項目開始37 
2.3.2引導Spring Boot應用程序:編寫引導類39 
2.3.3構建微服務的入口:Spring Boot控制器40 
2.4 DevOps工程師的故事:構建運行時的嚴謹性44 
2.4.1服務裝配:打包和部署微服務46 
2.4.2服務引導:管理微服務的配置47 
2.4.3服務註冊和發現:客戶端如何與微服務通信48
2.4.4傳達微服務的“健康狀況” 49 
2.5將視角綜合起來51 
2.6小結52 

第3章使用Spring Cloud配置服務器控製配置53 
3.1管理配置(和復雜性) 54 
3.1.1配置管理架構55 
3.1. 2實施選擇56 
3.2構建Spring Cloud配置服務器58 
3.2.1創建Spring Cloud Config引導類61 
3.2.2使用帶有文件系統的Spring Cloud配置服務器62 
3.3將Spring Cloud Config與Spring Boot客戶端集成64 
3.3.1建立許可證服務對Spring Cloud Config服務器的依賴65 
3.3.2配置許可證服務以使用Spring Cloud Config 66 
3.3.3使用Spring Cloud配置服務器連接數據源69 
3.3.4使用@Value註解直接讀取屬性72 
3.3 .5使用Spring Cloud配置服務器和Git 73 
3.3.6使用Spring Cloud配置服務器刷新屬性73 
3.4保護敏感的配置信息75 
3.4.1下載並安裝加密所需的Oracle JCE jar 75 
3.4.2創建加密密鑰76 
3.4.3加密和解密屬性76 
3.4.4配置微服務以在客戶端使用加密78
3.5最後的想法79 
3.6小結80 

第4章服務發現81 
4.1我的服務在哪裡82 
4.2雲中的服務發現84 
4.2.1服務發現架構84 
4.2.2使用Spring和Netflix Eureka進行服務發現實戰87 
4.3構建Spring Eureka服務88 
4.4通過Spring Eureka註冊服務90 
4.5使用服務發現來查找服務93 
4.5.1使用Spring DiscoveryClient查找服務實例95 
4.5.2使用帶有Ribbon功能的Spring RestTemplate調用服務97 
4.5.3使用Netflix Feign客戶端調用服務98 
4.6小結100 

第5章使用Spring Cloud和NetflixHystrix的客戶端彈性模式101 
5.1什麼是客戶端彈性模式102 
5.1.1客戶端負載均衡模式103 
5.1.2斷路器模式103 
5.1.3後備模式103 
5.1.4艙壁模式104 
5.2為什麼客戶端彈性很重要104 
5.3進入Hystrix 107 
5.4搭建許可服務器以使用Spring Cloud和Hystrix 107 
5.5使用Hystrix實現斷路器109
5.5.1對組織微服務的調用超時111 
5.5.2定制斷路器的超時時間112 
5.6後備處理113 
5.7實現艙壁模式115 
5.8基礎進階—微調Hystrix 118 
5.9線程上下文和Hystrix 122 
5.9.1 ThreadLocal與Hystrix 122 
5.9.2 HystrixConcurrencyStrategy實戰125 
5.10小結129 

第6章使用Spring Cloud和Zuul進行服務路由131 
6.1什麼是服務網關132 
6.2 Spring Cloud和Netflix Zuul簡介133 
6.2.1建立一個Zuul Spring Boot項目134 
6.2.2為Zuul服務使用Spring Cloud註解134 
6.2.3配置Zuul與Eureka進行通信135 
6.3在Zuul中配置路由135 
6.3.1通過服務發現自動映射路由136 
6.3.2使用服務發現手動映射路由137 
6.3.3使用靜態URL手動映射路由140 
6.3.4動態重新加載路由配置142 
6.3.5 Zuul和服務超時143 
6.4 Zuul的真正威力:過濾器144 
6.5構建第一個生成關聯ID的Zuul前置過濾器147
6.6構建接收關聯ID的後置過濾器155 
6.7構建動態路由過濾器157 
6.7.1構建路由過濾器的骨架159 
6.7.2實現run()方法159 
6.7.3轉發路由161 
6.7.4整合162 
6.8小結163 

第7章保護微服務164 
7.1 OAuth2簡介165 
7.2從小事做起:使用Spring和OAuth2來保護單個端點167 
7.2.1建立EagleEye OAuth2驗證服務167 
7.2.2使用OAuth2服務註冊客戶端應用程序168 
7.2. 3配置EagleEye用戶171 
7.2.4驗證用戶172 
7.3使用OAuth2保護組織服務175 
7.3.1將Spring Security和OAuth2 jar添加到各個服務176 
7.3.2配置服務以指向OAuth2驗證服務176 
7.3.3定義誰可以訪問服務177 
7.3.4傳播OAuth2訪問令牌180 
7.4 JSON Web Token與OAuth2 183 
7.4.1修改驗證服務以頒發JWT令牌184 
7.4.2在微服務中使用JWT 188 
7.4.3擴展JWT令牌189 
7.4. 4從JWT令牌中解析自定義字段191
7.5關於微服務安全的總結193 
7.6小結195 

第8章使用Spring Cloud Stream的事件驅動架構196 
8.1為什麼使用消息傳遞、EDA和微服務197 
8.1.1使用同步請求-響應方式來傳達狀態變化198 
8.1. 2使用消息傳遞在服務之間傳達狀態更改199 
8.1.3消息傳遞架構的缺點201 
8.2 Spring Cloud Stream簡介202 
8.3編寫簡單的消息生產者和消費者205 
8.3.1在組織服務中編寫消息生產者205 
8.3.2在許可證服務中編寫消息消費者210 
8.3.3在實際操作中查看消息服務213 
8.4 Spring Cloud Stream用例:分佈式緩存214 
8.4.1使用Redis來緩存查找215 
8.4.2定義自定義通道221 
8.4.3將其全部匯集在一起:在收到消息時清除緩存222 
8.5小結223 

第9章使用Spring Cloud Sleuth和Zipkin進行分佈式跟踪224 
9.1 Spring Cloud Sleuth與關聯ID 225 
9.1.1將Spring Cloud Sleuth添加到許可證服務和組織服務中226 
9.1.2剖析Spring Cloud Sleuth跟踪226
9.2日誌聚合與Spring Cloud Sleuth 227 
9.2.1 Spring Cloud Sleuth與Papertrail實現實戰229 
9.2.2創建Papertrail賬戶並配置syslog連接器230 
9.2.3將Docker輸出重定向到Papertrail 232 
9.2.4在Papertrail中搜索Spring Cloud Sleuth的跟踪ID 234 
9.2.5使用Zuul將關聯ID添加到HTTP響應235 
9.3使用Open Zipkin進行分佈式跟踪237 
9.3.1添加Spring Cloud Sleuth和Zipkin依賴項238 
9.3.2配置服務以指向Zipkin 238 
9.3 .3安裝和配置Zipkin服務器239 
9.3.4設置跟踪級別240 
9.3.5使用Zipkin跟踪事務241 
9.3.6可視化更複雜的事務243 
9.3.7捕獲消息傳遞跟踪244 
9.3.8添加自定義跨度246 
9.4小結248 

第10章部署微服務250 
10.1 EagleEye:在雲中建立核心基礎設施251 
10.1.1使用亞馬遜的RDS創建PostgreSQL數據庫253 
10.1.2在AWS中創建Redis集群257 
10.1.3創建ECS集群258
10.2超越基礎設施:部署EagleEye 262 
10.3構建和部署管道的架構265 
10.4構建和部署管道實戰268 
10.5開始構建和部署管道:GitHub和Travis CI 270 
10.6使服務能夠在Travis CI中構建270 
10.6.1構建的核心運行時配置273 
10.6.2安裝預構建工具275 
10.6.3執行構建277 
10.6.4標記源代碼277 
10.6.5構建微服務並創建Docker鏡像279 
10.6.6將鏡像推送到Docker Hub 279 
10.6.7在Amazon ECS中啟動服務280 
10.6.8啟動平台測試280 
10.7關於構建和部署管道的總結282 
10.8小結282 
附錄A在桌面運行雲服務283 
附錄B OAuth2授權類型291