购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

微服务是一种分布式系统设计方法,它倡导使用可独立更改、部署和发布的细颗粒度服务来构建分布式系统。对于那些正在转向松耦合系统、通过自治团队交付面向用户功能的组织来说,微服务非常有效。不仅如此,微服务在构建系统方面提供了大量选项,赋予我们很大的灵活性,从而可以确保系统按照用户的需求实现变更。

不过,微服务并非没有缺点。作为一个分布式系统,这种实现方式带来了更高的复杂性,甚至对经验丰富的开发人员来说,也有不少全新的挑战。

世界各地开发人员的开发经验以及新技术的涌现,正在深刻影响着微服务的应用。本书把这些想法和真实案例结合在了一起,帮助大家理解微服务是否适合自己的系统。

谁适合阅读这本书

微服务架构的含义非常广泛,因此本书涉及的范围也很广。本书应该会吸引那些对系统设计、系统开发、系统部署、系统测试和系统维护感兴趣的读者。若你已经踏上细颗粒度架构之旅,无论是想构建全新的应用系统,还是想拆分现有的单体系统,都可以从本书中找到很多实用的建议。若你喜欢钻研,本书可以帮助你搞清楚微服务是不是恰当的选择。

为什么写这本书

简单来说,撰写《微服务设计(第2版)》(简称“第2版”)的原因是想尽可能确保书中的内容仍然是最新、准确且实用的;而撰写《微服务设计》(简称“第1版”)是因为我有大量非常有趣的想法想跟大家分享。我很幸运,彼时获得了充足的时间和支持来写作第1版。我能够以相对中立的观点来写,因为我并不供职于任何一家大型技术供应商。我既没有销售解决方案,也没有推销微服务。我只是觉得这些想法很有趣,我喜欢向别人讲解微服务的概念,并愿意找到将它分享给更多人的方法。

具体来说,撰写第2版的原因主要有两个。首先,我觉得这次可以写得更好,因为我学到了很多新东西,并希望自己成为更好的作者。其次,因为我曾在推广这些想法的过程中发挥了一点儿作用,所以我有责任确保这些想法以合理且不偏不倚的方式呈现。对许多人来说,微服务架构已经成为很多场景下默认的架构选择。我认为这样的选择未必合适,所以我想通过本书与读者分享其中的原因。

本书既不推崇微服务也不反对微服务。我只是想确保我已经正确地探究了这些想法在何种背景下能够发挥良好的作用,并与你分享它们可能引发的问题。

第1版以来的变化

从2014年年初开始,我花了大约一年的时间写出了第1版并于2015年2月出版。那时,微服务的故事才刚刚开始,因为业界刚开始对这一概念有所认知。自此以后,微服务就以一种我未曾预料的方式走向主流。在这个过程中,我们可以汲取更广泛的经验,探索更多的技术。

第1版发布后,随着与更多团队展开合作,我开始进一步完善对微服务相关概念与思想的理解。在某些情况下,这意味着一部分我还未深入思考的想法,比如信息隐藏,开始变得更加清晰,成为需要突出的基本概念。在其他领域,新技术确实为我们的系统带来了新的解决方法,但也带来了新的问题。看到这么多人涌向 Kubernetes,期望它可以解决有关微服务架构中的所有问题,我不禁停下来开始思考。

此外,第1版不仅对微服务做出了讲解,而且对这种架构方法会如何改变软件开发的各个方面进行了广泛的阐述。因此,在深入研究安全性和弹性方面的问题时,我发现有必要回过头来进一步阐述那些对现代软件开发越来越重要的主题。

为了更好地阐释这些想法,在第2版中,我花更多的篇幅分享了一些典型案例。每一章都经过了再次审核,每一句话也都经过了反复斟酌。第1版中的内容没有保留太多,但其中的思想得以保留。我试图让自己的观点更加明确,同时仍然认识到解决问题通常有多种方法。例如,第2版扩充了进程间通信的内容,用了3章讨论这一主题。我还花了很多时间探讨容器、Kubernetes 和无服务器等技术的影响,因此,本书增加了关于构建和部署的独立章节。

