- 学习有效和明确的端到端微服务系统设计。
- 定义团队、他们的职责以及共同工作的指导方针。
- 了解如何将大型应用程序分割成一组微服务。
- 研究如何将数据隔离并嵌入到相应的微服务中。
- 为基础架构更改构建一个简单但功能强大的CI/CD管道。
- 为示例微服务编写代码。
- 在Amazon上部署可正常工作的微服务应用程序Web服务。
微服务架构提供更快的更改速度,更好的可扩展性,更干净,可进化的系统设计。但是实现你的个微服务架构是困难的。你如何做出无数的选择,让你的团队了解所有的技术细节,并引导组织走向成功的执行,以限度地提高你的成功机会?在这本书中,本书作者为构建有效的微服务架构提供了一步一步的指导。
架构师和工程师将遵循基于已被证明适用微服务系统的技术和架构进行实现。你将构建一个操作模型、一个微服务设计、一个基础设施和两个正在工作的微服务,然后将这些部分放在一起作为一个实现。对于任何负责构建微服务或微服务架构的人来说,本书都是非常宝贵的。
前言
十年前,一群软件架构师聚集在一起,创造了微服务一词来定义已经发展的软件架构风格。从那时起,微服务风格的课程、视频和书面作品激增。实际上,在2016 年,我们与人合著了《Microservice Architecture》,该书为微服务系统的原理提供了入门指南。
自该书出版以来,我们和许多人都有机会使用自己构建的微服务系统。我们自己的经验以及从与其他从业者的对话中获得的经验,已经使我们更好地理解了微服务实施者所面临的实际问题。这种理解很多来自成功的经验,但是一些有用的见解来自错误带来的教训。
我们努力将从业者的经验整理成一份备受好评的指南。我们生活在一个可以获得大量从业者建议的时代。但是,我们很难在这个信息海洋中找准方向,也很难以一种可以一起工作的方式将这些信息组织起来。本书提供了一个实用的说明性模型,涵盖了团队设计、领域设计、基础架构、工程和发布。我们的目标是为你提供有关微服务实现的统一视图,以帮助你在采用微服务架构的过程中迈出坚实的一步。
本书面向的读者群
我们为微服务实现者编写了这本书。当我们讨论微服务系统的一些原理和模式时,本书的重点是实用的设计和工程。如果你是负责构建微服务或微服务体系结构的架构师或工程师,那么这本书非常适合你。许多人能从本书中受益。对于那些只想通过微服务实现亲密接触的读者来说,这本书也是有用的指南。无论你是什么角色,如果你想了解构建微服务系统的工作,这本书都会对你有所启发。
你需要什么
由于微服务涉及的范畴很大,因此我们使用许多不同的工具和方法。如果你想遵循所有示例,则需要安装或订阅才能使用以下工具和平台:
Docker。
Redis。
MySQL。
GitHub。
GitHub Actions。
Terraform。
Amazon Web Services。
kubectl。
Helm。
Argo CD。
在相关章节,我们提供了哪里获得以及如何获得这些工具的说明。
内容约定
本书采用下述的排版约定。
斜体(Italic)
表示新术语、URL、示例电子邮件地址、文件名、扩展名、路径名和目录。
等宽字体(Constant Width)
表示命令、选项、开关、变量、属性、键、函数、类型、类、命名空间、方法、模块、属性、参数、值、对象、事件、事件句柄、XML 标签、HTML 标签、宏、文件的内容或者命令的输出。
等宽加粗字体(Constant Width Bold)
表示应由用户输入的命令或其他文本。
斜体等宽字体(Constant Width Italic)
表示应该替换成用户提供的值。
使用代码示例
补充材料( 代码示例、练习等) 可从https://oreil.ly/Microservices UpandRunning 下载。
如果你在使用代码示例时遇到技术问题或疑问, 请发送电子邮件至bookquestions@oreilly.com。
本书的目的是帮助你完成工作。一般来说,你可以在自己的程序或者文档中使用本书附带的示例代码。你无需联系我们获得使用许可,除非你修改了代码的关键部分。例如,使用本书中的多个代码片段编写程序就无需获得许可,但销售或者分发OReilly 书中的示例代码则需要获得许可。回答问题时援引本书内容无需获得许可,但将本书中大量示例代码合并到产品文档中需要获得许可。
我们不强制要求署名,但如果你这么做,我们深表感激。署名一般包括书名、作者、出版社和国际标准图书编号。例如:Microservices: Up and Running by Ronnie Mitra and Irakli Nadareishvili (OReilly). Copyright 2021 Mitra Pandey Consulting, Ltd. and Irakli Nadareishvili, 978-1-492-07545-5。
如果你觉得自身情况不在合理使用或上述允许的范围内,请通过邮件和我们联系,地址是 permissions@oreilly.com。
OReilly 在线学习平台(OReilly Online Learning)
近40 年来,OReilly Media 致力于提供技术和商业
培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。OReilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及OReilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
联系我们
美国:
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
这本书有专属网页,你可以在那儿找到本书的勘误、示例和其他信息。这个网页的地址是:https://oreil.ly/MicroservicesUpandRunning。
如果你对本书有一些评论或技术上的建议, 请发送电子邮件到bookquestions@oreilly.com。
有关其他图书、讲座、会议、新闻的信息,请访问我们的网站:http://www.oreilly.com。
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
我们要感谢我们的编辑Melissa Potter 和Deborah Baker,以及OReilly 的团队,没有他们,我们将永远不会完成这本书。我们还要感谢Pete Hodgson、Chris ODell、Lorinda Brandon、JP Morgenthal、Mike Amundsen 和David Butland,他们提供了令人难以置信的见解、反馈和观察。后,我们要感谢Capital One 和Publicis Sapient 提供的支持,使我们能够将这本书付诸实践。
作者介绍
Ronnie Mitra是一位作家,战略家和顾问,拥有超过25年网络和连接技术工作经验。他是OReilly的《Microservice Architecture》和《Continuous API Management》的合著者。
Irakli Nadareishvili是Capital One核心创新副总裁,领导着负责构建基于微服务的核心银行平台的团队。在此之前,他是健康科技初创公司ReferWell的联合创始人兼CTO,并在CA Technologies和NPR担任技术领导职务。您可以通过@inadarei在Twitter上关注Irakli。
译者介绍
王岩,thoughtworks高级咨询师,专注于领域驱动设计的实践和推广。
黄俊彬,thoughtworks高级咨询师,在智能硬件、通信、互联网、金融等领军企业提供敏捷转型、系统架构改造、大型遗留系统重构等服务。
目录
前言 .1
第1 章 迈向微服务架构 7
1.1 微服务是什么? .8
1.2 降低协作成本 10
1.2.1 协作成本问题 11
1.2.2 艰难部分. 13
1.3 从实践中学习 14
1.4 决策,决策…… 17
1.5 小结 21
第2 章 微服务运作模式的设计 22
2.1 为什么团队和人员很重要 23
2.1.1 团队规模. 24
2.1.2 团队技能. 26
2.1.3 团队间协作 27
2.2 引入团队拓扑 29
2.2.1 团队类型. 29
2.2.2 交互模式. 31
2.3 设计一个微服务团队拓扑 32
2.3.1 建立系统设计团队 . 33
2.3.2 构建微服务团队模板 35
2.3.3 平台团队. 38
2.3.4 赋能和复杂的子系统团队 . 39
2.3.5 消费者团队 41
2.3.6 小结 43
第3 章 设计微服务:SEED(S)流程 44
3.1 介绍服务设计的七个基本演变:SEED(S)方法 . 45
3.2 确定参与者 . 46
3.3 确定参与者必须做的工作 49
3.3.1 使用工作故事描述格式来完成待完成工作(JTBDs) 51
3.3.2 我们的示例项目中的示例JTBD 52
3.4 用序列图发现交互模式 53
3.5 从JTBD 派生操作和查询 56
3.6 将每个查询和操作描述为具有开放标准的规范 59
3.7 获得关于API 规范的反馈 64
3.8 实现微服务 . 65
3.9 微服务与API . 65
3.10 小结 . 68
第4 章 调整微服务的大小:寻找服务边界 69
4.1 为什么边界很重要,什么时候重要,以及如何找到它们 69
4.2 领域驱动设计和微服务边界 71
4.2.1 上下文映射 75
4.2.2 同步集成与异步集成 78
4.2.3 DDD 聚合 79
4.3 事件风暴简介 79
4.4 介绍通用规模计算公式 86
4.5 小结 87
第5 章 处理数据 89
5.1 独立部署和数据共享 . 89
5.2 微服务嵌入他们的数据 91
5.2.1 嵌入数据不应导致数据库集群数量激增 92
5.2.2 数据嵌入和数据委托模式 . 93
5.2.3 使用数据复制解决独立性 . 95
5.2.4 分布式事务和失败补偿 96
5.3 事件源和CQRS 99
5.3.1 事件源 100
5.3.2 通过滚动快照提高性能 106
5.3.3 事件存储 107
5.3.4 命令查询职责分离 108
5.4 微服务之外的事件源和CQRS 109
5.5 小结 . 111
第6 章 构建基础设施流水线 . 112
6.1 DevOps 原则和实践 113
6.1.1 不可变的基础设施 114
6.1.2 基础设施即代码 116
6.1.3 持续集成和持续交付 . 118
6.2 建立基础设施即代码的环境 120
6.2.1 设置GitHub 120
6.2.2 安装Terraform 121
6.3 配置Amazon Web Services 122
6.3.1 设置一个AWS Operations 账户 123
6.3.2 配置AWS CLI 127
6.3.3 设置AWS 权限 . 128
6.3.4 为Terraform 创建S3 存储 132
6.4 建立基础设施即代码流水线 134
6.4.1 创建沙箱代码库 135
6.4.2 使用Terraform 137
6.4.3 编写沙盒环境代码 138
6.4.4 构建流水线 . 142
6.4.5 测试流水线 . 152
6.5 小结 . 154
第7 章 构建微服务基础设施 . 156
7.1 基础设施组件 . 156
7.1.1 网络 157
7.1.2 Kubernetes 服务 158
7.1.3 GitOps 部署服务器 . 160
7.2 实现基础设施 . 162
7.2.1 安装kubectl 162
7.2.2 设置模块代码库 163
7.2.3 网络模块 166
7.2.4 Kubernetes 模块 182
7.2.5 设置Argo CD 195
7.2.6 测试环境 200
7.2.7 清理基础设施 201
7.3 小结 . 203
第8 章 开发者空间 205
8.1 编码标准和开发者的配置 . 206
8.2 在本地设置一个容器化的环境 214
8.2.1 安装Multipass 215
8.2.2 输入容器和映射文件夹 217
8.3 安装Docker . 218
8.4 本地Docker 的高级用法:安装Cassandra 220
8.5 安装Kubernetes . 221
8.6 小结 . 223
第9 章 开发微服务 225
9.1 设计微服务端点 225
9.1.1 航班管理微服务 229
9.1.2 预留管理微服务 230
9.1.3 设计OpenAPI 规范 230
9.2 为微服务实现数据 238
9.2.1 预订微服务的Redis 数据模型 238
9.2.2 航班微服务的MySQL 数据模型 . 241
9.3 微服务的实现代码 243
9.3.1 航班微服务背后的代码 244
9.3.2 健康检查 250
9.4 向项目引入第二种微服务 . 252
9.5 通过伞式项目关联微服务 . 259
9.6 小结 . 262
第10 章 发布微服务 264
10.1 设置Staging 环境 265
10.1.1 Ingress 模块 . 266
10.1.2 数据库模块 267
10.1.3 Forking Staging 基础设施项目 268
10.1.4 配置Staging 工作流 269
10.1.5 编辑Staging 基础设施代码 . 271
10.2 传输航班信息容器 . 275
10.2.1 介绍Docker Hub 276
10.2.2 配置Docker Hub 277
10.2.3 配置流水线 278
10.3 部署航班服务容器 . 282
10.3.1 了解Kubernetes 部署 . 283
10.3.2 创建 Helm Chart 284
10.3.3 创建微服务部署代码库 . 286
10.3.4 使用Argo CD 进行GitOps 式的部署 . 292
10.4 清理 299
10.5 小结 299
第11 章 变更管理 . 300
11.1 微服务系统中的变更 301
11.1.1 以数据为导向 . 301
11.1.2 变更的影响 302
11.1.3 三种部署模型 . 304
11.2 基于我们的架构的考量 306
11.2.1 基础设施的变更 . 307
11.2.2 微服务变更 311
11.2.3 数据的变更 316
11.3 小结 318
第12 章 旅程的终点(和新的起点) . 320
12.1 微服务的复杂性与简化 321
12.2 衡量微服务转型的进展 325
12.3 小结 328