新华书店直发 全新正版 急速发货 开票联系客服
¥ 102.56 8.0折 ¥ 129 全新
库存15件
作者[波]米科拉吉·帕利科夫斯基 著
出版社机械工业出版社
ISBN9787111716624
出版时间2023-02
装帧平装
开本16开
定价129元
货号29514481
上书时间2024-10-20
人们经常问我是怎么开始从事混沌工程的。我倾向于告诉他们:因为它有助于改善睡眠。混沌工程不但是“素食主义”友好的,而且在这方面非常有效。下面我来解释一下。
回到2016年,机缘巧合之下,我幸运地参与了一个基于Kubernetes的前沿项目。现在没有人会因为选择Kubernetes而被解雇,但是在那时候风险却很大。Kubernetes v1.2包含了许多不稳定的组件,并且漏洞修复的发布速度超过了安装速度。
为了使其发挥作用,我的团队需要拥有真正的Kubernetes运维经验,并且需要在短期内完成。我们需要知道它是如何工作的、为什么出问题、如何修复它,以及如何在发生这种情况时得到警告。我们认为,做到这一点的方法是先破坏它。
后来,我才知道这种实践称为混沌工程,这样听起来更酷。事实证明,这种实践在减少宕机次数方面非常有效。而且,与昂贵的竹炭记忆海绵枕相比,它对提高我的睡眠质量更有帮助。在这几年里,混沌工程是我的主要兴趣之一。我并不孤单,它正迅速成为全球工程师的宝贵工具。
如今,混沌工程面临着一些严重的问题。特别是充斥了一些奇谈怪论(在生产中随机破坏事物),而且缺乏指导人们如何把它做好的高质量内容以及需要采用的初违反直觉的思维(失败会发生,所以我们需要做好准备)。
我编写本书来解决这些问题。我想找到一种合理的、基于科学的方法论,从而使混沌工程适用于任何系统、软件或其他方面。我想证明你不必大费周章才能从中受益,只需少量投资即可为你带来很多价值。
如果你是一名对新领域抱有好奇心的软件工程师或者开发者,并且致力于构建更可靠的系统(无论系统规模是大还是小),那么这本书正是为你而设计的。从Linux内核一直到应用程序或浏览器级别,本书都为你提供了正确的工具。
我为本书投入了很多心血,希望你能从中获得价值,并且收获快乐。如果你想了解更多信息,可以访问https://chaosengineering.news。如果你喜欢(或讨厌)这本书,我也希望你可以反馈给我!
混沌工程是一种有意的实验实践,旨在发现系统性问题。在本书中,我们将探讨为什么、何时以及如何应用混沌工程来改善你的计算机系统。你将学习通过一系列模拟真实故障的测试来运行应用程序和基础设施。通过学习像混沌工程师一样思考,以及学习设计适当的实验来确保软件的可靠性,你将掌握混沌工程的理论与技术,并将其应用于实际的系统中。
推荐序一
推荐序二
译者序
序言一
序言二
前言
致谢
作者简介
第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
混沌工程是一种有意的实验实践,旨在发现系统性问题。在本书中,我们将探讨为什么、何时以及如何应用混沌工程来改善你的计算机系统。你将学习通过一系列模拟真实故障的测试来运行应用程序和基础设施。通过学习像混沌工程师一样思考,以及学习设计适当的实验来确保软件的可靠性,你将掌握混沌工程的理论与技术,并将其应用于实际的系统中。
你的网络能否经受住毁灭性故障的考验?一场事故会让你的日常运营停止吗?混沌工程可以模拟基础设施中断、组件崩溃以及其他灾难,以展示系统和员工如何应对。用困境来测试系统是确保其未来弹性的*佳方式,这对于复杂、大规模、几乎没有停机空间的应用程序尤其重要。
本书教你设计和执行可控的实验来发现隐藏的问题。通过本书可以学习如何注入系统故障来干扰系统调用、网络、API,以及基于Kubernetes的微服务基础设施。为方便读者练习,本书包含一个可下载的Linux VM镜像和一套预先配置的工具,以便你可以快速进行实验,并且没有任何风险。
主要内容
● 将故障注入进程、应用程序和虚拟机
● 测试运行在Kubernetes上的软件
● 使用开源软件和遗留软件
● 模拟数据库连接延迟
● 测试和改进团队的故障响应
以上内容都基于Linux服务器,需要读者有基本的脚本技能。
— 没有更多了 —
以下为对购买帮助不大的评价