微服务架构实战(第二版):使用 Docker、Kubernetes、GitHub Actions 和 Terraform 构建微服务应用
- 发行日期
- 2024/03/01
- 作者
- Ashley Davis
- 译者
- Jimmy Song
- 发行方
- Manning
- 相关链接
- www.manning.com
关于本书
构建微服务应用,也就是分布式应用,是一个复杂而具挑战性的任务。在学习过程中,若你深陷于现代复杂的应用架构中,可能会难以把握全局。这不仅仅是编程工作,单独完成这样的项目绝非易事。
要有效使用微服务,我们需要掌握如何构建分布式应用,同时学习开发、测试及部署这些应用所需的各种工具。这个过程中,我们会面临许多问题:如何打包和部署微服务?如何配置本地测试的开发环境?微服务之间如何通信并管理数据?最关键的是,我们如何将微服务部署到生产环境并在那里进行管理、监控和解决可能涉及数百个微服务的问题?
《微服务架构实战(第二版)》解答了这些疑问,并提供了使用最新工具构建微服务应用的指导。我们将从零开始,一步步带领你运行一个完整的微服务应用。
本书注重实践而非理论。通过大量的示例,我们将逐步引导你进入生产环境,全面覆盖成为一名自信的微服务开发人员所需的知识。
书中的每个示例都配有可在 GitHub 上找到的实际代码。你可以亲自试验并进行自己的修改。
谁应该阅读本书?
本书适合所有希望深入了解微服务实际应用的人,特别适合那些需要清晰的指导来组建工具集并将应用推向生产环境的读者。虽然本书不直接教授编程,但建议读者具备一定的编码技能。
注意 如果你对现代编程语言(如 C#、Java、Python 或 JavaScript)具有基础知识或入门经验,你应能够跟进本书内容。
代码示例尽可能保持简单,本书主要关注如何搭建微服务应用所需的工具集。

如果你尚无编码经验但学习能力强,建议你在阅读本书的同时,通过其他书籍、教程、视频等学习基础的 JavaScript。代码示例简单易懂,即使你没有太多编程经验,也有机会理解其核心概念。我们的编码之旅从第 2 章开始,届时你将学习如何使用 JavaScript 和 Node.js 构建一个简单的微服务。
本书的组织结构:路线图
本书共 12 章,从构建一个微服务开始,直到在一个生产就绪的 Kubernetes 集群中运行多个微服务。每章内容如下:
- 第 1 章 介绍微服务的概念及其应用价值。
- 第 2 章 介绍使用 Node.js 和 JavaScript 构建一个简单微服务的方法,包括如何利用实时重载简化开发过程。
- 第 3 章 介绍 Docker 的使用,它是用于打包和发布我们的微服务,为部署做好准备。
- 第 4 章 扩展到多个微服务,并介绍 Docker Compose,用于在开发环境中模拟微服务应用。讨论微服务的数据管理策略,包括数据库和外部文件存储。
- 第 5 章 升级开发环境以实现整个应用程序的实时重载,讨论微服务之间的通信方式,包括使用 HTTP 进行直接消息传递和使用 RabbitMQ 进行间接消息传递。
- 第 6 章 介绍 Kubernetes,并从在本地 Kubernetes 实例部署应用程序开始,然后在云中创建并部署 Kubernetes 集群。
- 第 7 章 使用 Terraform 实现基础设施即代码,创建基础设施(容器仓库和 Kubernetes 集群)。
- 第 8 章 构建使用 GitHub Actions 的微服务持续部署(CD)管道。
- 第 9 章 展示如何对微服务应用进行多层自动化测试。
- 第 10 章 概述示例应用,并回顾在自己部署示例应用时所学的技能。
- 第 11 章 探讨如何构建可靠且容错的微服务,并监控它们以维持应用的健康。
- 第 12 章 总结本书内容,展示如何扩展微服务应用以支持业务增长,并组织管理日益扩大的开发团队,还涉及安全性、重构单体应用以及如何低成本构建微服务。
自第一版以来的变化
自第一版发布以来,本书经历了多项改变,包括:
- 新增加的第 6 章,更新并改进了 Kubernetes 的相关内容,包括如何在 Docker Desktop 附带的本地 Kubernetes 实例中进行部署。
- 更改 Kubernetes 的部署策略,从使用 Terraform 部署转为使用 kubectl 和 Kubernetes YAML 文件进行部署,这一改变是为了简化 Kubernetes 的教学。
- 新增的第 8 章,介绍使用 GitHub Actions 进行持续部署(CD),替代了旧版中的 BitBucket Pipelines 章节。
- 在第 9 章中,将自动化测试工具从 Cypress 更换为 Playwright。
- 第 11 章增加了关于可观测性的内容,这一主题自第一版以来变得越来越重要。
- 第 12 章现在包括 Mono-repos 和在每个代码仓库中设置多个 CD 管道的能力。
- 扩展了对单体应用与微服务及其间选择的讨论。
- 所有软件版本均已更新至最新。
- 许多代码已简化并精简,以便更易于理解。
- 根据第一版读者的反馈,对文本和图表进行了多处改进。
关于代码
本书包含众多源代码示例,有编号的清单也有嵌入正文中的代码。无论是哪种形式,源代码均采用固定宽度字体以便于与普通文本区分。
在多数情况下,原始源代码经过重新格式化;我们添加了换行符并重新调整缩进,以适应本书的版面。在某些情况下,代码中甚至包含行续标记(➥)。此外,当代码在文本中有详细描述时,通常会从代码清单中去除注释。许多清单附有代码注释,突出显示了关键概念。
你可以从本书的 liveBook(在线版) 中获取可执行的代码片段。
本书的完整代码可从 Manning 网站 和 GitHub 下载。
你可以下载每章(第 2-10 章)的 zip 文件,也可以通过 Git 克隆每章的代码库。每个示例都设计得尽可能简单、自包含并易于运行。随着你的阅读进展,你将以不同方式运行这些代码。
我们首先直接在 Node.js 下运行一个微服务的代码(第 2 章),然后在 Docker 下运行(第 3 章),接着在 Docker Compose 下运行多个微服务(第 4 和第 5 章)。
接下来,我们在 Kubernetes 上进行第一次部署(第 6 章),然后使用 Terraform 创建基础设施(第 7 章)。之后我们使用 GitHub Actions 设置 CD(第 8 章),进行 Jest 和 Playwright 的自动化测试(第 9 章),最后回顾整个应用并将其部署到生产环境(第 10 章)。
在整个代码示例中,我努力遵循标准约定和最佳实践。希望你能提供反馈并通过 GitHub 报告任何问题。
liveBook 讨论论坛
购买《微服务架构实战(第二版)》可免费访问 Manning 的在线阅读平台 liveBook。使用 liveBook 独有的讨论功能,你可以在全球范围内或针对特定章节或段落附加评论。你可以轻松做笔记,提问和回答技术问题,并获得作者和其他用户的帮助。访问论坛,请前往 discussion 。你还可以了解 Manning 论坛及行为准则,网址为 https://livebook.manning.com/discussion 。
Manning 致力于为读者提供一个进行有意义对话的场所,让读者之间以及读者与作者之间进行交流。这并不承诺作者会定期参与,作者在论坛中的贡献是自愿的(且无偿的)。我们建议你向作者提出一些具有挑战性的问题,以激发他们的兴趣!只要本书在印,论坛和以前讨论的存档将可通过出版商网站访问。
保持最新
关于《微服务架构实战(第二版)》及相关内容的不定期更新,请 加入邮件列表 。
关于作者
ASHLEY DAVIS 是一名经验丰富的软件工匠、企业家和作家,拥有超过 25 年的软件开发经历,涉猎从编程到团队管理再到创业的各个层面。他曾在各种规模的公司工作,从小型初创公司到大型跨国企业都有涉及。在他的职业生涯中,通过写作和开源项目为社区贡献自己的力量。
章节目录
本章介绍微服务的定义、优缺点以及单体架构的问题,概述了我们将构建的应用程序。
本章介绍如何使用 Node.js 构建一个简单的微服务,涵盖开发环境设置、微服务开发、生产环境准备和部署等内容。
学习如何使用 Docker 将微服务封装为镜像,并发布到私有容器仓库,为在生产环境中部署做好准备。
本章介绍如何为微服务应用添加文件存储和数据库支持,使用 Docker Compose 管理多个容器。
本章介绍如何通过 HTTP 请求和 RabbitMQ 实现微服务间的直接和间接消息传递,并配置应用级的实时重载以加速开发。
本章介绍如何将微服务部署到本地和云端的 Kubernetes 集群,涵盖部署配置和工具使用。
本章介绍如何使用 Terraform 通过代码管理基础设施,并自动创建 Kubernetes 集群。
本章介绍如何使用 GitHub Actions 创建持续部署流水线,实现微服务的自动化测试和部署。
本章介绍如何使用 Jest 和 Playwright 对微服务进行自动化测试,包括单元测试、集成测试和端到端测试。
本章通过 FlixTube 示例应用,展示如何构建、运行、测试和部署微服务。
本章介绍确保微服务稳健运行的技术,包括日志记录、错误处理、自动健康检查和可观测性等内容。
本章介绍如何将微服务扩展到更大的开发团队,处理需求增长,缓解变更影响,理解安全顾虑,以及将单体应用转换为微服务。