混沌工程:通过可控故障实验提升软件系统可靠性

混沌工程:通过可控故障实验提升软件系统可靠性
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [波兰]
2023-02
版次: 1
ISBN: 9787111716624
定价: 129.00
装帧: 其他
开本: 16开
纸张: 胶版纸
页数: 364页
字数: 490千字
2人买过
  • 混沌工程是一种有意的实验实践,旨在发现系统性问题。在本书中,我们将探讨为什么、何时以及如何应用混沌工程来改善你的计算机系统。你将学习通过一系列模拟真实故障的测试来运行应用程序和基础设施。通过学习像混沌工程师一样思考,以及学习设计适当的实验来确保软件的可靠性,你将掌握混沌工程的理论与技术,并将其应用于实际的系统中。 推荐序一

    推荐序二

    译者序

    序言一

    序言二

    前言

    致谢

    作者简介

    第1章 进入混沌工程的世界 1

    1.1 什么是混沌工程 2

    1.2 混沌工程的动机 3

    1.2.1 评估风险和成本,并设定SLI、SLO和SLA 3

    1.2.2 在整体上测试系统 4

    1.2.3 找到“涌现性”特性 5

    1.3 混沌工程的四个步骤 5

    1.3.1 确保可观测性 7

    1.3.2 定义稳态 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 后续 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 定义稳态 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 系统概述 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 操作系统 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章 数据库故障和生产环境中的

    测试 76

    4.1 我们在做WordPress 76

    4.2 弱点 78

    4.2.1 实验1:磁盘慢了 79

    4.2.2 实验2:网络慢了 83

    4.3 在生产环境中测试 88

    总结 90

    第二部分 混沌工程实战

    第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章 你要调用谁?系统调用

    破坏者 150

    6.1 场景:恭喜你升职了 150

    6.1.1 System X:如果大家都在

    用,但没人维护,是不是

    废弃软件 151

    6.2 简单回顾系统调用 153

    6.2.1 了解系统调用 154

    6.2.2 使用标准C库和glibc 156

    6.3 如何观测进程的系统调用 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 为乐趣和收益阻塞系统调用

    第1部分:strace 167

    6.4.1 实验1:破坏close系统

    调用 167

    6.4.2 实验2:破坏write系统

    调用 171

    6.5 为乐趣和收益阻塞系统调用

    第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 环顾FizzBuzzEnterprise-

    Edition 179

    7.2 混沌工程和Java 180

    7.2.1 实验的思路 181

    7.2.2 实验的计划 182

    7.2.3 JVM字节码简介 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 实现细节:混沌之前 204

    8.2 实验1:Redis延迟 208

    8.2.1 实验1的计划 209

    8.2.2 实验1的稳态 209

    8.2.3 实验1的实现 210

    8.2.4 实验1的执行 212

    8.2.5 实验1的讨论 213

    8.3 实验2:失败的请求 213

    8.3.1 实验2的计划 214

    8.3.2 实验2的实现 214

    8.3.3 实验2的执行 215

    8.4 应用程序与基础设施 216

    总结 217

    第9章 我的浏览器中有一只“猴子” 218

    9.1 场景 218

    9.1.1 Pgweb 219

    9.1.2 Pgweb实现细节 220

    9.2 实验1:增加延迟 222

    9.2.1 实验1的计划 223

    9.2.2 实验1的稳态 223

    9.2.3 实验1的实现 224

    9.2.4 实验1的执行 226

    9.3 实验2:添加故障 227

    9.3.1 实验2的实现 227

    9.3.2 实验2的执行 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 持续测试和服务水准目标 276

    11.2.1 实验3:验证Pod在创建后

    几秒内是否准备就绪 277

    11.3 云层 282

    11.3.1 云提供商API、可用区 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 故障不是一种可能:它会

    发生 306

    13.1.2 早失败与晚失败 307

    13.2 获得支持 308

    13.2.1 经理 308

    13.2.2 团队成员 309

    13.2.3 游戏日 309

    13.3 将团队当成分布式系统 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
  • 内容简介:
    混沌工程是一种有意的实验实践,旨在发现系统性问题。在本书中,我们将探讨为什么、何时以及如何应用混沌工程来改善你的计算机系统。你将学习通过一系列模拟真实故障的测试来运行应用程序和基础设施。通过学习像混沌工程师一样思考,以及学习设计适当的实验来确保软件的可靠性,你将掌握混沌工程的理论与技术,并将其应用于实际的系统中。
  • 目录:
    推荐序一

    推荐序二

    译者序

    序言一

    序言二

    前言

    致谢

    作者简介

    第1章 进入混沌工程的世界 1

    1.1 什么是混沌工程 2

    1.2 混沌工程的动机 3

    1.2.1 评估风险和成本,并设定SLI、SLO和SLA 3

    1.2.2 在整体上测试系统 4

    1.2.3 找到“涌现性”特性 5

    1.3 混沌工程的四个步骤 5

    1.3.1 确保可观测性 7

    1.3.2 定义稳态 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 后续 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 定义稳态 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 系统概述 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 操作系统 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章 数据库故障和生产环境中的

    测试 76

    4.1 我们在做WordPress 76

    4.2 弱点 78

    4.2.1 实验1:磁盘慢了 79

    4.2.2 实验2:网络慢了 83

    4.3 在生产环境中测试 88

    总结 90

    第二部分 混沌工程实战

    第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章 你要调用谁?系统调用

    破坏者 150

    6.1 场景:恭喜你升职了 150

    6.1.1 System X:如果大家都在

    用,但没人维护,是不是

    废弃软件 151

    6.2 简单回顾系统调用 153

    6.2.1 了解系统调用 154

    6.2.2 使用标准C库和glibc 156

    6.3 如何观测进程的系统调用 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 为乐趣和收益阻塞系统调用

    第1部分:strace 167

    6.4.1 实验1:破坏close系统

    调用 167

    6.4.2 实验2:破坏write系统

    调用 171

    6.5 为乐趣和收益阻塞系统调用

    第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 环顾FizzBuzzEnterprise-

    Edition 179

    7.2 混沌工程和Java 180

    7.2.1 实验的思路 181

    7.2.2 实验的计划 182

    7.2.3 JVM字节码简介 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 实现细节:混沌之前 204

    8.2 实验1:Redis延迟 208

    8.2.1 实验1的计划 209

    8.2.2 实验1的稳态 209

    8.2.3 实验1的实现 210

    8.2.4 实验1的执行 212

    8.2.5 实验1的讨论 213

    8.3 实验2:失败的请求 213

    8.3.1 实验2的计划 214

    8.3.2 实验2的实现 214

    8.3.3 实验2的执行 215

    8.4 应用程序与基础设施 216

    总结 217

    第9章 我的浏览器中有一只“猴子” 218

    9.1 场景 218

    9.1.1 Pgweb 219

    9.1.2 Pgweb实现细节 220

    9.2 实验1:增加延迟 222

    9.2.1 实验1的计划 223

    9.2.2 实验1的稳态 223

    9.2.3 实验1的实现 224

    9.2.4 实验1的执行 226

    9.3 实验2:添加故障 227

    9.3.1 实验2的实现 227

    9.3.2 实验2的执行 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 持续测试和服务水准目标 276

    11.2.1 实验3:验证Pod在创建后

    几秒内是否准备就绪 277

    11.3 云层 282

    11.3.1 云提供商API、可用区 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 故障不是一种可能:它会

    发生 306

    13.1.2 早失败与晚失败 307

    13.2 获得支持 308

    13.2.1 经理 308

    13.2.2 团队成员 309

    13.2.3 游戏日 309

    13.3 将团队当成分布式系统 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
