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