隨著云服務、虛擬機、微服務的發(fā)展和普及,現(xiàn)在的軟件開發(fā)任務對程序員的要求越來越高,除了會寫代碼,懂業(yè)務規(guī)則,程序員還必須清楚自己的代碼是如何部署到云端或虛擬機上的,以及如何借助微服務縮短發(fā)布周期,提高部署效率。換句話說,現(xiàn)在的程序員必須掌握一定的DevOps知識。本書是全面系統(tǒng)地講解了現(xiàn)代軟件開發(fā)涉及的部署與運維基礎知識(包括虛擬化、云、容器、平臺安全、微服務、系統(tǒng)配置、布署流水線、災難恢復等)、流程、常用工具,幫助讀者快速勝任軟件開發(fā)工作。
系統(tǒng)講解DevOps涉及的各方面基礎知識的圖書。獲獎圖書《軟件構架實踐》作者林·巴斯的*新作品。
近年來,IT行業(yè)的發(fā)展極大地擴展了軟件工程師的職責范圍,也對從業(yè)人員提出了更高的技能要求。目前廣泛應用的云計算就是發(fā)展趨勢之一。軟件工程師除了要熟悉硬件和操作系統(tǒng)的虛擬化、理解網絡是如何工作的外,還要處理可擴展性和負載均衡的問題。 云計算極大地縮短了軟件的發(fā)布周期。每個季度發(fā)布一次已經滿足不了業(yè)務的需求,按月、按周、按天,甚至按小時發(fā)布已越來越普遍。越來越短的發(fā)布周期是由多種技術支撐的,包括微服務、流水線、容器的使用等。當然,云計算也依賴架構設計和對工具的合理使用。 如今的軟件工程師不僅要負責系統(tǒng)的創(chuàng)建、部署和運行,他們還要理解云架構下的運維概念,包括業(yè)務連續(xù)性和故障處理。他們必須懂得處理日志、監(jiān)控、警報等問題。 軟件工程師通常在工作中學習這些新知識。他們需要閱讀海量的博客、教程、文檔,耗費大量的精力。有些企業(yè)會為新員工提供這方面的培訓,但是培訓內容往往是企業(yè)自己使用的工具和流程,這些工具和流程大多不具有通用性。 本書的目標讀者是軟件工程師(以及潛在的軟件工程師)、計算機科學專業(yè)和軟件工程專業(yè)的本科生及研究生,內容覆蓋上述現(xiàn)代軟件工程師的工作職責和技能。 本書也適合相關教師使用。全書各章都會講解理論知識并提供配套的實踐練習,同時還設置了議題供課堂分組討論,以便學生更好地理解章節(jié)內容。本書模塊化的編排方式也適合讀者挑選自己感興趣的章節(jié)閱讀。 本書的編寫目的是為現(xiàn)代軟件工程師提供編程語言和三層體系架構之外的工作技能。全書覆蓋六大主題:云和虛擬化、分布式系統(tǒng)和網絡、微服務架構、部署、安全、運維(包含業(yè)務連續(xù)性和監(jiān)控)。讀者讀完本書后不一定能成為這些領域的專家,但是至少能對這些領域有足夠的理解,足以為日后的高效工作打下基礎。
林·巴斯,澳大利亞國家信息通信技術研究院(NICTA)的高級主任研究員。在此之前,他在卡內基·梅隆大學軟件工程研究所(SEI)工作了二十五年。著有獲獎圖書《軟件構架實踐》。
譯序 III
前言 VII
部分 概述 1
第1章 虛擬化 4
1.1共享與隔離 5
1.2 虛擬機 9
1.3 虛擬機鏡像 13
1.4 容器 15
1.5 總結 18
1.6 練習 18
1.7 討論 19
第2章 網絡 20
2.1 簡介 20
2.2 IP地址 23
2.2.1 分配IP地址 24
2.2.2 消息傳遞 27
2.2.3 互聯(lián)網協(xié)議 28
2.3 DNS 32
2.3.1 主機名結構 33
2.3.2 存活時間 34
2.3.3 使用DNS來處理過載和故障問題 35
2.4 端口 36
2.5 TCP 38
2.6 IP子網 40
2.6.1 搭建結構化網絡 41
2.6.2 隧道 44
2.7 虛擬機和容器網絡 45
2.8 總結 48
2.9 練習 49
2.10 討論 49
第3章 云 51
3.1 結構 52
3.2 云故障 58
3.3 擴展服務容量及可用性 60
3.3.1 負載均衡器是如何工作的 61
3.3.2 檢測和管理服務實例故障 63
3.3.3 狀態(tài)管理 66
3.4 分布式協(xié)同 70
3.4.1 分布式系統(tǒng)中的時間協(xié)同 70
3.4.2 通過網絡實現(xiàn)時間同步 71
3.4.3 數(shù)據(jù) 72
3.5 彈性伸縮 76
3.6 總結 80
3.7 練習 81
3.8 討論 81
第4章 容器管理 83
4.1 容器和虛擬機 84
4.2 容器的可移植性 86
4.3 容器鏡像倉庫 86
4.4 容器集群 87
4.4.1 集群編排 90
4.4.2 容器伸縮 91
4.5 無服務器架構 92
4.6 容器技術的發(fā)展 94
4.7 總結 95
4.8 練習 96
4.9 討論 96
第5章 基礎設施的安全性 97
5.1 安全工作的分類 98
5.2 防護:密碼學 99
5.3 防護:密鑰交換 103
5.4 防護:認證 105
5.5 防護:公鑰基礎設施和證書 108
5.6 防護:傳輸層安全性 109
5.7 防護:安全的Shell 112
5.8 防護:安全文件傳輸 114
5.9 檢測:入侵檢測 115
5.10 總結 117
5.11 練習 117
5.12 討論 118
第二部分介紹 119
第6章 微服務 122
6.1 微服務架構的定義 124
6.2 微服務和團隊 126
6.3 微服務質量 127
6.3.1 可用性 128
6.3.2 版本兼容性 130
6.3.3 可維護性 132
6.3.4 性能 133
6.3.5 可重用性 135
6.3.6 可伸縮性 137
6.3.7 安全性 138
6.4 服務等級目標 140
6.5 微服務環(huán)境 141
6.5.1 微服務發(fā)現(xiàn) 142
6.5.2 在分布式系統(tǒng)中發(fā)出請求 143
6.5.3 結構化請求和響應數(shù)據(jù) 147
6.5.4 服務網格 150
6.5.5 微服務和容器 153
6.5.6 為部署而設計 154
6.5.7 預防故障 155
6.6 總結 156
6.7 練習 157
6.8 討論 158
第7章 管理系統(tǒng)配置 158
7.1 版本控制 160
7.2 配置管理工具 163
7.3 配置參數(shù) 167
7.4 管理機密 169
7.5 總結 171
7.6 練習 172
7.7 討論 172
第8章 部署流水線 172
8.1 部署流水線概覽 174
8.2 環(huán)境 176
8.2.1 環(huán)境的要求 177
8.2.2 環(huán)境的生命周期 180
8.2.3 環(huán)境生命周期管理的權衡 182
8.2.4 不同類型的部署流水線和環(huán)境 183
8.3 開發(fā)環(huán)境 184
8.3.1 構建 184
8.3.2 測試 185
8.3.3 制品 186
8.3.4 發(fā)布 186
8.3.5 銷毀 186
8.4 集成環(huán)境 187
8.4.1 構建 188
8.4.2 測試 188
8.4.3 制品 189
8.4.4 發(fā)布 190
8.4.5 銷毀 190
8.5 預發(fā)環(huán)境 190
8.5.1 構建 191
8.5.2 測試 191
8.5.3 部署到生產環(huán)境 195
8.5.4 銷毀 196
8.6 部署策略 196
8.6.1 全量部署策略 198
8.6.2 灰度發(fā)布 204
8.6.3 回滾 205
8.7 總結 206
8.8 練習 207
8.9 討論 208
第9章 發(fā)布以后 209
9.1 誰開發(fā),誰運維 210
9.2 日志 211
指標 216
9.3 隔離/定位問題 219
9.4 生產環(huán)境測試 220
9.5 給安全漏洞打補丁 222
9.6 總結 223
9.7 練習 224
9.8 討論 224
第10章 災難恢復 225
10.1 災難恢復計劃 226
10.1.1 RPO和RTO 227
10.1.2 應用優(yōu)先級 228
10.1.3 數(shù)據(jù)中心 229
10.2 2~4級應用程序的數(shù)據(jù)管理策略 233
10.3 1級應用程序數(shù)據(jù)管理 235
10.4 大數(shù)據(jù) 237
10.5 備份數(shù)據(jù)中心的軟件 237
10.5.1 2~4級應用程序 238
10.5.2 1級應用程序 239
10.5.3 其他數(shù)據(jù)和軟件 239
10.6 故障轉移 240
10.6.1 手動故障轉移 240
10.6.2 自動化故障轉移 241
10.6.3 測試故障轉移過程 242
10.7 總結 243
10.8 練習 244
10.9 討論 244
第11章 安全開發(fā) 245
11.1 識別并保護重要數(shù)據(jù)和資源 246
11.2 管理訪問服務的憑據(jù) 250
11.3 管理個人憑據(jù) 254
11.4 軟件供應鏈和軟件保障 256
11.5 缺陷和漏洞 258
11.6 安全漏洞的發(fā)現(xiàn)和打補丁修復 261
11.7 總結 263
11.8 練習 264
11.9 討論 264
第12章 寫在后 265
12.1 部署和運維的重要性 265
12.2 衡量DevOps的有效性 267
12.3 站點可靠性工程 269
12.4 移動和IoT設備 271
12.5 顛覆性技術 272