雲原生Spring實戰 Spring Boot與Kubernetes實踐 Cloud Native Spring in Action

[美]托馬斯·維塔萊(Thomas Vitale)

  • 雲原生Spring實戰 Spring Boot與Kubernetes實踐-preview-1
  • 雲原生Spring實戰 Spring Boot與Kubernetes實踐-preview-2
雲原生Spring實戰 Spring Boot與Kubernetes實踐-preview-1

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

相關主題

商品描述

本書提供了一個以項目為導向的雲原生Spring實踐指南,將幫助你總攬日益復雜的雲計算環境,並學習如何將模式和技術結合在一起,建立一個真正的雲計算原生系統並將其投入生產。本書分為四個部分,共計16章。第一部分內容為此次從代碼到生產的雲原生之旅奠定了基礎,幫助你更好地理解本書其他部分所涉及的主題。第二部分介紹了使用Spring Boot和Kubernetes構建生產就緒的雲原生應用的主要實踐和模式。第三部分涵蓋了雲中分佈式系統的基本屬性和模式,包括韌性、安全性、可擴展性和API網關,以及反應式編程和事件驅動架構。第四部分使你的雲原生應用為生產做好準備,解決可觀測性、配置管理、Secret管理和部署策略等問題,並涵蓋了Serverless和原生鏡像。

作者簡介

托马斯·维塔莱(Thomas Vitale)是一名软件工程师和架构师,专门构建云原生、有韧性和安全的企业应用。他在丹麦的Systematic公司设计和开发软件解决方案,在那里他一直致力于为云原生领域提供现代化的平台和应用,专注于开发体验和安全性。

他主要关注的领域是Java、Spring Boot、Kubernetes、Knative和一般的云原生技术。托马斯支持持续交付实践,并相信协作的文化,致力于为用户、消费者和企业交付价值。他喜欢为Spring Security和Spring Cloud等开源项目作贡献,并与社区分享知识。

托马斯拥有意大利都灵理工大学的计算机工程硕士学位,主要研究方向是软件领域。他获得CNCF Certified Kubernetes Application Developer、Pivotal Certified Spring Professional以及RedHat Certified Enterprise Appli- cation Developer认证。他在各种活动中的演讲主题涵盖SpringOne、Spring I/O、KubeCon+CloudNativeCon、Devoxx、GOTO、JBCNConf、DevTalks和J4K。

目錄大綱

目錄

 

第 一部分 元原生基礎

第 1章 雲原生簡介

1.1什麽是雲原生?

1.1.1雲原生的3P

1.2 雲和雲計算模型

1.2.1 基礎設施即服務

1.2.2 容器即服務

1.2.3 平臺即服務

1.2.4 函數即服務

1.2.5 軟件即服務

1.3 雲原生應用的屬性

1.3.1 可擴展性

1.3.2 松耦合

1.3.3 韌性

1.3.4 可觀測性

1.3.5 可管理性

1.4 支撐雲原生的文化與實踐

1.4.1 自動化

1.4.2 持續交付

1.4.3 DevOps

1.5 雲是最佳方案嗎?

1.5.1 速度

1.5.2 韌性

1.5.3 擴展

1.5.4 節省成本

1.6 雲原生的拓撲結構

1.6.1 容器

1.6.2 編排

1.6.3 Serverless

1.7 雲原生應用的架構

1.7.1 從多層架構到微服務和其他架構

1.7.2 基於服務架構的雲原生應用

小結

第 2章 雲原生模式與技術

2.1 雲原生開發原則:12- Factor及其擴展

2.1.1 一份基準代碼,一個應用

2.1.2 API優先

2.1.3 依賴管理

2.1.4 設計,構建,發布和運行

2.1.5 配置、憑證和代碼

2.1.6 日誌

2.1.7 易處理

2.1.8 支撐服務

2.1.9 環境對等

2.1.10 管理進程

2.1.11 埠綁定

2.1.12 無狀態進程

2.1.13 並發

2.1.14 遙測

2.1.15 認證與授權

2.2 使用Spring構建雲原生應用

2.2.1 Spring全景圖概覽

2.2.2 構建Spring Boot應用

2.3 使用Docker容器化應用

2.3.1 Docker簡介:鏡像與容器

2.3.2 以容器形式運行Spring應用

2.4 使用Kubernetes管理容器

2.4.1 Kubernetes簡介:Deployment、Pod與Service

2.4.2 在Kubernetes中運行Spring應用

2.5 雲原生樣例:Polar Bookshop

2.5.1 理解系統需求

2.5.2 探索項目中所使用的模式和技術

小結

第二部分 雲原生開發

第3章 雲原生開發入門

