前言

本书围绕“软件系统大规模运行的能力日益成为定义成功的关键因素”这一论点而编写。随着世界的关联性日渐加强,系统的大规模运行只会变得更加普遍。因此,本书的目标是为读者提供分布式和并发系统的核心知识。本书还会介绍一系列可用于构建可扩展系统的软件架构方法和分布式技术。

软件系统可扩展性的重要性

世界变化的步伐快得令人生畏。创新每天都在涌现,不断为我们所有人创造用于互动、开展业务、娱乐……甚至阻断疾病流行的新能力。大部分创新的动力源于软件,这些软件由大型互联网公司的开发者大军、初创公司的精干小团队以及介于两者之间的各种规模的团队编写。

交付及时响应用户需求的软件系统已经足够困难,而在大规模系统面前,这项任务变得更加艰巨。我们都知道系统暴露在意想不到的高负载之下时会突然失效——在最好的情况下,这会对组织造成不良影响,最坏的情况下甚至会导致员工失业或公司倒闭。

软件系统不同于物理系统,因为它是无定形的——它的物理形式(1和0)与实际功能没有任何相似之处。我们绝不会期望在一夜之间将一个500人的小村庄变成一个1000万人口的大城市。但是,对于软件系统,我们有时期待它能处理的请求数是设计时的1000倍。不出所料,结果很少如人意。

目标读者

本书的主要目标读者是在分布式并发系统领域毫无经验或经验有限的软件工程师和架构师。他们需要加深理论知识学习和积累设计实践经验,以迎接构建面向互联网的大规模应用程序所带来的挑战。

你将从本书收获什么

本书从可扩展性的角度涵盖了并发和分布式系统的概况。将可扩展性与其他架构特性完全分开是不现实的,但可扩展性是本书讨论的主要焦点。当然,架构的其他特性也必然会发挥作用,性能、可用性和一致性常常是人们关注的焦点。

构建分布式系统需要对分布式和并发有一些基本的了解——这些知识贯穿本书,并反复出现。反复出现是必要的,因为分布式系统中的两个基本问题使本书的各个主题变得复杂,如下所述。

第一,尽管整个系统几乎始终完美运行,但系统的个别部分随时可能会出现故障。当一个组件出现故障(硬件崩溃、网络中断、服务器错误等)时,我们必须采取相应技术来保证系统继续运行并能从故障中恢复。每个分布式系统都会经历组件故障,它们通常以奇怪、神秘和无法预料的方式出现。

第二,创建可扩展的分布式系统需要多个活动组件的协调。每个组件都需要遵守协议并尽可能快地处理请求。哪怕只有一个组件导致请求延迟,都有可能导致整个系统性能不佳,甚至最终崩溃。

有大量的文献可以帮助你解决这些问题。幸运的是,还有大量技术可以帮助我们构建容错且可扩展的分布式系统。这些技术包含了难以正确构建的理论方法和复杂算法。在广泛适用的平台级技术的指导下,我们可以站在巨人的肩膀上构建复杂的业务解决方案。

具体来说,本书的读者将学到:

●分布式系统的基本特征,包括状态管理、时间协调、并发性、通信和协调。

●用于构建可扩展的健壮服务的架构方法和支持技术。

●分布式数据库如何运行以及如何用于构建可扩展的分布式系统。

●用于构建基于事件的流系统的架构和技术,例如Apache Kafka和Flink。

排版约定

本书中使用以下排版约定:

斜体(Italic

表示新的术语、URL、电子邮件地址、文件名和文件扩展名。

等宽字体(Constant width)

用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。

等宽粗体(Constant width bold

表示应由用户直接输入的命令或其他文本。

等宽斜体(Constant width italic

表示应由用户提供的值或由上下文确定的值替换的文本。


该图示表示一般性说明。


该图示表示警告或注意。

示例代码

可以从https://oreil.ly/fss-git-repo下载补充材料(示例代码、练习、勘误等)。

这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。

非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:

Foundations of Scalable Solutions,作者Ian Gorton,由O'Reilly出版,书号978-1-098-10606-5。

如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。

O'Reilly在线学习平台(O'Reilly Online Learning)


40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。

我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问https://oreilly.com

如何联系我们

对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。

美国:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn

本书配套网站https://oreil.ly/scal-sys上列出了勘误表、示例以及其他信息。

关于书籍、课程、会议和新闻的更多信息,请访问我们的网站https://oreilly.com

我们在LinkedIn上的地址:https://linkedin.com/company/oreilly-media

我们在Twitter上的地址:https://twitter.com/oreillymedia

我们在YouTube上的地址:https://www.youtube.com/oreillymedia

致谢

如果没有我的研究生导师Jon Kerridge教授给我的灵感,本书不可能出版。30年来,他无限的热情激励着我从事这项工作。

来自卡内基梅隆大学的Matt Bass和John Klein在本书的早期阶段提供了宝贵的资源。感谢他们就可扩展软件架构的方方面面进行的精彩讨论。

我的审稿人非常出色——勤奋且富有洞察力——让我一直走在正确的道路上。永远感谢Mark Richards、Matt Stine、Thiyagu Palanisamy、Jess Males、Orkhan Huseynli、Adnan Rashid和Nirav Aga。感谢Virginia Wilson修正了我的错误!

我还要感谢我所有的学生,尤其是美国东北大学西雅图校区“CS6650构建可扩展分布式系统”课程中的Ruijie Xiao。关于如何最好地传达本书中涵盖的许多复杂概念,他们为我提供了宝贵的反馈。他们是最好的试金石!