查看详情
相关图书 / 更多
混沌工程:通过可控故障实验提升软件系统可靠性
混沌
戴维·温伯格
混沌工程:通过可控故障实验提升软件系统可靠性
混沌系统控制及其在信息安全中的应用
牛玉军、周东生、张强 著
混沌工程:通过可控故障实验提升软件系统可靠性
混沌与小波变换在混沌分组密码中的应用研究
杨华千;韦鹏程;石熙;成平广
混沌工程:通过可控故障实验提升软件系统可靠性
混沌时间序列特征分析及其应用
任伟杰
混沌工程:通过可控故障实验提升软件系统可靠性
混沌映射:动力学、分形学和快速涨落(英文)
陈功
混沌工程:通过可控故障实验提升软件系统可靠性
混沌中的机遇
朱伟勇 朱海松 著
混沌工程:通过可控故障实验提升软件系统可靠性
混沌密码分析学原理与实践
李澄清
混沌工程:通过可控故障实验提升软件系统可靠性
混沌初开
骆宾基
混沌工程:通过可控故障实验提升软件系统可靠性
混沌之石/谁让诸神出山系列
[英]玛斯·埃文斯 著;曾诚、赵鹏 译
混沌工程:通过可控故障实验提升软件系统可靠性
混沌日报1
力潮文创 出品;特雷西胡
混沌工程:通过可控故障实验提升软件系统可靠性
混沌理论及其在水声信号处理中的应用
李亚安;陈哲;李惟嘉
混沌工程:通过可控故障实验提升软件系统可靠性
混沌信号应用——雷达、传感与保密通信
王云才
您可能感兴趣 / 更多
混沌工程:通过可控故障实验提升软件系统可靠性
等我再长大一点
[波兰]玛丽亚·德克
混沌工程:通过可控故障实验提升软件系统可靠性
等我长大了+等我再长大一点 两册套装
[波兰]玛丽亚·德克
混沌工程:通过可控故障实验提升软件系统可靠性
外教社非通用语系列教材:波兰语听力教程(A1-A2)
[波兰]玛塔·乌娃妮斯卡;[波兰]亚历山德拉·巴耶斯卡
混沌工程:通过可控故障实验提升软件系统可靠性
用非暴力沟通照护阿尔茨海默病患者(将非暴力沟通应用于护理领域,获美国2021年度本杰明?富兰克林自助类图书金奖)
[波兰]帕蒂·比拉克·史密斯
混沌工程:通过可控故障实验提升软件系统可靠性
深度生成模型(全彩)
[波兰]Jakub M. Tomczak(杰克布M.汤姆扎克
混沌工程:通过可控故障实验提升软件系统可靠性
赛博朋克 2077:夜城迷梦 雨果奖作品 【波】巴尔托什·斯泽波尔 【意】 阿莱西奥·菲奥里内罗 【葡】 菲利佩·安德拉德 科幻世界出品
[波兰]巴尔托什·斯泽波尔 (意) 阿莱西奥·菲奥里内罗 (葡) 菲利佩·安德拉德
混沌工程:通过可控故障实验提升软件系统可靠性
建筑的奇迹(标记世界文明史的102座建筑,玛格达莱娜·耶伦斯卡,名胜古迹,现代建筑,普利兹克奖)
[波兰]玛格达莱娜·耶伦斯卡 著;[波兰]马乌戈热塔·诺瓦克 绘;[波兰]阿加塔·杜德克
混沌工程:通过可控故障实验提升软件系统可靠性
生命的历程:人类诞生之前的地球进化史[精装大本] 中国地质科学院 严加永教授 专业审定
[波兰]卡塔日娜·巴耶罗维奇
混沌工程:通过可控故障实验提升软件系统可靠性
中国植物志(徐家汇藏书楼珍稀文献选刊)
[波兰]卜弥格 著;徐锦华 主编
混沌工程:通过可控故障实验提升软件系统可靠性
我们之间挺好的:波兰新剧选
[波兰]阿尔图尔·杜达 著
混沌工程:通过可控故障实验提升软件系统可靠性
角落大发现
[波兰]巴特克·布罗兹 绘著
混沌工程:通过可控故障实验提升软件系统可靠性
我们不一样
[波兰]玛蒂娜·布尔格