我曾尝试让第2版与第1版的厚度相近,同时又能包含更多的想法。不过,正如你所看到的,我的尝试失败了——第2版的篇幅更长!但我认为自己成功地用一种更清晰的方式表达了自己的想法。

如何阅读这本书

本书的内容顺序主要是按照主题组织的。我构思和编写本书时的设想是,你会从头到尾按顺序阅读,不过,你当然可以直接跳到最感兴趣的章节阅读。如果你直接跳到某一章节阅读,建议参阅本书最后的术语表,这对理解新的或不熟悉的术语很有帮助。在术语方面,我会在本书中交替使用“微服务”和“服务”;除非有明确的说明,你可以假设这两个术语指的是同一事物。如果你只想跳到本书最后,那么后记也总结了书中的一些重要建议——但这样做会错过很多知识细节!

本书正文分为3个部分——基础、实现,以及人和组织。接下来,我们看看每一部分的主要概述。

第一部分 基础

本部分将详细阐述微服务背后的核心思想。

第1章 追根问底微服务

本章是对微服务的整体介绍,简要串讲了本书后续章节将要探讨的主题。

第2章 微服务建模

本章将探讨信息隐藏、耦合、内聚和领域驱动设计等概念对正确划分微服务边界的重要性。

第3章 拆分大单体

本章将针对如何将现有的单体应用 拆分为微服务给出指导。

第4章 微服务间通信模式

本章将探讨微服务的不同通信模式,包括异步调用与同步调用、请求-响应模式和事件驱动的协作。

第二部分 实现

本部分带你从第一部分的高级概念转向具体实现细节,讲解技术和方法,帮助你将微服务的价值最大化。

第5章 实现微服务间通信

本章将深入探讨实现微服务通信的具体技术。

第6章 工作流

本章将比较 Saga 和分布式事务,并讨论它们在规划跨微服务的业务流程时的用法。

第7章 构建

本章将解释从微服务到代码库和构建制品的映射。

第8章 部署

本章将讨论部署微服务的众多选择,包括容器、Kubernetes 和 FaaS。

第9章 测试

本章将探讨测试微服务的挑战,包括端到端测试、消费者驱动的契约和生产环境中的测试等。

第10章 从监控到可观测性

本章将阐述从关注静态的监控活动转向提高微服务架构的可观测性。同时,本章还将提供有关工具的具体建议。

第11章 安全

微服务架构增大了系统的易受攻击面,但同时也增加了深度防御的机会。本章将探讨两者之间的平衡问题。

第12章 弹性

本章将更广泛地介绍什么是弹性,以及微服务在提高系统弹性方面可以发挥的作用。

第13章 扩展性

本章将概述扩展性的4个维度,并介绍如何组合使用它们来实现微服务架构的扩展性。

第三部分 人和组织

如果没有人和组织的支持,理念和技术都毫无意义。

第14章 用户界面

从避免专门的前端团队到使用 BFF GraphQL,本章将探讨微服务和用户界面如何协作。

第15章 组织结构

本章将重点探讨在微服务架构下,业务流团队和赋能团队如何协同工作。

第16章 演进式架构师

微服务架构不会静止不变,因此你对系统架构的看法可能需要变化。本章将深入探讨这一主题。

排版约定

本书使用以下排版约定。

黑体

表示新术语或重点强调的内容。

