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