前言

前言

本书将探究用来架构、设计和构建软件(特别是分布式系统)的方法,以应对实际操作中出现的各种考验。许多不循常规的用户会有各种难以想象的奇怪行为,软件开发人员需要为此做好准备。从发布的那一刻起,软件就会遭受攻击。它既要承受像台风般袭来的“快闪族”1用户所带来的负载压力,也会因为不安全的物联网设备而承受DDoS(distributed denial-of-service,分布式拒绝服务)攻击所带来的毁灭性压力。本书会仔细研究那些没能经受住这番考验的软件,并找到一些方法,以确保软件在上述攻击之下,仍能幸免于难。

1“快闪族”(flash mob)原指一种行为艺术,其间许多人通过互联网或其他方式,在一个指定的时间和地点,出人意料地同时做一系列指定的动作,然后迅速离开。——译者注

读者对象

本书面向分布式软件系统(包括网站、Web服务和企业应用集成项目等)的架构师、设计师和开发工程师。这些系统必须处于可用状态,否则公司就会赔钱。它们也许是通过销售直接实现创收的商业系统,抑或是员工用于完成工作的关键内部系统。如果有人因为软件停止工作而不得不回家,那么本书就能派上用场。

内容结构

本书分为四个部分,每个部分都从一个案例研究说起。

第一部分展示如何使系统保持工作状态,并维持系统的正常运行时间。尽管冗余设计保证了可靠性,但是分布式系统所表现出来的可用性,更像是“两个8”,而不是令人梦寐以求的“五个9”2。稳定性是在考虑任何其他问题之前,都必须考虑的先决条件。如果系统每天都会崩溃和停机,人们就不会关心其他事情了。在那种情况下,主要的工作就是在短时间思考出暂时的解决办法。不具备稳定性的系统,就是不可用的系统。所以,本书会从为系统打造稳定的基础开始讲起。

2“两个8”和“五个9”分别指系统能在88%和99.999%的时间内可用。——译者注

确保稳定性之后,就要关注持续的运维。第二部分讨论系统在生产环境中运行究竟意味着什么。我们需要应对现代生产环境的复杂性——虚拟化、容器化、负载均衡和服务发现的各种细节。这一部分将描述一些良好的模式,以帮助物理数据中心和云环境实现可控性、明晰性和可用性。

第三部分讨论部署。对于将软件部署到服务器,市面上已经有了一些很棒的工具。但事实证明,这只解决了问题中很简单的那部分。在不打扰消费者的前提下频繁地微调和更新系统,这让问题变得困难了许多。这一部分先讨论如何针对部署进行设计,以及如何在不停机的情况下进行部署,然后讨论在不同的服务之间如何进行版本控制——这总是一个棘手的问题!

第四部分将系统持续运行作为整个信息生态系统的一部分,探究系统持续运行环境,介绍系统性问题的处理。如果1.0版本的发布意味着该系统的诞生,那么之后则需要考虑其成长和发展。这一部分将讨论如何构建能实现随着时间的推移不断成长、伸展和适应的系统。这包括演进式架构和跨系统进行共享的“知识”。最后会讨论如何通过新兴的“混沌工程”学科,以构建反脆弱系统。“混沌工程”利用随机性并通过故意施压来改善系统。

案例研究

本书涉及的案例研究来自我亲身观察过的真实事件和系统故障实例,通过对这些案例的扩展研究,来刻画本书的几大主题。这些系统故障使参与其中的人们陷入困境,并造成了惨重的损失。因此,为了保护牵涉其中的公司和员工,本书特意对一些信息进行了模糊化处理,并且对涉及的系统、类和方法的名字也做了改动。然而,所有的改动仅限于这些无关紧要的细节。每个案例所属的行业、事件的顺序、系统失效方式、差错的蔓延和后果,都原汁原味地保留了下来。这些系统故障造成的损失描述属实,没有夸大成分。它们都发生在真实的公司里,损失的都是实实在在的金钱。之所以保留这些数字,就是为了强调所选案例的严肃性。当系统出现故障时,真金白银就岌岌可危了。

电子书

扫描如下二维码,即可购买本书电子版。

在线资源

在本书的网页3上,可以阅读更详细的信息,下载源代码,在讨论区发帖,并可报告勘误信息,比如笔误和对本书内容的建议等4。如果想与其他读者讨论一些专业问题,并分享对本书的评论,那么讨论区就是最佳的场所。

3https://pragprog.com/titles/mnee2/46

4要提交中文版的勘误,请访问图灵社区:http://ituring.cn/book/2622。——编者注

现在就开始介绍生产环境的生存法则。

第2版中文版前言

很高兴本书第2版的中译本能够出版。

自2007年第1版面世以来,书中提到的许多设想已经成为业界普遍采用的做法,并且在众多应用程序及运行环境的广泛实践中证明有效。第2版添加了一些新的内容,包括一些新的模式和系统失效方式,这些是近几年研究成果的缩影。我希望本书能起到抛砖引玉的作用,带你寻找软件发布的乐趣。

迈克尔·尼加德

2019年5月3日

目录