等宽字体( constant width

表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。

该图标表示提示或建议。

该图标表示一般注记。

该图标表示警告或警示。

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

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

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

联系我们

如有与本书有关的评价或问题,请联系出版社。

美国:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

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

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

O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是: https://oreil.ly/Building_Microservices2

对于本书的评论和技术性问题,请发送电子邮件到: errata@oreilly.com.cn

要了解更多 O'Reilly 图书、培训课程、会议和新闻等信息,请访问网站: http://www.oreilly.com

致谢

我从家庭中获得了持续的巨大的帮助,特别是我的妻子 Lindy Stephens,她承受了很多压力,但仍保持着巨大的耐心和极好的心态。如果我说“没有她,就没有这本书”就太轻描淡写了,虽然我对她说这些话时,她并不总是相信我。应该说,本书是献给她的。同样,本书也献给我的父亲、Jack、Josie、Kane,以及 Gilmanco Staynes 家族的每一个人。

没有第1版的话,也就不会有第2版,所以我想再次感谢在写作第1版的艰难过程中帮助过我的每一个人,包括技术审稿人 Ben Christensen、Martin Fowler 和 Venkat Subramaniam。感谢 James Lewis,我们之间的很多对话富有启发性。感谢 O'Reilly 团队的 Brian MacDonald、Rachel Monaghan、Kristen Brown 和 Betsy Waliszewski。也要感谢以下读者:Anand Krishnaswamy、Kent McNeil、Charles Haynes、Chris Ford、Aidy Lewis、Will Thames、Jon Eaves、Rolf Russell、Badrinath Janakiraman、Daniel Bryant、Ian Robinson、Jim Webber、Stewart Gleadow、Evan Bottcher、Eric Sword 和 Olivia Leonard。还要感谢 Mike Loukides,是他最初鼓励我写这本书的。

Martin Fowler 再次担任了第2版的技术审稿人。还有 Daniel Bryant 和 Sarah Wells,他们毫不吝惜自己的时间,慷慨地给予了反馈。还要感谢 Nicky Wrightson 和 Alexander von Zitzerwitz,他们推动了技术审查工作的完成。在 O'Reilly 团队方面,整个写作过程是由出色的编辑 Nicole Taché 监督的,如果没有她,我肯定要疯掉了;Melissa Duffield,好像比我更会管理我的工作量;还要感谢 Deb Baker、Arthur Johnson 和产品团队的其他成员(抱歉,我不知道所有人的名字,但要感谢你们);还有 Mary Treseler,她帮助我渡过了不少难关。

此外,我在写作第2版的过程中还从许多人的帮助和见解中受益匪浅,包括(排名不分先后)Dave Coombes 以及 Tyro 团队、Dave Halsey 以及 Money Supermarket 团队,Tom Kerkhove、Erik Doernenburg、Graham Tackley、Kent Beck、Kevlin Henney、Laura Bell、Adrian Mouat、Sarah Taraporewalla、Uwe Friedrichse、Liz Fong-Jones、Kane Stephens、Gilmanco Staynes、Adam Tornhill、Venkat Subramaniam、Susanne Kaiser、Jan Schaumann、Grady Booch、Pini Reznik、Nicole Forsgren、Jez Humble、Gene Kim、Manuel Pais、Matthew Skelton,以及 South Sydney Rabbitohs。最后,我要感谢本书早期版本的优秀读者,他们提供了宝贵的建议,包括 Felipe de Morais、Mark Gardner、David Lauzon、Assam Zafar、Michael Bleterman、Nicola Musatti、Eleonora Lester、Felipe de Morais、Nathan DiMauro、Daniel Lemke、Soner Eker、Ripple Shah、Joel Lim 和 Himanshu Pant。最后,我想向 Jason Isaacs 问好。

我用了2020年一整年和2021年的上半年编写了本书的大部分内容。在大部分时间里,我使用 macOS 上的 Visual Studio Code 写作,偶尔也会使用 iOS 上的 Working Copy。书中的所有图表都是由 OmniGraffle 创建的。格式化的工作则由 AsciiDoc 来承担,总的来说,效果很好。O'Reilly 的 Atlas 工具链可以神奇地让本书变成易于阅读的版式。 EPAczJN19iJacMo5flAPTlCpB9SiLIaRyVUtWIl4sigOiwxQPfIc1tesvkwUPF4r

点击中间区域
呼出菜单
上一章
目录
下一章
×