Spring微服務(wù)實(shí)戰(zhàn)
定 價(jià):79 元
叢書名:異步圖書
- 作者:[美]約翰·卡內(nèi)爾(John Carnell)
- 出版時(shí)間:2018/6/1
- ISBN:9787115481184
- 出 版 社:人民郵電出版社
- 中圖法分類:TP312.8JA
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書以一個(gè)名為EagleEye的項(xiàng)目為主線,介紹云、微服務(wù)等概念以及Spring Boot和Spring Cloud等諸多Spring項(xiàng)目,并介紹如何將EagleEye項(xiàng)目一步一步地從單體架構(gòu)重構(gòu)成微服務(wù)架構(gòu),進(jìn)而將這個(gè)項(xiàng)目拆分成眾多微服務(wù),讓它們運(yùn)行在各自的Docker容器中,實(shí)現(xiàn)持續(xù)集成/持續(xù)部署,并*終自動(dòng)部署到云環(huán)境(Amazon)中。針對(duì)在重構(gòu)過程中遇到的各種微服務(wù)開發(fā)會(huì)面臨的典型問題(包括開發(fā)、測(cè)試和運(yùn)維等問題),本書介紹了解決這些問題的核心模式,以及在實(shí)戰(zhàn)中如何選擇特定Spring Cloud子項(xiàng)目或其他工具解決這些問題。
本書適合擁有構(gòu)建分布式應(yīng)用程序的經(jīng)驗(yàn)、擁有Spring的知識(shí)背景以及對(duì)學(xué)習(xí)構(gòu)建基于微服務(wù)的應(yīng)用程序感興趣的Java開發(fā)人員閱讀。對(duì)于希望使用微服務(wù)構(gòu)建基于云的應(yīng)用程序,以及希望了解如何將基于微服務(wù)的應(yīng)用部署到云上的開發(fā)人員,本書也具有很好的學(xué)習(xí)參考價(jià)值。
微服務(wù)將代碼分解為小型的、分布式的獨(dú)立服務(wù),這些服務(wù)需要深謀遠(yuǎn)慮和仔細(xì)設(shè)計(jì)。Spring Boot和Spring Cloud簡(jiǎn)化了微服務(wù)應(yīng)用程序。就像Spring框架簡(jiǎn)化了企業(yè)級(jí)Java開發(fā)一樣,Spring Boot移除了與編寫基于REST的服務(wù)有關(guān)的樣板代碼。Spring Cloud提供了一套工具,用于微服務(wù)發(fā)現(xiàn)、路由以及將微服務(wù)部署到企業(yè)和云中。
本書教讀者如何使用Java和Spring平臺(tái)構(gòu)建基于微服務(wù)的應(yīng)用程序。在構(gòu)建和部署*個(gè)Spring Cloud應(yīng)用程序時(shí),讀者將學(xué)習(xí)如何進(jìn)行微服務(wù)設(shè)計(jì)。在本書中,精心挑選的真實(shí)案例展示了基于微服務(wù)的各種模式,這些模式用于配置、路由、擴(kuò)展和部署服務(wù)。讀者將了解Spring易于使用的工具,并看到其如何助力用微服務(wù)來增強(qiáng)和重構(gòu)現(xiàn)有的應(yīng)用程序。
本書主要內(nèi)容
● 核心微服務(wù)設(shè)計(jì)原則。
● 使用Spring Cloud Config管理配置。
● 使用Spring、Hystrix和Ribbon實(shí)現(xiàn)客戶端彈性。
● 使用Netflix Zuul進(jìn)行智能路由。
● 部署Spring Cloud應(yīng)用程序。
本書是為具有Java和Spring經(jīng)驗(yàn)的開發(fā)人員編寫的。
約翰·卡內(nèi)爾(John Carnell)是一位知名云工程師,擁有20 年的Java 開發(fā)經(jīng)驗(yàn)。他大部分時(shí)間都在使用AWS 平臺(tái)構(gòu)建基于電話的微服務(wù)。他的日常工作主要是設(shè)計(jì)和構(gòu)建跨Java、Clojure 和Go 等多種技術(shù)平臺(tái)的微服務(wù)。
目錄
第 1章 歡迎邁入云世界,Spring 1
1.1 什么是微服務(wù) 1
1.2 什么是Spring,為什么它與微服務(wù)有關(guān) 4
1.3 在本書中讀者會(huì)學(xué)到什么 5
1.4 為什么本書與你有關(guān) 6
1.5 使用Spring Boot來構(gòu)建微服務(wù) 6
1.6 為什么要改變構(gòu)建應(yīng)用的方式 10
1.7 云到底是什么 11
1.8 為什么是云和微服務(wù) 13
1.9 微服務(wù)不只是編寫代碼 14
1.9.1 核心微服務(wù)開發(fā)模式 15
1.9.2 微服務(wù)路由模式 16
1.9.3 微服務(wù)客戶端彈性模式 17
1.9.4 微服務(wù)安全模式 18
1.9.5 微服務(wù)日志記錄和跟蹤模式 19
1.9.6 微服務(wù)構(gòu)建和部署模式 20
1.10 使用Spring Cloud構(gòu)建微服務(wù) 22
1.10.1 Spring Boot 23
1.10.2 Spring Cloud Config 23
1.10.3 Spring Cloud服務(wù)發(fā)現(xiàn) 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 代碼供應(yīng) 25
1.11 通過示例來介紹Spring Cloud 25
1.12 確保本書的示例是有意義的 27
1.13 小結(jié) 28
第 2章 使用Spring Boot構(gòu)建微服務(wù) 29
2.1 架構(gòu)師的故事:設(shè)計(jì)微服務(wù)架構(gòu) 31
2.1.1 分解業(yè)務(wù)問題 31
2.1.2 建立服務(wù)粒度 32
2.1.3 互相交流:定義服務(wù)接口 35
2.2 何時(shí)不應(yīng)該使用微服務(wù) 36
2.2.1 構(gòu)建分布式系統(tǒng)的復(fù)雜性 36
2.2.2 服務(wù)器散亂 36
2.2.3 應(yīng)用程序的類型 36
2.2.4 數(shù)據(jù)事務(wù)和一致性 37
2.3 開發(fā)人員的故事:用SpringBoot和Java構(gòu)建微服務(wù) 37
2.3.1 從骨架項(xiàng)目開始 37
2.3.2 引導(dǎo)Spring Boot應(yīng)用程序:編寫引導(dǎo)類 39
2.3.3 構(gòu)建微服務(wù)的入口:Spring Boot控制器 40
2.4 DevOps工程師的故事:構(gòu)建運(yùn)行時(shí)的嚴(yán)謹(jǐn)性 44
2.4.1 服務(wù)裝配:打包和部署微服務(wù) 46
2.4.2 服務(wù)引導(dǎo):管理微服務(wù)的配置 47
2.4.3 服務(wù)注冊(cè)和發(fā)現(xiàn):客戶端如何與微服務(wù)通信 48
2.4.4 傳達(dá)微服務(wù)的健康狀況 49
2.5 將視角綜合起來 51
2.6 小結(jié) 52
第3章 使用Spring Cloud配置服務(wù)器控制配置 53
3.1 管理配置(和復(fù)雜性) 54
3.1.1 配置管理架構(gòu) 55
3.1.2 實(shí)施選擇 56
3.2 構(gòu)建Spring Cloud配置服務(wù)器 58
3.2.1 創(chuàng)建Spring Cloud Config引導(dǎo)類 61
3.2.2 使用帶有文件系統(tǒng)的Spring Cloud配置服務(wù)器 62
3.3 將Spring Cloud Config與Spring Boot客戶端集成 64
3.3.1 建立許可證服務(wù)對(duì)Spring Cloud Config服務(wù)器的依賴 65
3.3.2 配置許可證服務(wù)以使用Spring Cloud Config 66
3.3.3 使用Spring Cloud配置服務(wù)器連接數(shù)據(jù)源 69
3.3.4 使用@Value注解直接讀取屬性 72
3.3.5 使用Spring Cloud配置服務(wù)器和Git 73
3.3.6 使用Spring Cloud配置服務(wù)器刷新屬性 73
3.4 保護(hù)敏感的配置信息 75
3.4.1 下載并安裝加密所需的Oracle JCE jar 75
3.4.2 創(chuàng)建加密密鑰 76
3.4.3 加密和解密屬性 76
3.4.4 配置微服務(wù)以在客戶端使用加密 78
3.5 最后的想法 79
3.6 小結(jié) 80
第4章 服務(wù)發(fā)現(xiàn) 81
4.1 我的服務(wù)在哪里 82
4.2 云中的服務(wù)發(fā)現(xiàn) 84
4.2.1 服務(wù)發(fā)現(xiàn)架構(gòu) 84
4.2.2 使用Spring和Netflix Eureka進(jìn)行服務(wù)發(fā)現(xiàn)實(shí)戰(zhàn) 87
4.3 構(gòu)建Spring Eureka服務(wù) 88
4.4 通過Spring Eureka注冊(cè)服務(wù) 90
4.5 使用服務(wù)發(fā)現(xiàn)來查找服務(wù) 93
4.5.1 使用Spring DiscoveryClient查找服務(wù)實(shí)例 95
4.5.2 使用帶有Ribbon功能的Spring RestTemplate調(diào)用服務(wù) 97
4.5.3 使用Netflix Feign客戶端調(diào)用服務(wù) 98
4.6 小結(jié) 100
第5章 使用Spring Cloud和NetflixHystrix的客戶端彈性模式 101
5.1 什么是客戶端彈性模式 102
5.1.1 客戶端負(fù)載均衡模式 103
5.1.2 斷路器模式 103
5.1.3 后備模式 103
5.1.4 艙壁模式 104
5.2 為什么客戶端彈性很重要 104
5.3 進(jìn)入Hystrix 107
5.4 搭建許可服務(wù)器以使用Spring Cloud和Hystrix 107
5.5 使用Hystrix實(shí)現(xiàn)斷路器 109
5.5.1 對(duì)組織微服務(wù)的調(diào)用超時(shí) 111
5.5.2 定制斷路器的超時(shí)時(shí)間 112
5.6 后備處理 113
5.7 實(shí)現(xiàn)艙壁模式 115
5.8 基礎(chǔ)進(jìn)階微調(diào)Hystrix 118
5.9 線程上下文和Hystrix 122
5.9.1 ThreadLocal與Hystrix 122
5.9.2 HystrixConcurrencyStrategy實(shí)戰(zhàn) 125
5.10 小結(jié) 129
第6章 使用Spring Cloud和Zuul進(jìn)行服務(wù)路由 131
6.1 什么是服務(wù)網(wǎng)關(guān) 132
6.2 Spring Cloud和Netflix Zuul簡(jiǎn)介 133
6.2.1 建立一個(gè)Zuul Spring Boot項(xiàng)目 134
6.2.2 為Zuul服務(wù)使用Spring Cloud注解 134
6.2.3 配置Zuul與Eureka進(jìn)行通信 135
6.3 在Zuul中配置路由 135
6.3.1 通過服務(wù)發(fā)現(xiàn)自動(dòng)映射路由 136
6.3.2 使用服務(wù)發(fā)現(xiàn)手動(dòng)映射路由 137
6.3.3 使用靜態(tài)URL手動(dòng)映射路由 140
6.3.4 動(dòng)態(tài)重新加載路由配置 142
6.3.5 Zuul和服務(wù)超時(shí) 143
6.4 Zuul的真正威力:過濾器 144
6.5 構(gòu)建第 一個(gè)生成關(guān)聯(lián)ID的Zuul前置過濾器 147
6.6 構(gòu)建接收關(guān)聯(lián)ID的后置過濾器 155
6.7 構(gòu)建動(dòng)態(tài)路由過濾器 157
6.7.1 構(gòu)建路由過濾器的骨架 159
6.7.2 實(shí)現(xiàn)run()方法 159
6.7.3 轉(zhuǎn)發(fā)路由 161
6.7.4 整合 162
6.8 小結(jié) 163
第7章 保護(hù)微服務(wù) 164
7.1 OAuth2簡(jiǎn)介 165
7.2 從小事做起:使用Spring和OAuth2來保護(hù)單個(gè)端點(diǎn) 167
7.2.1 建立EagleEye OAuth2驗(yàn)證服務(wù) 167
7.2.2 使用OAuth2服務(wù)注冊(cè)客戶端應(yīng)用程序 168
7.2.3 配置EagleEye用戶 171
7.2.4 驗(yàn)證用戶 172
7.3 使用OAuth2保護(hù)組織服務(wù) 175
7.3.1 將Spring Security和OAuth2 jar添加到各個(gè)服務(wù) 176
7.3.2 配置服務(wù)以指向OAuth2驗(yàn)證服務(wù) 176
7.3.3 定義誰可以訪問服務(wù) 177
7.3.4 傳播OAuth2訪問令牌 180
7.4 JSON Web Token與OAuth2 183
7.4.1 修改驗(yàn)證服務(wù)以頒發(fā)JWT令牌 184
7.4.2 在微服務(wù)中使用JWT 188
7.4.3 擴(kuò)展JWT令牌 189
7.4.4 從JWT令牌中解析自定義字段 191
7.5 關(guān)于微服務(wù)安全的總結(jié) 193
7.6 小結(jié) 195
第8章 使用Spring Cloud Stream的事件驅(qū)動(dòng)架構(gòu) 196
8.1 為什么使用消息傳遞、EDA和微服務(wù) 197
8.1.1 使用同步請(qǐng)求-響應(yīng)方式來傳達(dá)狀態(tài)變化 198
8.1.2 使用消息傳遞在服務(wù)之間傳達(dá)狀態(tài)更改 199
8.1.3 消息傳遞架構(gòu)的缺點(diǎn) 201
8.2 Spring Cloud Stream簡(jiǎn)介 202
8.3 編寫簡(jiǎn)單的消息生產(chǎn)者和消費(fèi)者 205
8.3.1 在組織服務(wù)中編寫消息生產(chǎn)者 205
8.3.2 在許可證服務(wù)中編寫消息消費(fèi)者 210
8.3.3 在實(shí)際操作中查看消息服務(wù) 213
8.4 Spring Cloud Stream用例:分布式緩存 214
8.4.1 使用Redis來緩存查找 215
8.4.2 定義自定義通道 221
8.4.3 將其全部匯集在一起:在收到消息時(shí)清除緩存 222
8.5 小結(jié) 223
第9章 使用Spring Cloud Sleuth和Zipkin進(jìn)行分布式跟蹤 224
9.1 Spring Cloud Sleuth與關(guān)聯(lián)ID 225
9.1.1 將Spring Cloud Sleuth添加到許可證服務(wù)和組織服務(wù)中 226
9.1.2 剖析Spring Cloud Sleuth跟蹤 226
9.2 日志聚合與Spring Cloud Sleuth 227
9.2.1 Spring Cloud Sleuth與Papertrail實(shí)現(xiàn)實(shí)戰(zhàn) 229
9.2.2 創(chuàng)建Papertrail賬戶并配置syslog連接器 230
9.2.3 將Docker輸出重定向到Papertrail 232
9.2.4 在Papertrail中搜索Spring Cloud Sleuth的跟蹤ID 234
9.2.5 使用Zuul將關(guān)聯(lián)ID添加到HTTP響應(yīng) 235
9.3 使用Open Zipkin進(jìn)行分布式跟蹤 237
9.3.1 添加Spring Cloud Sleuth和Zipkin依賴項(xiàng) 238
9.3.2 配置服務(wù)以指向Zipkin 238
9.3.3 安裝和配置Zipkin服務(wù)器 239
9.3.4 設(shè)置跟蹤級(jí)別 240
9.3.5 使用Zipkin跟蹤事務(wù) 241
9.3.6 可視化更復(fù)雜的事務(wù) 243
9.3.7 捕獲消息傳遞跟蹤 244
9.3.8 添加自定義跨度 246
9.4 小結(jié) 248
第 10章 部署微服務(wù) 250
10.1 EagleEye:在云中建立核心基礎(chǔ)設(shè)施 251
10.1.1 使用亞馬遜的RDS創(chuàng)建PostgreSQL數(shù)據(jù)庫(kù) 253
10.1.2 在AWS中創(chuàng)建Redis集群 257
10.1.3 創(chuàng)建ECS集群 258
10.2 超越基礎(chǔ)設(shè)施:部署EagleEye 262
10.3 構(gòu)建和部署管道的架構(gòu) 265
10.4 構(gòu)建和部署管道實(shí)戰(zhàn) 268
10.5 開始構(gòu)建和部署管道:GitHub和Travis CI 270
10.6 使服務(wù)能夠在Travis CI中構(gòu)建 270
10.6.1 構(gòu)建的核心運(yùn)行時(shí)配置 273
10.6.2 安裝預(yù)構(gòu)建工具 275
10.6.3 執(zhí)行構(gòu)建 277
10.6.4 標(biāo)記源代碼 277
10.6.5 構(gòu)建微服務(wù)并創(chuàng)建Docker鏡像 279
10.6.6 將鏡像推送到Docker Hub 279
10.6.7 在Amazon ECS中啟動(dòng)服務(wù) 280
10.6.8 啟動(dòng)平臺(tái)測(cè)試 280
10.7 關(guān)于構(gòu)建和部署管道的總結(jié) 282
10.8 小結(jié) 282
附錄A 在桌面運(yùn)行云服務(wù) 283
附錄B OAuth2授權(quán)類型 291