3.1 啟動雲原生項目

3.1.1 一份基準代碼,一個應用

3.1.2 使用Gradle和Maven進行依賴管理

3.2 使用嵌入式的服務器

3.2.1 可執行的JAR文件與嵌入式服務器

3.2.2 理解每個請求一個線程的模型

3.2.3 配置嵌入式服務器

3.3 使用Spring MVC構建RESTful應用

3.3.1 先有REST API,後有業務邏輯

3.3.2 使用Spring MVC實現REST API

3.3.3 數據驗證和錯誤處理

3.3.4 為滿足未來需求而不斷演進的API

3.4 使用Spring測試RESTful應用

3.4.1 使用JUnit 5進行單元測試

3.4.2 使用@SpringBootTest進行集成測試

3.4.3 使用@WebMvcTest測試REST控制器

3.4.4 使用@JsonTest測試JSON序列化

3.5 部署流水線:構建與測試

3.5.1 理解部署流水線的提交階段

3.5.2 使用GitHub Actions實現提交階段

小結

第4章 外部化配置管理

4.1 Spring中的配置:屬性與Profile

4.1.1 屬性:用作配置的鍵/值對

4.1.2 Profile:特性標記和配置組

4.2 外部化配置:一次構建,多個配置

4.2.1 通過命令行參數配置應用

4.2.2 通過JVM系統屬性配置應用

4.2.3 通過環境變量配置應用

4.3 使用Spring Cloud Config Server實現中心化的配置管理

4.3.1 使用Git存儲配置數據

4.3.2 搭建配置服務器

4.3.3 確保配置服務器的韌性

4.3.4 理解配置服務器的REST API

4.4 通過Spring Cloud Config Client使用配置服務器

4.4.1 搭建配置客戶端

4.4.2 確保配置客戶端的韌性

4.4.3 在運行時刷新配置

小結

第5章 雲中的數據持久化與數據管理

5.1 雲原生系統的數據庫

5.1.1 雲中的數據服務

5.1.2 以容器的形式運行PostgreSQL

5.2 使用Spring Data JDBC進行數據持久化

5.2.1 使用JDBC建立到數據庫的連接

5.2.2 使用Spring Data定義持久化實體

5.2.3 啟用和配置JDBC審計

5.2.4 使用Spring Data實現數據資源庫

5.3 使用Spring和Testcontainers測試數據持久化

5.3.1 為PostgreSQL配置Testcontainers

5.3.2 使用@DataJdbcTest和Testcontainers測試數據持久化

5.3.3 使用@SpringBootTest和Testcontainers進行集成測試

5.4 使用Flyway管理生產環境中的數據庫

5.4.1 理解Flyway:對數據庫進行版本控制

5.4.2 使用Flyway初始化數據庫模式

5.4.3 使用Flyway演進數據庫

小結

第6章 容器化Spring Boot

6.1 在Docker上使用容器鏡像

6.1.1 理解容器鏡像

6.1.2 使用Dockerfile創建鏡像

6.1.3 發布鏡像到GitHub Container Registry

6.2 將Spring Boot應用打包為容器鏡像

6.2.1 讓Spring Boot為容器化做好準備

6.2.2 使用Dockerfiles容器化Spring Boot

6.2.3 構建適用於生產環境的容器鏡像

6.2.4 使用Cloud Native Buildpacks容器化Spring Boot

6.3 使用Docker Compose管理Spring Boot容器

6.3.1 使用Docker Compose管理容器的生命周期

6.3.2 調試Spring Boot容器

6.4 部署流水線:打包和發布

6.4.1 在提交階段構建發布候選

6.4.2 使用GitHub Actions發布容器鏡像

6.5 小結

第7章 面向Spring Boot的Kubernetes基礎

7.1 從Docker到Kubernetes

7.1.1 使用本地的Kubernetes集群

7.1.2 管理本地集群中的數據服務

7.2 Spring Boot應用的Kubernetes Deployment

7.2.1 從容器到Pod

7.2.2 使用Deployment來控制Pod

7.2.3 創建Spring Boot應用的Deployment

7.3 服務發現與負載均衡

7.3.1 理解服務發現和負載均衡

7.3.2 客戶端的服務發現和負載均衡

7.3.3 服務器端的服務發現和負載均衡

7.3.4 使用Kubernetes Service對外暴露Spring Boot應用

7.4 可擴展性和易處理性

7.4.1 確保易處理性:快速啟動

7.4.2 確保易處理性:優雅關機

7.4.3 擴展Spring Boot應用

7.5 使用Tilt實現本地的Kubernetes開發

7.5.1 使用Tilt實現內開發循環

