混沌工程:通過(guò)可控故障實(shí)驗(yàn)提升軟件系統(tǒng)可靠性
定 價(jià):129 元
- 作者:[波]米科拉吉·帕利科夫斯基(Mikolaj Pawlikowski) 著
- 出版時(shí)間:2023/2/1
- ISBN:9787111716624
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.5
- 頁(yè)碼:344
- 紙張:
- 版次:
- 開(kāi)本:16
混沌工程是一種有意的實(shí)驗(yàn)實(shí)踐,旨在發(fā)現(xiàn)系統(tǒng)性問(wèn)題。在本書(shū)中,我們將探討為什么、何時(shí)以及如何應(yīng)用混沌工程來(lái)改善你的計(jì)算機(jī)系統(tǒng)。你將學(xué)習(xí)通過(guò)一系列模擬真實(shí)故障的測(cè)試來(lái)運(yùn)行應(yīng)用程序和基礎(chǔ)設(shè)施。通過(guò)學(xué)習(xí)像混沌工程師一樣思考,以及學(xué)習(xí)設(shè)計(jì)適當(dāng)?shù)膶?shí)驗(yàn)來(lái)確保軟件的可靠性,你將掌握混沌工程的理論與技術(shù),并將其應(yīng)用于實(shí)際的系統(tǒng)中。
推薦序一
推薦序二
譯者序
序言一
序言二
前言
致謝
作者簡(jiǎn)介
第1章 進(jìn)入混沌工程的世界 1
1.1 什么是混沌工程 2
1.2 混沌工程的動(dòng)機(jī) 3
1.2.1 評(píng)估風(fēng)險(xiǎn)和成本,并設(shè)定SLI、SLO和SLA 3
1.2.2 在整體上測(cè)試系統(tǒng) 4
1.2.3 找到“涌現(xiàn)性”特性 5
1.3 混沌工程的四個(gè)步驟 5
1.3.1 確?捎^測(cè)性 7
1.3.2 定義穩(wěn)態(tài) 8
1.3.3 形成假設(shè) 9
1.3.4 運(yùn)行實(shí)驗(yàn)并證明(或反駁)
你的假設(shè) 9
1.4 什么不是混沌工程 10
1.5 初識(shí)混沌工程 11
1.5.1 FizzBuzz即服務(wù) 11
1.5.2 漫漫長(zhǎng)夜 11
1.5.3 后續(xù) 12
1.5.4 混沌工程簡(jiǎn)述 13
總結(jié) 13
第一部分 混沌工程基礎(chǔ)
第2章 來(lái)碗混沌與爆炸半徑 17
2.1 設(shè)置使用本書(shū)中的代碼 17
2.2 場(chǎng)景 18
2.3 Linux取證101 20
2.3.1 退出碼 20
2.3.2 終止進(jìn)程 21
2.3.3 內(nèi)存溢出殺手 23
2.4 第一個(gè)混沌實(shí)驗(yàn) 25
2.4.1 確?捎^測(cè)性 29
2.4.2 定義穩(wěn)態(tài) 29
2.4.3 形成假設(shè) 30
2.4.4 運(yùn)行實(shí)驗(yàn) 30
2.5 爆炸半徑 31
2.6 深入挖掘 33
2.6.1 拯救世界 35
總結(jié) 36
第3章 可觀測(cè)性 38
3.1 應(yīng)用程序運(yùn)行緩慢 39
3.2 USE方法 39
3.3 資源 41
3.3.1 系統(tǒng)概述 43
3.3.2 block I/O 44
3.3.3 網(wǎng)絡(luò) 48
3.3.4 RAM 52
3.3.5 CPU 59
3.3.6 操作系統(tǒng) 65
3.4 應(yīng)用程序 67
3.4.1 cProfile 68
3.4.2 BCC和Python 69
3.5 自動(dòng)化:使用時(shí)序數(shù)據(jù)庫(kù) 71
3.5.1 Prometheus和Grafana 71
3.6 延伸閱讀 74
總結(jié) 75
第4章 數(shù)據(jù)庫(kù)故障和生產(chǎn)環(huán)境中的
測(cè)試 76
4.1 我們?cè)谧鯳ordPress 76
4.2 弱點(diǎn) 78
4.2.1 實(shí)驗(yàn)1:磁盤慢了 79
4.2.2 實(shí)驗(yàn)2:網(wǎng)絡(luò)慢了 83
4.3 在生產(chǎn)環(huán)境中測(cè)試 88
總結(jié) 90
第二部分 混沌工程實(shí)戰(zhàn)
第5章 剖析Docker 93
5.1 我的(Docker化的)應(yīng)用程序
運(yùn)行緩慢 94
5.1.1 架構(gòu) 94
5.2 Docker簡(jiǎn)史 95
5.2.1 仿真、模擬和虛擬化 95
5.2.2 VM和容器 97
5.3 Linux容器和Docker 99
5.4 Docker原理 102
5.4.1 使用chroot變更進(jìn)程的
路徑 102
5.4.2 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的容器(-ish)
第1部分:使用chroot 105
5.4.3 實(shí)驗(yàn) 1:一個(gè)容器可以阻止
另一個(gè)容器寫(xiě)磁盤嗎 107
5.4.4 使用Linux命名空間隔離
進(jìn)程 111
5.4.5 Docker和命名空間 114
5.5 實(shí)驗(yàn)2:終止其他PID命名空間
中的進(jìn)程 116
5.5.1 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的容器(-ish)
第2部分:命名空間 118
5.5.2 使用cgroups限制進(jìn)程的資源
使用 120
5.6 實(shí)驗(yàn)3:使用你能找到的所有
CPU 126
5.7 實(shí)驗(yàn)4:使用過(guò)多內(nèi)存 128
5.7.1 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的容器(-ish)
第 3 部分:cgroups 130
5.8 Docker和網(wǎng)絡(luò) 133
5.8.1 capabilities和seccomp 137
5.9 Docker揭秘 140
5.10 修復(fù)我的(Docker化的)應(yīng)用
程序運(yùn)行緩慢的問(wèn)題 141
5.10.1 啟動(dòng)Meower 141
5.10.2 為什么應(yīng)用程序運(yùn)行緩慢 143
5.11 實(shí)驗(yàn)5:使用Pumba讓容器的
網(wǎng)絡(luò)變慢 143
5.11.1 Pumba:Docker混沌工程
工具 143
5.11.2 運(yùn)行混沌實(shí)驗(yàn) 144
5.12 其他主題 147
5.12.1 Docker daemon重啟 148
5.12.2 鏡像layer的存儲(chǔ) 148
5.12.3 高級(jí)網(wǎng)絡(luò) 148
5.12.4 安全 149
總結(jié) 149
第6章 你要調(diào)用誰(shuí)?系統(tǒng)調(diào)用
破壞者 150
6.1 場(chǎng)景:恭喜你升職了 150
6.1.1 System X:如果大家都在
用,但沒(méi)人維護(hù),是不是
廢棄軟件 151
6.2 簡(jiǎn)單回顧系統(tǒng)調(diào)用 153
6.2.1 了解系統(tǒng)調(diào)用 154
6.2.2 使用標(biāo)準(zhǔn)C庫(kù)和glibc 156
6.3 如何觀測(cè)進(jìn)程的系統(tǒng)調(diào)用 158
6.3.1 strace和sleep 158
6.3.2 strace和System X 161
6.3.3 strace的問(wèn)題:開(kāi)銷 162
6.3.4 BPF 163
6.3.5 其他選擇 166
6.4 為樂(lè)趣和收益阻塞系統(tǒng)調(diào)用
第1部分:strace 167
6.4.1 實(shí)驗(yàn)1:破壞close系統(tǒng)
調(diào)用 167
6.4.2 實(shí)驗(yàn)2:破壞write系統(tǒng)
調(diào)用 171
6.5 為樂(lè)趣和收益阻塞系統(tǒng)調(diào)用
第2部分:seccomp 173
6.5.1 seccomp 的簡(jiǎn)單方法:使用Docker 173
6.5.2 seccomp 的困難方法:使用libseccomp 175
總結(jié) 177
第7章 JVM故障注入 178
7.1 場(chǎng)景 178
7.1.1 FizzBuzzEnterpriseEdition
介紹 179
7.1.2 環(huán)顧FizzBuzzEnterprise-
Edition 179
7.2 混沌工程和Java 180
7.2.1 實(shí)驗(yàn)的思路 181
7.2.2 實(shí)驗(yàn)的計(jì)劃 182
7.2.3 JVM字節(jié)碼簡(jiǎn)介 183
7.2.4 實(shí)驗(yàn)的實(shí)現(xiàn) 190
7.3 已有的工具 196
7.3.1 Byteman 196
7.3.2 Byte-Monkey 198
7.3.3 Spring Boot的Chaos
Monkey 200
7.4 延伸閱讀 200
總結(jié) 201
第8章 應(yīng)用級(jí)故障注入 202
8.1 場(chǎng)景 202
8.1.1 實(shí)現(xiàn)細(xì)節(jié):混沌之前 204
8.2 實(shí)驗(yàn)1:Redis延遲 208
8.2.1 實(shí)驗(yàn)1的計(jì)劃 209
8.2.2 實(shí)驗(yàn)1的穩(wěn)態(tài) 209
8.2.3 實(shí)驗(yàn)1的實(shí)現(xiàn) 210
8.2.4 實(shí)驗(yàn)1的執(zhí)行 212
8.2.5 實(shí)驗(yàn)1的討論 213
8.3 實(shí)驗(yàn)2:失敗的請(qǐng)求 213
8.3.1 實(shí)驗(yàn)2的計(jì)劃 214
8.3.2 實(shí)驗(yàn)2的實(shí)現(xiàn) 214
8.3.3 實(shí)驗(yàn)2的執(zhí)行 215
8.4 應(yīng)用程序與基礎(chǔ)設(shè)施 216
總結(jié) 217
第9章 我的瀏覽器中有一只“猴子” 218
9.1 場(chǎng)景 218
9.1.1 Pgweb 219
9.1.2 Pgweb實(shí)現(xiàn)細(xì)節(jié) 220
9.2 實(shí)驗(yàn)1:增加延遲 222
9.2.1 實(shí)驗(yàn)1的計(jì)劃 223
9.2.2 實(shí)驗(yàn)1的穩(wěn)態(tài) 223
9.2.3 實(shí)驗(yàn)1的實(shí)現(xiàn) 224
9.2.4 實(shí)驗(yàn)1的執(zhí)行 226
9.3 實(shí)驗(yàn)2:添加故障 227
9.3.1 實(shí)驗(yàn)2的實(shí)現(xiàn) 227
9.3.2 實(shí)驗(yàn)2的執(zhí)行 229
9.4 其他好知道的話題 229
9.4.1 Fetch API 229
9.4.2 Throttling 230
9.4.3 工具:Greasemonkey和Tampermonkey 232
總結(jié) 232
第三部分 Kubernetes中的混沌工程
第10章 Kubernetes中的混沌 235
10.1 將東西移植到Kubernetes 236
10.1.1 High-Profile 項(xiàng)目文檔 237
10.1.2 Goldpinger是什么 237
10.2 Kubernetes是什么 238
10.2.1 Kubernetes簡(jiǎn)史 238
10.2.2 Kubernetes能為你做
什么 239
10.3 搭建Kubernetes集群 241
10.3.1 使用Minikube 241
10.3.2 啟動(dòng)一個(gè)集群 241
10.4 測(cè)試運(yùn)行在Kubernetes上的
軟件 243
10.4.1 運(yùn)行ICANT項(xiàng)目 243
10.4.2 實(shí)驗(yàn)1:終止50%的
Pod 251
10.4.3 派對(duì)技巧:時(shí)尚地終止
Pod 256
10.4.4 實(shí)驗(yàn)2:引入網(wǎng)絡(luò)緩慢 257
總結(jié) 267
第11章 自動(dòng)化Kubernetes實(shí)驗(yàn) 268
11.1 使用PowerfulSeal自動(dòng)化
混沌 268
11.1.1 PowerfulSeal是什么 269
11.1.2 安裝PowerfulSeal 270
11.1.3 實(shí)驗(yàn)1b:終止50%的
Pod 271
11.1.4 實(shí)驗(yàn)2b:引入網(wǎng)絡(luò)緩慢 273
11.2 持續(xù)測(cè)試和服務(wù)水準(zhǔn)目標(biāo) 276
11.2.1 實(shí)驗(yàn)3:驗(yàn)證Pod在創(chuàng)建后
幾秒內(nèi)是否準(zhǔn)備就緒 277
11.3 云層 282
11.3.1 云提供商API、可用區(qū) 282
11.3.2 實(shí)驗(yàn)4:關(guān)閉VM 284
總結(jié) 286
第12章 Kubernetes底層工作原理 287
12.1 Kubernetes集群剖析以及如何
破壞它 287
12.1.1 控制平面 288
12.1.2 Kubelet和pause容器 295
12.1.3 Kubernetes、Docker以及
容器運(yùn)行時(shí) 297
12.1.4 Kubernetes網(wǎng)絡(luò) 300
12.2 關(guān)鍵組件總結(jié) 304
總結(jié) 304
第13章 混沌工程與人 305
13.1 混沌工程思維 305
13.1.1 故障不是一種可能:它會(huì)
發(fā)生 306
13.1.2 早失敗與晚失敗 307
13.2 獲得支持 308
13.2.1 經(jīng)理 308
13.2.2 團(tuán)隊(duì)成員 309
13.2.3 游戲日 309
13.3 將團(tuán)隊(duì)當(dāng)成分布式系統(tǒng) 310
13.3.1 查找知識(shí)單點(diǎn)故障:
宅度假 312
13.3.2 團(tuán)隊(duì)內(nèi)部的錯(cuò)誤信息和
信任 313
13.3.3 團(tuán)隊(duì)中的瓶頸:慢車道上的
生活 313
13.3.4 測(cè)試你的流程:內(nèi)部
工作 314
總結(jié) 315
附錄
附錄A 安裝混沌工程工具 318
附錄B 突擊測(cè)驗(yàn)答案 325
附錄C 導(dǎo)演剪輯 333
附錄D 混沌工程食譜 337
后記 343