Java持續交付
- ISBN13:9787121374425
- 出版社:電子工業出版社
- 作者:張若飛; (美)丹尼爾‧布萊恩特; (英)亞布拉罕‧馬林‧佩雷斯
- 裝訂/頁數:平裝/404頁
- 規格:26cm*19cm (高/寬)
- 出版日:2019/10/01
商品簡介
作者簡介
亞布拉罕·馬林-佩雷斯(Abraham Marin-Perez),是一名Java 和Scala 開發人員,在金融、出版和公共部門等行業擁有超過10 年的經驗。他還幫助管理倫敦Java 社區,並在Meet a Mentor London小組提供職業發展方面的建議。Abraham 喜歡與其他人分享他的經驗,因此經常會在JavaOne 或者Devoxx UK 等國際活動上發表演講,並在InfoQ 上發表Java 方面的新聞。他還是Real-World Maintainable Software (O'Reilly) 一書的作者。Abraham 目前居住在倫敦,喜歡在天氣好的時候外出徒步,或者天氣不好的時候在家烹飪。
張若飛,TGO會員,曾任易通貸CTO,宜人貸首席架構師,在雅虎北研、金山雲、POLYCOM等知名公司擔任架構師。十餘年互聯網研發及技術管理經驗,管理過超過百人的技術研發團隊,對搭建海量數據、大型分布式系統有豐富經驗,對互聯網金融領域有廣泛涉獵。著有十餘本技術譯著,包括《雲原生Java:Spring Boot、Spring Cloud與Cloud Foundry彈性系統設計》《面向可伸縮架構》《代碼不朽:編寫可維護軟件的十大則》《給大忙人看的JavaSE 8》《Grails**指南》等書,總計300余萬字。
目次
入門知識 .......................................................................................................................1
賦能開發者 :為什麼我們要持續交付 ..........................................................................2
快速反饋會減少上下文切換 .................................................................................2
自動化的、可重複的以及可靠的發佈...................................................................2
定義“完成”的概念 .............................................................................................3
什麼是構建管道 ............................................................................................................4
核心的構建管道階段 .............................................................................................4
容器技術的影響 ....................................................................................................7
對當前架構的影響 ................................................................................................8
總結 ..............................................................................................................................9
第 2 章 Java 開發的演化..............................................................10
現代 Java 應用程序的需求 .......................................................................................... 10
對業務增長速度和穩定性的要求 ........................................................................ 11
API 經濟的崛起 .................................................................................................. 11
雲計算的機會和成本 ........................................................................................... 12
模塊化歸來 :擁抱更小的服務 ............................................................................ 12
對持續交付的影響 .............................................................................................. 13
Java 部署平臺的演化 .................................................................................................. 13
WAR 和 EAR :應用服務器統治的年代 .............................................................. 13
可執行的胖 JAR 文件 :十二要素風格應用的出現 ............................................. 14
容器鏡像 :不斷增加的可移植性(以及複雜性) ................................................ 15
函數即服務 :“無服務器”架構的出現 ............................................................... 16
平臺對持續交付的影響 ....................................................................................... 17
DevOps、SRE 和發佈工程 ......................................................................................... 17
研發和運維.......................................................................................................... 18
站點可靠性工程 .................................................................................................. 19
發佈工程 ............................................................................................................. 21
共享責任、指標和可觀察性 ............................................................................... 22
總結 ............................................................................................................................ 22
第 3 章 設計持續交付的架構..........................................................24
優秀架構的基礎 .......................................................................................................... 24
松耦合 ................................................................................................................. 25
高內聚 ................................................................................................................. 25
耦合、內聚和持續交付 ....................................................................................... 26
面向業務敏捷的架構 .................................................................................................. 27
不好的架構會限制業務的發展 ............................................................................ 27
複雜性和變更成本 .............................................................................................. 28
API 驅動的應用程序的最佳實踐 ................................................................................ 29
“自上而下”構建 API ......................................................................................... 29
良好的 API 有助於持續測試和集成 .................................................................... 29
部署平臺和架構 .......................................................................................................... 30
設計符合“十二要素”的雲原生應用程序 ......................................................... 30
培養機械同理心 .................................................................................................. 33
面向失敗的設計和持續測試 ............................................................................... 33
越來越小的服務 .......................................................................................................... 34
交付單體應用程序的挑戰 ................................................................................... 34
微服務 :當 SOA 遇到領域驅動設計 .................................................................. 35
函數、lambda 表達式和納米服務(Nanoservices) ............................................. 36
架構 :“難以改變的東西” ........................................................................................... 37
總結 ............................................................................................................................ 38
第 4 章 Java 應用的部署平臺、基礎設施以及持續交付......................39
由平臺提供的功能性 .................................................................................................. 39
基本的開發流程 .......................................................................................................... 40
傳統的基礎設施平臺 .................................................................................................. 41
傳統的平臺組件 .................................................................................................. 41
傳統基礎設施平臺面臨的挑戰 ............................................................................ 41
傳統基礎設施的好處 ........................................................................................... 42
傳統基礎設施平臺上的 CI / CD .......................................................................... 42
雲平臺 ......................................................................................................................... 43
深入雲計算.......................................................................................................... 43
雲計算面臨的挑戰 .............................................................................................. 45
雲計算的好處 ...................................................................................................... 46
雲計算中的持續交付 ........................................................................................... 47
平臺即服務 ................................................................................................................. 47
簡單瞭解 PaaS 的原理 ......................................................................................... 48
PaaS 平臺面臨的挑戰.......................................................................................... 48
PaaS 的好處 ........................................................................................................ 50
CI/CD 和 PaaS ..................................................................................................... 50
容器(Docker) ........................................................................................................... 50
容器平臺組件 ...................................................................................................... 51
容器面臨的挑戰 .................................................................................................. 52
容器的好處.......................................................................................................... 53
持續交付容器 ...................................................................................................... 53
Kubernetes .................................................................................................................. 53
Kubernetes 的核心概念 ....................................................................................... 54
Kubernetes 面臨的挑戰 ....................................................................................... 54
Kubernetes 的好處 ............................................................................................... 55
Kubernetes 的持續交付 ....................................................................................... 56
函數即服務 / 無服務器函數 ........................................................................................ 56
FaaS 的概念 ........................................................................................................ 57
FaaS 面臨的挑戰 ................................................................................................. 57
FaaS 的好處 ........................................................................................................ 58
CI/CD 和 FaaS ..................................................................................................... 59
使用基礎設施即代碼 .................................................................................................. 59
總結 ............................................................................................................................ 60
第 5 章 構建 Java 應用程序..........................................................61
分解構建過程 ............................................................................................................. 61
自動化構建過程 .......................................................................................................... 62
構建依賴 ............................................................................................................. 63
外部依賴 ............................................................................................................. 66
多模塊項目.......................................................................................................... 67
使用多代碼庫還是單代碼庫 ............................................................................... 67
插件 ..................................................................................................................... 68
發佈和公開構件 .................................................................................................. 69
Java 構建工具概述 ...................................................................................................... 69
Ant ...................................................................................................................... 69
Maven .................................................................................................................. 72
Gradle .................................................................................................................. 77
Bazel、Pants 和 Buck .......................................................................................... 80
其他 JVM 構建工具 :SBT 和 Leiningen ............................................................. 82
Make ................................................................................................................... 82
如何選擇一個構建工具............................................................................................... 83
總結 ............................................................................................................................ 84
第 6 章 其他構建工具和技巧..........................................................86
Linux、Bash 和基本的 CLI 命令 ................................................................................ 86
用戶、權限和組 .................................................................................................. 86
使用文件系統 ...................................................................................................... 90
查看和編輯文本 .................................................................................................. 92
將所有東西連在一起 :重定向、管道和過濾器 .................................................. 93
搜索和操作文本 :grep、awk 和 sed ................................................................... 94
診斷工具 :top、ps、netstat 和 iostat .................................................................. 95
HTTP 調用和 JSON 操作 ............................................................................................ 96
curl ...................................................................................................................... 96
HTTPie .............................................................................................................. 100
jq ....................................................................................................................... 104
編寫基礎腳本 ........................................................................................................... 105
xargs .................................................................................................................. 105
管道和過濾器 .................................................................................................... 105
循環 ................................................................................................................... 106
條件 ................................................................................................................... 106
總結 .......................................................................................................................... 107
第 7 章 打包應用程序.................................................................108
構建一個 JAR 文件 :循序漸進 ................................................................................ 108
構建一個可執行的胖 JAR 文件 ................................................................................ 112
Maven Shade 插件 ............................................................................................. 113
構建 Spring Boot Uber JAR 文件 ...................................................................... 116
瘦 JAR 文件 ― 為什麼我們決定不使用胖 JAR ...................................................... 117
構建 WAR 文件 ......................................................................................................... 118
在雲平臺上打包 ........................................................................................................ 120
將部署比作烹飪 :烘焙式部署還是煎炸式部署 ................................................ 120
構建 RPM 和 DEB OS 包 .................................................................................. 121
其他構建 OS 包的工具(支持 Windows) ......................................................... 124
使用 Packer 創建可在多個雲平臺部署的機器鏡像 ........................................... 126
創建機器鏡像的其他工具 ................................................................................. 129
構建容器 ................................................................................................................... 129
創建 Docker 容器鏡像 ....................................................................................... 130
使用 fabric8 製作 Docker 鏡像 .......................................................................... 131
打包 FaaS Java 應用程序 .......................................................................................... 132
總結 .......................................................................................................................... 135
第 8 章 在本地環境中工作(就像在生產環境中一樣)........................136
本地開發面臨的挑戰 ................................................................................................ 136
mock、stub 和服務虛擬化 ........................................................................................ 137
模式 #1 :profile、mock 和 stub ........................................................................ 137
使用 Mockito 進行 mock ................................................................................... 138
模式 #2 :服務虛擬化和 API 仿真 .................................................................... 140
使用 Hoverfly 虛擬化服務 ................................................................................ 141
虛擬機 :Vagrant 和 Packer ....................................................................................... 145
安裝 Vagrant ...................................................................................................... 145
創建一個 Vagrantfile ......................................................................................... 145
模式 #3 :生產環境鏡像 .................................................................................... 148
容器 :Kubernetes、minikube 和 Telepresence ......................................................... 149
介紹 Docker Java Shop 示例程序 ...................................................................... 149
構建 Java 應用程序和容器鏡像 ........................................................................ 150
部署到 Kubernetes 平臺 .................................................................................... 152
簡單的冒煙測試 ................................................................................................ 155
構建剩餘的應用程序 ......................................................................................... 155
在 Kubernetes 上部署整個 Java 應用程序 ......................................................... 155
查看部署的應用程序 ......................................................................................... 156
Telepresence :在本地遠程工作 ........................................................................ 157
模式 #4 :環境租賃 ........................................................................................... 160
FaaS :AWS Lamba 和 SAM Local ........................................................................... 160
安裝 SAM Local ................................................................................................ 161
AWS Lambda 腳手架......................................................................................... 161
測試 AWS Lambda 事件處理 ............................................................................ 165
SAM Local 冒煙測試 ........................................................................................ 168
FaaS: Azure Functions 和 VS Code ........................................................................... 170
安裝 Azure Functions Core Tools ...................................................................... 170
在本地構建和測試函數 ..................................................................................... 173
使用 VS Code 進行本地和遠程測試 ................................................................. 176
總結 .......................................................................................................................... 177
第 9 章 持續集成 :創建構建管道的第一步.....................................178
為什麼要持續集成 .................................................................................................... 178
如何實施 CI .............................................................................................................. 179
中心化與分布式的版本控制系統 .............................................................................. 179
Git 入門..................................................................................................................... 180
核心的 Git CLI 命令 .......................................................................................... 181
Hub :一個 Git 和 GitHub 必備的工具 .............................................................. 183
有效地使用 DVCS .................................................................................................... 185
基於主幹的開發 ................................................................................................ 185
基於功能分支的開發 ......................................................................................... 186
Gitflow .............................................................................................................. 186
沒有萬全之策 :如何選擇分支策略 .................................................................. 187
代碼審查 ................................................................................................................... 189
我們要尋找什麼 ................................................................................................ 190
代碼審查自動化 :PMD、Checkstyle 和 FindBugs ........................................... 191
審查 pull request ................................................................................................ 196
自動化構建 ............................................................................................................... 197
Jenkins ............................................................................................................... 197
發動你的團隊 ........................................................................................................... 199
定期合併代碼 .................................................................................................... 199
“停下來”:管理失敗的構建 ............................................................................. 199
不要在測試上使用 @Ignore .............................................................................. 199
保持快速的構建過程 ......................................................................................... 200
平臺(基礎設施即代碼)的 CI ................................................................................ 200
總結 .......................................................................................................................... 201
第 10 章 通過管道進行部署和發佈................................................202
介紹 Extended Java Shop 應用程序 .......................................................................... 202
分離部署和發佈 ........................................................................................................ 204
部署應用程序 ........................................................................................................... 205
創建一個容器鏡像 ............................................................................................ 206
部署機制 ........................................................................................................... 209
一切都開始於(並且結束于)健康檢查 ........................................................... 218
部署策略 ........................................................................................................... 222
使用非託管的集群 ............................................................................................ 232
更改數據庫........................................................................................................ 236
發佈功能 ................................................................................................................... 240
功能開關 ........................................................................................................... 240
語義版本控制 .................................................................................................... 243
API 的向後兼容性和版本 .................................................................................. 244
多階段升級........................................................................................................ 249
管理配置和敏感信息 ................................................................................................ 250
“打包式”配置 .................................................................................................. 250
外部配置 ........................................................................................................... 251
處理敏感信息 .................................................................................................... 252
總結 .......................................................................................................................... 253
第 11 章 功能性測試 :正確和接受度.............................................254
為什麼要測試軟件 .................................................................................................... 254
測試什麼?敏捷測試象限介紹 ................................................................................. 254
持續測試 ................................................................................................................... 256
構建正確的反饋循環 ......................................................................................... 256
無盡的海龜 ............................................................................................................... 257
人為交易 ................................................................................................................... 258
端到端測試 ............................................................................................................... 259
驗收測試 ................................................................................................................... 261
行為驅動開發 .................................................................................................... 261
stub 或者虛擬化第三方服務.............................................................................. 265
將所有這些整合在一起 ..................................................................................... 265
消費者驅動的合約 .................................................................................................... 265
RESTful API 合約 ............................................................................................. 267
消息合約 ........................................................................................................... 269
組件測試 ................................................................................................................... 271
嵌入式數據存儲 ................................................................................................ 271
內存消息隊列 .................................................................................................... 272
測試替代 ........................................................................................................... 273
創建內部資源或接口 ......................................................................................... 274
進程內和進程外 ................................................................................................ 275
集成測試 ................................................................................................................... 277
驗證外部交互 .................................................................................................... 278
測試容錯性........................................................................................................ 278
單元測試 ................................................................................................................... 279
交互型單元測試 ................................................................................................ 280
獨立型單元測試 ................................................................................................ 281
處理不可預知的測試 ................................................................................................ 282
數據 ................................................................................................................... 282
還未準備好的資源 ............................................................................................ 283
不確定性事件 .................................................................................................... 283
如果你什麼都做不了 ......................................................................................... 284
自上而下的測試和自下而上的測試 .......................................................................... 284
自上而下的測試 ................................................................................................ 285
自下而上的測試 ................................................................................................ 286
將所有內容都融入構建管道 ..................................................................................... 287
多少測試才夠 ........................................................................................................... 288
總結 .......................................................................................................................... 289
第 12 章 系統質量屬性測試 :驗證非功能性需求. .............................291
為什麼要測試非功能性需求 ..................................................................................... 291
代碼質量 ................................................................................................................... 292
架構質量 ................................................................................................................... 292
ArchUnit :架構方面的單元測試 ...................................................................... 292
使用 JDepend 生成設計質量指標 ...................................................................... 295
性能和壓力測試 ........................................................................................................ 297
使用 Apache Benchmark 進行基本的性能測試 ................................................. 298
使用 Gatling 進行壓力測試 ............................................................................... 299
安全、漏洞和威脅 .................................................................................................... 305
代碼級別的安全驗證 ......................................................................................... 306
依賴項驗證........................................................................................................ 311
與部署平臺相關的安全問題 ............................................................................. 315
後續步驟 :威脅建模 ......................................................................................... 318
混亂測試 ................................................................................................................... 321
在生產環境中製造混亂(引入猴子) ................................................................ 322
在預發佈環境中造成混亂 ................................................................................. 324
需要多少非功能性測試才夠 ..................................................................................... 325
總結 .......................................................................................................................... 326
第 13 章 可觀察性 :監控、日誌和跟蹤..........................................327
可觀察性和持續交付 ................................................................................................ 327
為什麼要觀察應用程序 ..................................................................................... 327
我們希望監控 :應用程序、網絡和機器 ..............
主題書展
更多主題書展
更多書展本週66折
您曾經瀏覽過的商品
購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。