內容簡介
無論是傳統IT行業,還是網際網路行業,都正處於行業歷史上最劇烈的變革中 :大量的系統正在從傳統的IT架構轉向基於雲的架構, 開發模式也正在從開發和運維分工的傳統模式,逐漸轉向統一的“DevOps”模式。Java技術已經進入了新的生命周期,大量被用於構建現代的、基於雲的應用程式。 本書詳細闡述了開發雲原生應用程式的機遇和挑戰,明確指出了成功實現的方向,並且重點介紹了微服務框架Spring Boot。Spring Boot可以輕鬆創建任何粒度的 Spring服務,並部署到現代的容器環境中。本書主要面向正在使用 Spring Boot、SpringCloud和Cloud Foundry, 以便更快、更好地構建軟體的Java/JVM 開發人員。本書一共分為4個部分共15章。第1章和第2章介紹了雲原生思想產生的背景,然後介紹了Spring Foundry。第3章介紹了如何配置Spring Boot應用程式。第4章介紹了如何測試Spring應用程式,從如何測試最簡單的組件到測試分散式系統。第5章介紹了可以將應用程式遷移到Cloud Foundry等雲平台的輕量級重構方式。第6章介紹了如何使用Spring構建HTTP和RESTful服務。第7章介紹了在分散式系統中控制請求進出的常用方法。第8章介紹了如何構建一個回響外部請求的服務。第9章介紹了如何使用Spring Data在Spring中管理數據。這為領域驅動的思想奠定了基礎。第10章介紹了如何使用Spring中事件驅動、訊息中心化的能力,來集成分散式服務和數據。第11章介紹了如何利用雲平台(如Cloud Foundry)的能力來處理長期運行的工作。第12章介紹了在分散式系統中管理狀態的一些方法。第13章介紹了如何構建具備可觀測性和可操作性的系統。第14章介紹了如何構建類似於Cloud Foundry平台的服務代理。第15章介紹了持續交付背後的思想。
目錄
前言(James Watters).......................................................xv
前言(Rod Johnson)........................................................ xvii
前言................................................................................ xix
第Ⅰ部分 基礎知識
第1 章 雲原生應用程式.......................................................... 3
亞馬遜的故事 ............................................................................................................... 3
平台的承諾 ................................................................................................................... 5
模式 .............................................................................................................................. 7
可擴展性 ....................................................................................................................... 7
可靠性 ........................................................................................................................... 8
敏捷性 ........................................................................................................................... 8
Netflix 的故事 ............................................................................................................... 9
微服務 ................................................................................................................. 11
拆分單體系統 ...................................................................................................... 12
Netflix OSS ......................................................................................................... 13
雲原生Java ......................................................................................................... 14
十二要素原則 ............................................................................................................. 14
代碼庫 ................................................................................................................. 15
依賴 ..................................................................................................................... 15
配置 ..................................................................................................................... 16
x | 目錄
後端服務 ............................................................................................................. 17
構建、發布、運行 .............................................................................................. 17
進程 ..................................................................................................................... 17
連線埠綁定 ............................................................................................................. 18
並發 ..................................................................................................................... 18
易處理 ................................................................................................................. 18
開發/ 生產環境一致 ........................................................................................... 19
日誌 ..................................................................................................................... 19
管理進程 ............................................................................................................. 19
總結 ............................................................................................................................ 20
第2 章 訓練營:Spring Boot 和Cloud Foundry......................21
什麼是Spring Boot ..................................................................................................... 21
Spring Initializr 入門 ................................................................................................... 21
Spring Tool Suite 入門 ................................................................................................ 30
安裝Spring Tool Suite(STS)............................................................................. 30
使用Spring Initializr 創建一個新項目 ................................................................ 31
Spring 指南大全 .......................................................................................................... 36
遵循STS 中的指南 ............................................................................................. 38
配置 ............................................................................................................................ 40
Cloud Foundry 平台 .................................................................................................... 52
總結 ............................................................................................................................ 66
第3 章 符合十二要素程式風格的配置....................................... 67
令人迷惑的“配置”合併 ........................................................................................... 67
Spring 框架對配置的支持 ........................................................................................... 67
PropertyPlaceholderConfigurer ............................................................................ 68
Environment 接口和@Value 註解 ....................................................................... 69
Profile .................................................................................................................. 71
啟動配置 ..................................................................................................................... 73
使用Spring Cloud Config Server 進行中心化、日誌型的配置................................... 76
Spring Cloud Config Server ................................................................................. 76
Spring Cloud Config 客戶端 ................................................................................ 78
安全 ..................................................................................................................... 79
目錄 | xi
可刷新的配置 ............................................................................................................. 79
總結 ............................................................................................................................ 83
第4章 測試..................................................................... 85
測試的構成 ................................................................................................................. 86
在Spring Boot 中進行測試 ......................................................................................... 86
集成測試 ..................................................................................................................... 88
測試切片 ............................................................................................................. 89
測試中的Mock ................................................................................................... 89
使用@SpringBootTest 中的Servlet 容器 ............................................................ 93
測試分片 ............................................................................................................. 94
端到端測試 ............................................................................................................... 102
測試分散式系統 ................................................................................................ 102
消費者驅動的契約測試 ..................................................................................... 104
Spring Cloud Contract ....................................................................................... 105
總結 .......................................................................................................................... 113
第5 章 遷移遺留的應用程式................................................. 115
契約 .......................................................................................................................... 115
遷移應用程式環境 .................................................................................................... 116
開箱即用的構建包(Buildpacks) ..................................................................... 116
自定義的構建包 ................................................................................................ 117
容器化的應用程式 ............................................................................................ 118
將應用程式遷移到雲上的微重構 .............................................................................. 119
連線後端服務 .................................................................................................... 120
用Spring 實現服務平等 .................................................................................... 121
總結 .......................................................................................................................... 133
第Ⅱ部分 Web 服務
第6 章 REST API........................................................... 137
倫納德· 理查森的成熟模型 ...................................................................................... 137
使用Spring MVC 實現簡單的REST API ................................................................. 139
內容協商 ................................................................................................................... 142
xii | 目錄
讀寫二進制數據 ................................................................................................ 142
Google Protocol Buffers .................................................................................... 145
錯誤處理 ................................................................................................................... 150
超媒體 ....................................................................................................................... 152
媒體類型和模式 ................................................................................................ 158
API 版本 ................................................................................................................... 159
編寫REST API 文檔 ................................................................................................. 162
客戶端 ....................................................................................................................... 167
用於臨時瀏覽和互動的REST 客戶端 ............................................................... 167
RestTemplate ..................................................................................................... 171
總結 .......................................................................................................................... 177
第7 章 路由.................................................................... 179
DiscoveryClient 接口 ................................................................................................ 180
Cloud Foundry Route 服務 ........................................................................................ 190
總結 .......................................................................................................................... 195
第8 章 邊緣服務............................................................... 197
Greetings 服務 .......................................................................................................... 198
一個簡單的邊緣服務 ................................................................................................ 200
Netflix Feign ............................................................................................................. 202
使用Netflix Zuul 進行過濾和代理 ........................................................................... 204
自定義Zuul 過濾器 ........................................................................................... 214
邊緣服務的安全 ........................................................................................................ 218
OAuth ....................................................................................................................... 219
服務端應用程式 ................................................................................................ 220
HTML5 和JavaScript 單頁面應用程式 ............................................................. 221
沒有用戶的套用 ................................................................................................ 221
受信任的客戶端 ................................................................................................ 221
Spring Security .......................................................................................................... 222
Spring Cloud Security ............................................................................................... 227
一個Spring Security OAuth 授權伺服器 ........................................................... 227
保護Greetings 資源伺服器的安全 .................................................................... 232
創建一個受OAuth 保護的單頁面應用程式 ...................................................... 238
總結 .......................................................................................................................... 247
目錄 | xiii
第Ⅲ部分 數據整合
第9 章 數據管理............................................................... 251
數據建模 ................................................................................................................... 251
關係資料庫管理系統(RDBMS) ...................................................................... 252
NoSQL............................................................................................................... 253
Spring Data ............................................................................................................... 253
Spring Data 應用程式的結構 ............................................................................. 254
域類 ................................................................................................................... 254
庫 ...................................................................................................................... 254
為領域數據組織Java 包 .................................................................................... 255
使用JDBC 訪問RDBMS 數據 ................................................................................. 258
Spring 的JDBC 支持 ................................................................................................ 259
Spring Data 示例 ....................................................................................................... 261
Spring Data JPA......................................................................................................... 264
Account Service ................................................................................................. 264
集成測試 ........................................................................................................... 274
Spring Data MongoDB .............................................................................................. 275
Order Service ..................................................................................................... 275
集成測試 ........................................................................................................... 282
Spring Data Neo4j ..................................................................................................... 284
Inventory Service ............................................................................................... 284
集成測試 ........................................................................................................... 294
Spring Data Redis ...................................................................................................... 297
高速快取 ........................................................................................................... 298
總結 .......................................................................................................................... 302
第10 章 訊息系統............................................................. 303
Spring Integration 的事件驅動架構 ........................................................................... 304
訊息端點 ........................................................................................................... 305
使用簡單的組件構建複雜的系統 ...................................................................... 306
訊息代理、橋接、競爭消費者模式和事件溯源 ....................................................... 314
發布—訂閱目的地 ............................................................................................ 314
點對點目的地 .................................................................................................... 315
xiv | 目錄
Spring Cloud Stream ................................................................................................. 315
流生產者 ........................................................................................................... 316
流消費者 ........................................................................................................... 321
總結 .......................................................................................................................... 323
第11 章 批處理和任務........................................................ 325
批處理工作 ............................................................................................................... 325
Spring Batch .............................................................................................................. 326
我們的第一個批處理作業 ................................................................................. 327
調度 .......................................................................................................................... 336
通過訊息傳遞遠程分區Spring 批處理作業 .............................................................. 337
任務管理 ................................................................................................................... 346
通過Workflow 進行的以工作流為中心的整合 ......................................................... 348
使用訊息傳遞的分散式............................................................................................. 362
總結 .......................................................................................................................... 362
第12 章 數據集成............................................................. 363
分散式事務 ............................................................................................................... 364
故障隔離和優雅的降級............................................................................................. 364
saga 模式 ................................................................................................................... 369
CQRS(命令查詢責任分離) .................................................................................... 369
投訴API ............................................................................................................ 371
投訴統計API .................................................................................................... 383
Spring Cloud Data Flow ............................................................................................ 385
Stream ............................................................................................................... 387
任務 ................................................................................................................... 390
REST API .......................................................................................................... 391
實現Data Flow 客戶端 ...................................................................................... 392
總結 .......................................................................................................................... 407
第IV 部分 生產
第13 章 可觀測的系統....................................................... 411
你構建,你運行 ........................................................................................................ 412
目錄 | xv
謀殺神秘微服務 ........................................................................................................ 413
十二要素運維 ........................................................................................................... 413
新方式 ....................................................................................................................... 414
可觀測性 ................................................................................................................... 416
推與拉的可觀測性和解析率 ..................................................................................... 416
使用Spring Boot Actuator 捕獲應用程式的當前狀態 ............................................... 417
度量 .......................................................................................................................... 418
通過/info 端點識別服務 ........................................................................................... 431
健康檢查 ................................................................................................................... 432
審計事件 ................................................................................................................... 436
應用程式日誌 ........................................................................................................... 439
指定日誌輸出 .................................................................................................... 440
指定日誌級別 .................................................................................................... 441
分散式跟蹤 ............................................................................................................... 445
用Spring Cloud Sleuth 尋找線索 ...................................................................... 446
多少數據是足夠的 ............................................................................................ 447
OpenZipkin :一張圖片勝過千絲萬縷 ............................................................... 448
跟蹤其他平台和技術 ......................................................................................... 454
儀錶板 ....................................................................................................................... 455
使用Hystrix 儀錶板監控下游服務 .................................................................... 455
Codecentric 的Spring Boot Admin .................................................................... 459
Ordina Microservices 儀錶板 ............................................................................. 462
Pivotal Cloud Foundry 的AppsManager ............................................................ 463
修復 .......................................................................................................................... 465
總結 .......................................................................................................................... 467
第14 章 服務代理.............................................................469
創建後台服務 ........................................................................................................... 470
平台視圖 ................................................................................................................... 472
使用Spring Cloud Cloud Foundry Service Broker 實現服務代理 ............................... 473
簡單的Amazon S3 服務代理 ............................................................................ 473
服務目錄 ........................................................................................................... 474
管理服務實例 .................................................................................................... 476
服務綁定 ........................................................................................................... 482
保護服務代理 .................................................................................................... 486
xvi | 目錄
部署 .......................................................................................................................... 487
使用BOSH 發布 ............................................................................................... 487
使用Cloud Foundry 發布 .................................................................................. 488
註冊Amazon S3 Service Broker ............................................................................... 489
創建Amazon S3 服務實例 ........................................................................................ 490
消費服務實例 .................................................................................................... 491
S3 客戶端應用程式 ................................................................................................... 493
運行測試 ................................................................................................................... 496
總結 .......................................................................................................................... 496
第15 章 持續交付.............................................................497
持續集成之外 ........................................................................................................... 497
John Allspaw 在Flickr 以及後來的Etsy ........................................................... 498
Netflix 的Adrian Cockroft ................................................................................ 499
亞馬遜的持續交付 ............................................................................................ 500
流水線 ....................................................................................................................... 500
測試 .......................................................................................................................... 501
持續交付微服務 ........................................................................................................ 502
工具 .......................................................................................................................... 503
Concourse ................................................................................................................. 503
容器 ................................................................................................................... 504
持續交付微服務 ........................................................................................................ 504
安裝Concourse ................................................................................................. 505
基本的管道設計 ................................................................................................ 506
持續集成 ........................................................................................................... 518
消費者驅動的協約測試............................................................................................. 518
User 微服務流水線 ............................................................................................ 519
數據 .......................................................................................................................... 522
生產 .......................................................................................................................... 523
第V 部分 附錄
附錄A 在Java EE 中使用Spring Boot................................527
索引............................................................................... 552