Skip to main content

关于本书(about this book)

Elixir 是一门现代函数式编程语言,用于为 Erlang 虚拟机构建大规模、分布式、容错、可扩展的系统。尽管这门语言本身颇具吸引力,但可以说,其最大的优势在于它基于 Erlang 平台。

Erlang 旨在帮助开发者应对高可用性的挑战。最初,该产品是为开发电信系统而设计的,但如今已被广泛应用于各种领域,例如协作工具、在线支付系统、实时竞价系统、数据库服务器和大型多人在线游戏等,仅举数例。如果你正在开发一个必须为全球众多用户提供服务的系统,你会希望该系统能够持续运行,无明显停机时间,无论运行时发生任何软件或硬件问题。否则,严重且频繁的中断会让最终用户不满,最终他们可能会寻求替代方案。一个频繁宕机的系统是不可靠且无法使用的,因此无法实现其既定目的。因此,高可用性成为一个日益重要的特性——而 Erlang 可以帮助你实现它。Elixir 旨在现代化并改善开发基于 Erlang 的系统的体验。这门语言汇集了来自多种其他语言(如 Erlang、Clojure 和 Ruby)的特性。此外,Elixir 附带了一套工具集,简化了项目管理、测试、打包和文档构建等工作。可以说,Elixir 降低了进入 Erlang 世界的门槛,并提高了开发者的生产力。以 Erlang 运行时为目标平台,意味着基于 Elixir 的系统能够使用 Erlang 生态系统中的所有库,包括 Erlang 自带的经过实战检验的 OTP 框架。

本书读者对象

本书是一本教程,将教你如何构建可用于生产环境的、基于 Elixir 的系统。它并非 Elixir 和 Erlang 的完整参考手册——它不涵盖语言的每一个细微差别或底层 Erlang 虚拟机的所有可能方面。它略过或跳过了许多主题,例如浮点精度、Unicode 细节、文件 I/O、单元测试等等。尽管这些主题相关,但它们不是本书的主要焦点,你可以在需要时自行研究。省略或快速处理这些常规主题,使我们有空间更详细地探讨更有趣和独特的领域。并发编程及其如何帮助系统实现可扩展性、容错性、分布性和可用性,是本书的核心主题。

本书涵盖的一些技术没有进行非常详尽的讨论。为了简洁和突出重点,我略去了一些细微差别。我的目标不是提供完整的覆盖,而是教你理解其底层原理以及每个部分如何融入更大的蓝图。读完本书后,你应该能够轻松地自行研究和理解其余细节。为了引导你走向正确的方向,书中各处提及并链接了进一步的有趣主题。

由于本书涉及中高级主题,阅读前需要满足一些先决条件。我假设你是一名拥有几年经验的专业软件开发人员。你精通的具体技术并不重要:可以是 Java、C#、Ruby、C++ 或其他通用编程语言。任何后端(服务器端)系统开发经验都会有所帮助。你不需要了解任何关于 Erlang、Elixir 或其他并发平台的知识。特别是,你无需了解任何关于函数式编程的知识。Elixir 是一门函数式语言,如果你来自面向对象背景,这可能会让你有点害怕。作为一名长期的面向对象程序员,我可以真诚地告诉你,不用担心。Elixir 底层的函数式概念相对简单,应该很容易掌握。当然,函数式编程与你在典型的面向对象语言中所见的任何内容都有显著不同,需要一些时间来适应。但这并非火箭科学,如果你是一位经验丰富的开发者,理解这些概念应该没有问题。

本书组织结构:路线图

本书分为三个部分。

第一部分 介绍 Elixir 语言,呈现并描述其基本构建模块,然后更详细地探讨常见的函数式编程惯用法:

  • 第 1 章 对 Erlang 和 Elixir 进行高层概述,解释这些技术为何有用,以及它们与其他语言和平台的区别。
  • 第 2 章 介绍 Elixir 的主要构建模块,例如模块、函数和类型系统。
  • 第 3 章 详细解释模式匹配及其如何用于处理流程控制。
  • 第 4 章 解释如何在不可变数据结构之上构建更高级的抽象。

第二部分 在这些基础上展开,重点介绍 Erlang 并发模型及其诸多好处,如可扩展性和容错性:

  • 第 5 章 解释 Erlang 并发模型并介绍基本的并发原语。
  • 第 6 章 讨论通用服务器进程——高并发 Elixir 和 Erlang 系统的构建模块。
  • 第 7 章 演示如何构建一个更复杂的并发系统。
  • 第 8 章 介绍错误处理的惯用法,特别关注并发系统中的错误和故障。
  • 第 9 章 深入讨论如何隔离各种错误并将其在生产环境中的影响最小化。
  • 第 10 章 讨论通用服务器进程的几种替代方案,这些方案有时更适合实现系统的某些部分。

第三部分 处理生产环境中的系统:

  • 第 11 章 解释用于打包可复用组件的 OTP 应用程序。
  • 第 12 章 讨论分布式系统,这有助于提高容错性和可扩展性。
  • 第 13 章 介绍为基于 Elixir 的系统投入生产做准备的多种方法,特别关注 OTP 发行版。

关于代码

本书包含许多源代码示例,既有带编号的代码清单,也有与正文同行排列的代码。在这两种情况下,源代码都以等宽字体格式化,以便与普通文本区分。

在某些情况下,原始源代码已经重新格式化;我们添加了换行符并调整了缩进,以适应书中可用的页面空间。此外,当代码在正文中描述时,源代码中的注释已从清单中移除。许多代码清单附有代码注释,以突出重要概念。

你可以从本书的 liveBook(在线)版本获取可执行的代码片段,网址是 https://livebook.manning.com/book/elixir-in-action-third-edition。书中示例的完整代码可从 Manning 网站 https://www.manning.com/books/elixir-in-action-third-edition 以及 GitHub 上的 https://github.com/sasa1977/elixir-in-action/tree/3rd-edition 下载。

liveBook 讨论论坛

购买《Elixir实战(第三版)》包括免费访问 Manning 的在线阅读平台 liveBook。使用 liveBook 独有的讨论功能,你可以在全书范围内或针对特定章节或段落附加评论。可以轻松地为自己做笔记、提出和回答技术问题,并从作者和其他用户那里获得帮助。要访问论坛,请转到 https://livebook.manning.com/book/elixir-in-action-third-edition/discussion。你也可以在 https://livebook.manning.com/discussion 了解更多关于 Manning 论坛和行为准则的信息。

Manning 对读者的承诺是提供一个场所,让个体读者之间以及读者与作者之间能够进行有意义的对话。这并不是对作者参与程度的任何具体承诺,作者对论坛的贡献仍然是自愿的(且无报酬的)。我们建议你尝试向作者提出一些具有挑战性的问题,以免他们的兴趣转移!只要本书仍在印刷,论坛和以往讨论的存档都可以从出版商的网站访问。

关于作者

萨沙·尤里奇(SAŠA JURIĆ)是一名拥有丰富经验的开发者,曾使用 C#、Ruby 和 JavaScript 等多种编程语言实现高吞吐量、并发的服务器端系统、桌面应用程序和自助服务终端应用。在过去 14 年中,他的主要专业焦点集中在 BEAM 语言上,主要是 Elixir。近年来,他一直担任 Elixir 导师,帮助团队在生产中采用和使用 Elixir。他偶尔会在 https://www.theerlangelist.com/ 上撰写关于 Elixir 和 Erlang 的博客。