7.5.2 使用Octant可視化Kubernetes工作負載

7.6 部署流水線:校驗Kubernetes清單

7.6.1 在提交階段校驗Kubernetes清單

7.6.2 使用GitHub Actions實現Kubernetes清單校驗的自動化

7.6 小結

第三部分 雲原生分佈式系統

第8章 反應式Spring:韌性與可擴展性

8.1 使用Reactor和Spring的異步與非阻塞架構

8.1.1 從“每個請求一個線程”到事件循環

8.1.2 Reactor項目:使用Mono和Flux實現的反應式流

8.1.3 理解Spring反應式技術棧

8.2 使用Spring WebFlux和Spring Data R2DBC實現反應式服務器

8.2.1 使用Spring Boot引導反應式應用

8.2.2 使用Spring Data R2DBC反應式地持久化數據

8.2.3 使用反應式流實現業務邏輯

8.2.4 使用Spring WebFlux暴露REST API

8.3 使用Spring WebClient編寫反應式客戶端

8.3.1 Spring中的服務與服務通信

8.3.2 理解如何交換數據

8.3.3 使用WebClient實現REST客戶端

8.4使用反應式Spring實現韌性的應用

8.4.1 超時

8.4.2 重試

8.4.3 後備策略和錯誤處理

8.5 使用Spring、Reactor和Testcontainers測試反應式應用

8.5.1 使用mock Web服務器測試REST客戶端

8.5.2 使用@DataR2dbcTest和Testcontainers測試數據持久化

8.5.3 使用@WebFluxTest測試REST控制器

8.6小結

第9章 API網關與斷路器

9.1 邊緣服務器和Spring Cloud Gateway

9.1.1 使用Spring Cloud Gateway引導邊緣服務器

9.1.2 定義路由和斷言

9.1.3 通過過濾器處理請求和響應

9.2 使用Spring Cloud Circuit Breaker和Resilience4J實現容錯

9.2.1 使用Spring Cloud Circuit Breaker引入斷路器

9.2.2 使用Resilience4J配置斷路器

9.2.3 使用Spring WebFlux定義後備REST API

9.2.4 組合斷路器、重試和限時器

9.3 使用Spring Cloud Gateway和Redis進行限流

9.3.1 以容器的形式運行Redis

9.3.2 集成Spring與Redis

9.3.3 配置請求限流器

9.4 基於Redis的分佈式會話管理

9.4.1 使用Spring Session Data Redis處理會話

9.5 使用Kubernetes Ingress管理外部訪問

9.5.1 理解Ingress API和Ingress Controller

9.5.2 使用Ingress對象

小結

第 10章 事件驅動應用與函數

10.1.1 理解事件驅動模型

10.1.2 使用發布/訂閱模型

10.2 基於RabbitMQ的消息代理

10.2.1 理解消息系統中的AMQP

10.2.2 使用RabbitMQ實現發布/訂閱通信

10.3 基於Spring Cloud Function的函數

10.3.1 在Spring Cloud Function中使用函數化範式

10.3.2 組合與集成函數:REST、Serverless與數據流

10.4 使用Spring Cloud Stream處理消息

10.4.1 配置與RabbitMQ的集成

10.4.2 將函數綁定至消息通道

10.4.3 使用Test Binder編寫集成測試

10.4.4 保持消息系統應對故障的韌性

10.5 使用Spring Cloud Stream生產和消費消息

10.5.1 實現事件消費者以及冪等性問題

10.5.2 實現事件生產者以及原子性問題

小結

第 11章 安全性:認證與SPA

11.1 理解Spring Security的基礎知識

11.2 使用Keycloak管理用戶賬號

11.2.1 定義安全realm

11.2.2 管理用戶和角色

11.3 使用OpenID Connect、JWT和Keycloak進行認證

11.3.1 使用OpenID Connect認證用戶

11.3.2 使用JWT交換用戶信息

11.3.3 在Keycloak中註冊應用

11.4 使用Spring Security和OpenID Connect認證用戶

11.4.1 添加新的依賴

11.4.2 配置Spring Security和Keycloak集成

11.4.3 Spring Security的基本配置

11.4.4 探查認證用戶的上下文

11.4.5 在Spring Security和Keycloak中配置用戶退出

11.5 集成Spring Security與SPA

11.5.1 運行Angular應用

11.5.2 控制認證流

11.5.3 防止跨站請求偽造

11.6 測試Spring Security和OpenID Connect

11.6.1 測試OIDC認證

11.6.2 測試CSRF

小結

第 12章 安全:授權和審計

12.1 使用Spring Cloud Gateway和OAuth2實現授權和角色管理

12.1.1 從Spring Cloud Gateway到其他服務的令牌中繼

