Kubernetes 原生微服務開發 Kubernetes Native Microservices with Quarkus and Microprofile

[美] 約翰·克林甘(John Clingan)、肯·芬尼根(Ken Finnigan)著 陳計節 張聖奇 譯

  • Kubernetes 原生微服務開發-preview-1
  • Kubernetes 原生微服務開發-preview-2
  • Kubernetes 原生微服務開發-preview-3
Kubernetes 原生微服務開發-preview-1

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

商品描述

運用新的“Kubernetes優先”工具高效地開發微服務!Quarkus與容器和Kubernetes的結合渾然天成,從根本上簡化了微服務的開發與部署。Quarkus這個功能強大的框架從一開始就是基於Java構建的,因而能與現有的JVM代碼庫無縫集成,極大地縮短了啟動時間,減少了內存消耗量。 在《Kubernetes原生微服務開發》的指導下,你將使用容器、Kubernetes和Quarkus框架開發微服務。將首先開發基於Quarkus和MicroProfile API的可部署應用;此後,將瞭解如何借助Quarkus天然的啟動速度和運行速度優勢,通過運用GraalVM原生編譯,來獲得性能躍升。在學習過程中,你將體驗到如何在Quarkus應用中集成Spring開發,並吸收作者關於微服務監控和管理的真知灼見。 主要內容 ? 在Kubernetes上部署企業級Java應用 ? 運用Quarkus運行時框架開發應用 ? 運用GraalVM原生編譯獲得**性能 ? 充分運用MicroProfile規範

目錄大綱

第Ⅰ部分 基礎知識

第1 章 Quarkus、MicroProfile 和

Kubernetes 簡介............................ 3

1.1 什麽是微服務...................................3

1.1.1 微服務的興起...............................6

1.1.2 微服務架構...................................6

1.1.3 微服務規範的需求........................7

1.2 MicroProfile 規範............................7

1.2.1 MicroProfile 的發展歷程................8

1.2.2 MicroProfile 社區核心原則...........9

1.3 Quarkus............................................. 10

1.3.1 快樂開發.................................... 10

1.3.2 對MicroProfile 的支持............... 11

1.3.3 運行時效率................................ 11

1.4 Kubernetes....................................... 12

1.5 Kubernetes 原生微服務.............. 15

1.6 本章小結.......................................... 16

第2 章 初次開發Quarkus 應用............19

2.1 創建項目.......................................... 19

2.2 使用實時編碼進行開發............ 24

2.3 編寫測試.......................................... 32

2.4 生成原生可執行程序................. 37

2.5 在Kubernetes 上運行應用....... 40

2.5.1 生成 Kubernetes YAML ............. 40

2.5.2 應用打包.................................... 43

2.5.3 應用部署與運行......................... 43

2.6 本章小結.......................................... 45

第Ⅱ部分 微服務開發

第3 章 微服務配置.....................................49

3.1 MicroProfile Config架構概述......................................... 50

3.2 訪問配置......................................... 50

3.3 銀行服務......................................... 51

3.3.1 創建銀行服務............................ 51

3.3.2 配置銀行服務的名稱字段.......... 53

3.4 配置源.............................................. 54

3.5 配置mobileBanking 字段......... 57

3.6 使用@ConfigProperties 對配置屬性分組............................... 57

3.7 Quarkus 特有的配置功能......... 59

3.7.1 Quarkus 配置編組...................... 59

3.7.2 配置屬性表達式........................ 60

3.7.3 Quarkus ConfigMapping 功能..... 61

3.7.4 運行期和構建期配置屬性.......... 62

3.8 Kubernetes 上的配置.................. 63

3.8.1 Kubernetes 上的常見配置源....... 63

3.8.2 在Quarkus 應用中使用ConfigMap................................. 65

3.8.3 編輯ConfigMap......................... 66

3.8.4 Kubernetes Secret........................ 67

3.9 本章小結......................................... 69

第4 章 使用Panache 訪問數據...........71

4.1 數據源.............................................. 71

