內容簡介
運用新的“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
作者簡介
John Clingan 是紅帽高級產品主管,研究方向是企業級Java標準和Quarkus。 Ken Finnigan 是Workday高級軟體工程師主管,此前在紅帽的Quarkus團隊工作。 |