混沌工程:通过可控故障实验提升软件系统可靠性
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

Preface
前言

人们经常问我是怎么开始从事混沌工程的。我倾向于告诉他们:因为它有助于改善睡眠。混沌工程不但是“素食主义”友好的,而且在这方面非常有效。下面我来解释一下。

回到2016年,机缘巧合之下,我幸运地参与了一个基于Kubernetes的前沿项目。现在没有人会因为选择Kubernetes而被解雇,但是在那时候风险却很大。Kubernetes v1.2包含了许多不稳定的组件,并且漏洞修复的发布速度超过了安装速度。

为了使其发挥作用,我的团队需要拥有真正的Kubernetes运维经验,并且需要在短期内完成。我们需要知道它是如何工作的、为什么出问题、如何修复它,以及如何在发生这种情况时得到警告。我们认为,做到这一点的最佳方法是先破坏它。

后来,我才知道这种实践称为混沌工程,这样听起来更酷。事实证明,这种实践在减少宕机次数方面非常有效。而且,与昂贵的竹炭记忆海绵枕相比,它对提高我的睡眠质量更有帮助。在这几年里,混沌工程是我的主要兴趣之一。我并不孤单,它正迅速成为全球工程师的宝贵工具。

如今,混沌工程面临着一些严重的问题。特别是充斥了一些奇谈怪论(在生产中随机破坏事物),而且缺乏指导人们如何把它做好的高质量内容以及需要采用的最初违反直觉的思维(失败会发生,所以我们需要做好准备)。

我编写本书来解决这些问题。我想找到一种合理的、基于科学的方法论,从而使混沌工程适用于任何系统、软件或其他方面。我想证明你不必大费周章才能从中受益,只需少量投资即可为你带来很多价值。

如果你是一名对新领域抱有好奇心的软件工程师或者开发者,并且致力于构建更可靠的系统(无论系统规模是大还是小),那么这本书正是为你而设计的。从Linux内核一直到应用程序或浏览器级别,本书都为你提供了正确的工具。

我为本书投入了很多心血,希望你能从中获得价值,并且收获快乐。如果你想了解更多信息,可以访问https://chaosengineering.news。如果你喜欢(或讨厌)这本书,我也希望你可以反馈给我!

关于本书

本书的目标是把混沌工程变成成熟的、主流的、基于科学的实践,从而使任何人都可以接触它。我坚信它会给你带来最好的投资回报,并且我希望每个人都能从中受益。

混沌工程并不关注任何单一的技术或编程语言,这也是写这样一本书的挑战之一。事实上,它可以用于所有类型的技术栈,这是它的优点之一。你可以在本书中看到这一点——每一章都聚焦于一个软件工程师可能会遇到的比较常见的场景,处理不同的语言、不同的技术栈层级和不同的源代码控制层。本书使用Linux作为主要的操作系统,但是它教授的原则是通用的。

谁应该读这本书

如果你想使系统更加可靠,那么本书正是为你准备的。你是SRE吗?是全栈工程师还是前端开发人员?你在工作中使用JVM、容器还是Kubernetes?如果你对以上这些问题中的任何一个的回答是肯定的,你都可以在本书中找到和你工作相关的章节。本书假设你对Linux(Ubuntu)上的常用命令有基本的了解,因此不会介绍所有相关的内容,这样就可以深入研究我们所关注的方面(值得注意的例外是Docker和Kubernetes,它们是相对较新的技术,我会首先介绍它们是如何工作的)。

这本书是如何组织的路线图

本书共13章,除第1章和最后一章外,其余章节分为三个部分。

第1章介绍混沌工程和实施混沌工程的原因,接下来的第一部分为进一步理解混沌工程奠定基础:

❑第2章展示一个真实的例子,说明一个看似简单的应用程序可能会以意想不到的方式崩溃。

❑第3章介绍可观测性和查看系统内部所需要的工具。

❑第4章以一个流行的应用程序(WordPress)为例,展示如何在网络层设计、执行和分析混沌实验。

第二部分涵盖混沌工程的各种技术和技术栈:

❑第5章从一个关于Docker的模糊概念开始,介绍它是如何工作的,并使用混沌工程测试它的局限性。

❑第6章揭开系统调用的神秘面纱——它是什么,如何看应用程序生成了哪些系统调用,以及如何阻止系统调用,从而了解应用程序应对故障的能力。

❑第7章展示如何动态地将故障注入JVM中,这样你就可以测试一个复杂的应用程序如何处理你感兴趣的故障类型。

❑第8章展示如何将故障直接注入应用程序中。

❑第9章介绍网络浏览器中的混沌工程(使用JavaScript)。

第三部分讨论Kubernetes中的混沌工程:

❑第10章介绍Kubernetes,包括它的由来,以及它能为你做什么。

❑第11章介绍一些更高级的工具,让你能够快速进行复杂的混沌工程实验。

❑第12章深入介绍Kubernetes的工作原理。为了理解它的弱点,你需要知道它是如何工作的。本章涵盖了Kubernetes的所有组件,并探讨如何使用混沌工程识别弹性问题。

最后一章讨论机器之外的混沌工程:

❑第13章表明,同样的原则也适用于其他复杂的分布式系统,例如你每天都需要面对的团队问题。本章涵盖混沌工程思维,并探讨如何获得利益相关者的支持。

关于代码

本书包含不同的代码片段以及预期的输出,以帮助你使用不同的工具。最好的方法是使用本书附带的Ubuntu虚拟机来运行它们,你可以从https://github.com/seeker89/chaos-engineering-book下载它以及所有的源代码。