12.1.2 自定義令牌並傳播用戶角色

12.2 使用Spring Security和OAuth2保護API(命令式)

12.2.1 以OAuth2資源服務器的方式保護Spring Boot應用

12.2.2 使用Spring Security和JWT實現基於角色的訪問控制

12.2.3 使用Spring Security和Testcontainers測試OAuth2

12.3 使用Spring Security和OAuth2保護API(反應式)

12.3.1 以OAuth2資源服務器的方式保護Spring Boot應用

12.3.2 使用Spring Security和Testcontainers測試OAuth2

12.4 使用Spring Security和Spring Data保護和審計數據

12.4.1 使用Spring Security和Spring Data JDBC審計數據

12.4.2 使用Spring Data和@WithMockUser測試數據審計

12.4.3 使用Spring Security和Spring Data R2DBC保護用戶數據

12.4.4使用@WithMockUser和Spring Data R2DBC測試數據審計和保護

小結

第四部分 雲原生生產化

第 13章 可觀測性與監控

13.1 使用Spring Boot、Loki和Fluent Bit管理日誌

13.1.1 使用Spring Boot記錄日誌

13.1.2 使用Loki、Fluent Bit和Grafana管理日誌

13.2 使用Spring Boot Actuator和Kubernetes實現健康探針

13.2.1 使用Actuator定義健康探針

13.2.2 在Spring Boot和Kubernetes中配置健康指針

13.3 使用Spring Boot Actuator、Prometheus和Grafana實現度量和監控

13.3.1 使用Spring Boot Actuator和Micrometer配置度量

13.3.2 使用Prometheus和Grafana監控度量

13.3.3 在Kubernetes中配置Prometheus度量

13.4 使用OpenTelemetry和Tempo進行分佈式跟蹤

13.4.1 使用Tempo和Grafana管理跟蹤

13.4.2 在Spring Boot中使用OpenTelemetry配置跟蹤

13.5 使用Spring Boot Actuator管理和監控應用

13.5.1 在Spring Boot中監控Flyway遷移

13.5.2 暴露應用信息

13.5.3 生成和分析堆轉儲文件

小結

第 14章 配置與Secret管理

14.1 在Kubernetes上配置應用

14.1.1 使用Spring Security保護配置服務器

14.1.2 使用Spring Cloud Bus刷新配置

14.1.3 使用Spring Cloud Config管理Secret

14.1.4 禁用Spring Cloud Config

14.2 在Kubernetes中使用ConfigMap和Secret

14.2.1 使用ConfigMap配置Spring Boot

14.2.2 (是否應該)使用Secret存儲敏感信息

14.2.3 使用Spring Cloud Kubernetes在運行時刷新配置

14.3 使用Kustomize進行配置管理

14.3.1 使用Kustomize管理和配置 Spring Boot應用

14.3.2 使用Kustomize管理多環境的Kubernetes配置

14.3.3 定義staging環境的配置Overlay

14.3.4 自定義環境變量

14.3.5 自定義ConfigMap

14.3.6 自定義鏡像名稱和版本

14.3.7 自定義副本數量

小結

第 15章 持續交付與GitOps

15.1 部署流水線:驗收階段

15.1.1 為持續交付中的發布候選進行版本化

15.1.2 理解部署流水線的驗收階段

15.1.3 使用GitHub Actions實現驗收階段

15.2 配置Spring Boot的生產化

15.2.1 為生產化定義配置Overlay

15.2.2 為Spring Boot容器配置CPU和內存

15.2.3 將Spring Boot部署至生產環境

15.3 部署流水線:生產化階段

15.3.1 理解部署流水線的生產化階段

15.3.2 使用GitHub Actions實現生產化階段

15.4 使用GitOps實現持續部署

15.4.1 使用Argo CD實現GitOps

15.4.2 組合到一起

小結

第 16章 Serverless、GraalVM與Knative

16.1 使用Spring Native和GraalVM生成原生鏡像

16.1.1 理解GraalVM和Spring Native

16.1.2 使用Spring Native引入GraalVM對Spring Boot的支持

16.1.3 將Spring Boot應用編譯為原生鏡像

16.2 使用Spring Cloud Function的Serverless應用

16.2.1 使用Spring Cloud Function構建Serverless應用

16.2.2 部署流水線:構建和發布

16.2.3 將Serverless應用部署在雲中

16.3 使用Knative部署Serverless應用

16.3.1 搭建Knative平臺

16.3.2 使用Knative CLI部署應用

16.3.3 使用Knative清單部署應用

小結

附錄A 搭建開發環境

附錄B 使用DigitalOcean搭建生產環境的Kubernetes