4.2 JPA..................................................... 73

4.3 簡化數據庫開發........................... 78

X Kubernetes 原生微服務開發

4.3.1 活動記錄.................................... 78

4.3.2 數據倉儲.................................... 81

4.3.3 數據訪問模式選型..................... 83

4.4 部署到Kubernetes....................... 84

4.4.1 部署PostgreSQL 數據庫............ 84

4.4.2 打包與部署................................ 85

4.5 本章小結.......................................... 86

第5 章 微服務客戶端.................................87

5.1 MicroProfile REST Client規範................................................... 88

5.2 定義服務接口................................ 89

5.2.1 CDI REST 客戶端..................... 90

5.2.2 以編程方式使用REST客戶端....................................... 95

5.2.3 選用CDI 還是編程式API.......... 96

5.2.4 異步響應類型............................ 96

5.3 定製REST 客戶端...................... 98

5.3.1 客戶端請求頭............................ 98

5.3.2 聲明提供程序..........................101

5.4 本章小結........................................106

第6 章 應用的健康管理.........................107

6.1 開發者在應用健康管理領域日益重要的地位...............107

6.2 MicroProfile Health 規範.........108

6.2.1 存活狀態與就緒狀態................109

6.2.2 確定存活狀態與就緒狀態........109

6.3 開始學習MicroProfile Health..............................................110

6.3.1 賬戶服務中的MicroProfile

Health 存活狀態......................112

6.3.2 為賬戶服務創建存活健康檢查.........................................113

6.3.3 賬戶服務的MicroProfile Health

就緒狀態..................................114

6.3.4 禁用第三方就緒健康檢查........115

6.3.5 創建新的就緒健康檢查............115

6.3.6 Quarkus 健康分組....................118

6.3.7 使用Quarkus 健康狀態界面..... 119

6.4 Kubernetes 存活和就緒探針.................................................120

6.4.1 定製健康檢查屬性...................121

6.4.2 部署到Kubernetes....................122

6.4.3 測試Kubernetes 中的就緒健康檢查.................................124

6.5 本章小結.......................................126

第7 章 應用韌性策略............................. 127

7.1 韌性策略簡介..............................127

7.2 用@Asynchronous 啟用單獨的線程執行方法...............128

7.3 用艙壁模式限制並發...............128

7.4 在交易服務中使用艙壁..........130

7.5 以降級處理的方式處理異常.................................................131

7.6 為調用指定超時.........................132

7.7 用@Retry 從臨時故障中恢復.................................................135

7.8 用熔斷器避免持續故障..........136

7.8.1 MicroProfile Fault Tolerance規範中的@CircuitBreaker ........136

7.8.2 熔斷器的工作原理...................137

7.8.3 更新交易服務,運用@CircuitBreaker.......................138

7.8.4 測試熔斷器..............................140

7.9 用配置屬性覆蓋註解參數.....142

7.10 部署到Kubernetes...................144

7.11 本章小結.....................................145

第8 章 命令式世界的反應式編程..... 147

8.1 反應式編程的示例....................147

8.2 反應式流.......................................149

8.2.1 發布者、訂閱者和處理者........149

8.2.2 回壓的重要性..........................150

8.3 Quarkus 中的反應式消息.......152

8.3.1 借用生成器結合使用命令式與反應式編程..............................152

8.3.2 關於阻塞..................................155

8.3.3 以內存模式測試.......................157

8.4 原理分析........................................160

8.4.1 MicroProfile 反應式消息規範.........................................160

8.4.2 消息內容和元數據...................161

8.4.3 消息流中的消息.......................164

8.5 部署到Kubernetes.....................164

8.5.1 Minikube 中的Apache Kafka .....165

8.5.2 匯總所有步驟..........................167

8.6 本章小結........................................169

第9 章 在Quarkus 中開發Spring微服務.............................................171

9.1 Quarkus 與Spring API兼容性簡介...................................171

9.2 Spring 依賴註入和配置的兼容性............................................172

9.2.1 搭建Spring Cloud 配置服務器.....................................173

9.2.2 將Spring 配置服務器用作配置源.....................................174

9.2.3 將銀行服務轉換為使用Spring Configuration API...........175

9.3 Quarkus 與Spring Web API的兼容性.......................................176

9.4 Quarkus 與Spring Data JPA的兼容性.......................................179

9.5 部署到Kubernetes.....................183

9.6 Spring API 兼容性在Quarkus中的實現原理..............................184

9.7 常見的Quarkus/Spring 兼容性相關的問題...................................184

9.8 對比Spring Boot 與Quarkus的啟動過程...................................185

9.9 本章小結........................................186

第Ⅲ部分 可觀測性、API 定義和微服務安全

第10 章 記錄指標.................................... 189

10.1 指標在微服務架構中的角色..........................................189

10.2 瞭解MicroProfile Metrics規範..............................................190

10.2.1 利用Prometheus 和Grafana繪制指標圖線......................191

10.2.2 MicroProfile Metrics 規範.....197

10.2.3 為賬戶服務添加埋點...........201

10.2.4 為交易服務添加埋點...........202

10.2.5 創建業務指標......................209

10.2.6 MicroProfile Metrics 與MicroProfile Fault Tolerance、JAX-RS 的集成................... 211

10.2.7 Micrometer 指標..................213

10.2.8 模擬繁忙的生產系統...........215

10.3 本章小結.....................................216

第11 章 微服務跟蹤................................ 217

11.1 跟蹤的工作原理......................218

11.2 Jaeger............................................219

11.2.1 跟蹤採樣.............................219

11.2.2 配置 Minikube 環境...........220

11.2.3 安裝Jaeger ..........................220

11.2.4 使用Jaeger 跟蹤微服務.......222

11.3 跟蹤的規範................................226

11.3.1 OpenTracing.........................226

11.3.2 MicroProfile OpenTracing .....227

11.3.3 OpenTelemetry.....................227

11.4 在應用中定製跟蹤..................228

11.4.1 使用@Traced.......................228

11.4.2 註入跟蹤器.........................228

11.4.3 跟蹤數據庫調用..................230

11.4.4 跟蹤Kafka 消息..................232

11.5 本章小結.....................................238

XII Kubernetes 原生微服務開發

第12 章 API 可視化................................239

12.1 在Swagger UI 中查看OpenAPI 文檔...........................240

12.1.1 啟用OpenAPI......................240

12.1.2 Swagger UI ..........................242

12.2 MicroProfile OpenAPI............244

12.2.1 應用信息.............................244

12.2.2 定製輸出內容的結構...........246

12.2.3 定義操作.............................247

12.2.4 操作的響應..........................248

12.2.5 為操作添加標簽..................251

12.2.6 過濾 OpenAPI 的內容.........252

12.3 設計先行開發...........................253

12.3.1 從文件加載OpenAPI...........253

12.3.2 混用文件與註解..................254

12.4 代碼先行還是OpenAPI先行...............................................255

12.5 本章小結.....................................255

第13 章 微服務安全................................257

13.1 認證和授權簡介.......................257

13.2 使用基於文件的認證與授權..........................................259

13.3 基於OpenID Connect 的認證與授權................................263

13.3.1 OpenID Connect(OIDC)

簡介....................................264

13.3.2 OIDC 與Keycloak...............264

13.3.3 使用OpenID Connect 訪問受保護的資源.........................266

13.3.4 測試授權碼流程..................268

13.4 JSON Web 令牌和

MicroProfile JWT.....................271

13.4.1 JWT 令牌的頭部.................272

13.4.2 JWT 令牌的正文.................272

13.4.3 JWT 簽名............................274

13.5 使用MicroProfile JWT 為交易服務添加安全保護........276

13.6 傳遞JWT....................................278

13.6.1 為賬戶服務API 端點添加安全保護.............................278

13.6.2 由交易服務向賬戶服務傳遞JWT 令牌............................279

13.7 在Kubernetes 上運行服務....280

13.8 本章小結.....................................281