基本*息
书名:微服 架构设计模式
定价:139.00元
作者: 克 斯·理查森(Chris Richardson)
出版社: 械 业出版社
出版*期:2019-05-01
ISBN:9787111624127
字数:
页码:
版次:1
装帧: 装-胶订
开本:16开
商品重量:0.4kg
编辑推荐
本书由 界十 软 架构师 一、微服 架构的先驱、Java开发者社区的意见 袖Chris Richardson亲笔撰写,旨在 助架构师 程序员学会使用微服 架构成 开发应用程序。书中描述了如何 决我们将面临的众多架构设计挑 , 括如何管理分布式数据,还介绍了如何将单体应用程序重构为微服 架构,涵盖44个架构设计模式, 统 决服 拆分、事 管理、查询 跨服 通*等难题。本书并不是鼓 微服 架构的宣言,作者既介绍了微服 的原理、原则,又详细讲 了实际落 中的架构设计模式,将使你理 微服 架构、它的好处 弊端,以及应该何时使用微服 架构。本书将 助你建立微服 的全局视野,并学会在纷繁复 的 况下 出正确的架构 择 取舍。
内容提要
成 开发基于微服 架构的应用软 ,需要掌握一 列全新的架构思想 实践。在这本 的书籍中, 界十 软 架构师 一、微服 架构先驱 Chris Richardson 收 、分类并 释了 44 个架构设计模式,这些模式用来 决诸如服 拆分、事 管理、查询 跨服 通*等难题。
本书将 会你如何开发 部署*产 别的微服 架构应用。这套 贵的架构设计模式建立在数十年的分布式 统经验 上,Chris 还为开发服 添加了新的模式,并将它们组合成可在 实条 下可靠 扩展 执行的 统。本书不仅仅是一个模式目录,还提*了经验驱*的建议,以 助你设计、实现、测试 部署基于微服 的应用程序。
本书 :
如何(以及为什么)使用微服 架构
服 拆分的策略
事 管理 查询相关的模式
高效的测试策略
括容 Serverless在内的部署模式
本书 为熟悉标准企业应用程序架构的开发人员编写,使用 Java 编写所有示例 码。
目录
◆目录 ◆
目 录
写给中*版读者的
译者序
中*版序一
中*版序二
前言
言
1章 逃离单体 狱 / 1
1.1 迈向单体 狱的漫长旅程 / 2
1.1.1 FTGO应用程序的架构 / 3
1.1.2 单体架构的好处 / 4
1.1.3 什么是单体 狱 / 4
1.2 为什么本书与你有关 / 7
1.3 你会在本书中学到什么 / 8
1.4 拯救 :微服 架构 / 8
1.4.1 扩展立方体 服 / 9
1.4.2 微服 架构作为模块化的一 形式 / 11
1.4.3 每个服 都拥有自己的数据库 / 12
1.4.4 FTGO的微服 架构 / 12
1.4.5 微服 架构与SOA的异同/ 14
1.5 微服 架构的好处 弊端 / 15
1.5.1 微服 架构的好处 / 15
1.5.2 微服 架构的弊端 / 17
1.6 微服 架构的模式语言 / 19
1.6.1 微服 架构并不是“ ” / 20
1.6.2 模式 模式语言 / 21
1.6.3 微服 架构的模式语言概述 / 24
1.7 微服 上:流程 组织 / 29
1.7.1 行软 开发 交付的组织 / 30
1.7.2 行软 开发 交付的流程 / 31
1.7.3 采用微服 架构时的人为因素 / 32
2章 服 的拆分策略 / 34
2.1 微服 架构到底是什么 / 35
2.1.1 软 架构是什么,为什么它如此重要 / 35
2.1.2 什么是架构的 格 / 37
2.1.3 微服 架构是一 架构 格 / 40
2.2 为应用程序定义微服 架构 / 43
2.2.1 识别 统 作 / 45
2.2.2 据业 能力 行服 拆分 / 50
2.2.3 据子域 行服 拆分 / 53
2.2.4 拆分的指导原则 / 54
2.2.5 拆分单体应用为服 的难点 / 56
2.2.6 定义服 API / 59
3章 微服 架构中的 程间通* / 63
3.1 微服 架构中的 程间通*概述 / 64
3.1.1 交互方式 / 64
3.1.2 在微服 架构中定义API / 66
3.1.3 API的演化 / 67
3.1.4 息的格式 / 69
3.2 基于同步远程过程调用模式的通* / 70
3.2.1 使用REST / 71
3.2.2 使用gRPC / 74
3.2.3 使用断路 模式处理局部 障 / 75
3.2.4 使用服 发现 / 78
3.3 基于异步 息模式的通* / 82
3.3.1 什么是 息传递 / 83
3.3.2 使用 息 实现交互方式 / 84
3.3.3 为基于 息 的服 API创建API 范 / 86
3.3.4 使用 息 理 / 87
3.3.5 处理并发 息顺序 / 91
3.3.6 处理重复 息 / 92
3.3.7 事 * 息 / 93
3.3.8 息相关的类库 框架 / 97
3.4 使用异步 息提高可用* / 99
3.4.1 同步 息会降低可用* / 99
3.4.2 除同步交互 / 101
4章 使用Saga管理事 / 106
4.1 微服 架构下的事 管理 / 107
4.1.1 微服 架构对分布式事 的需求 / 108
4.1.2 分布式事 的挑 / 109
4.1.3 使用Saga模式维护数据一致* / 109
4.2 Saga的 调模式 / 113
4.2.1 同式Saga / 113
4.2.2 编排式Saga / 117
4.3 决隔离问题 / 121
4.3.1 缺乏隔离导致的问题 / 122
4.3.2 Saga模式下实现隔离的对策 / 123
4.4 Order Service Cre*e Order Saga的设计/ 127
4.4.1 OrderService类/ 128
4.4.2 Cre*e Order Saga的实现/ 129
4.4.3 OrderCom*ndHandle*类/ 136
4.4.4 OrderServiceConfigur*ion类 / 138
5章 微服 架构中的业 逻辑设计 / 141
5.1 业 逻辑组织模式 / 142
5.1.1 使用事 本模式设计业 逻辑 / 143
5.1.2 使用 域模型模式设计业 逻辑 / 144
5.1.3 关于 域驱*设计 / 146
5.2 使用聚合模式设计 域模型 / 146
5.2.1 模糊边界所带来的问题 / 147
5.2.2 聚合拥有明确的边界 / 149
5.2.3 聚合的 则 / 150
5.2.4 聚合的颗粒度 / 152
5.2.5 使用聚合设计业 逻辑 / 153
5.3 发布 域事 / 154
5.3.1 为什么需要发布变更事 / 154
5.3.2 什么是 域事 / 155
5.3.3 事 增 / 155
5.3.4 识别 域事 / 156
5.3.5 *成 发布 域事 / 157
5.3.6 费 域事 / 161
5.4 Kitchen Service的业 逻辑 / 162
5.5 Order Service的业 逻辑 / 167
5.5.1 Order聚合 / 169
5.5.2 OrderService类/ 173
6章 使用事 溯源开发业 逻辑 / 176
6.1 使用事 溯源开发业 逻辑概述 / 177
6.1.1 传统持久化技术的问题 / 177
6.1.2 什么是事 溯源 / 179
6.1.3 使用乐观锁处理并发更新 / 186
6.1.4 事 溯源 发布事 / 186
6.1.5 使用快 提升*能 / 188
6.1.6 幂等方式的 息处理 / 189
6.1.7 域事 的演化 / 190
6.1.8 事 溯源的好处 / 192
6.1.9 事 溯源的弊端 / 193
6.2 实现事 存储库 / 194
6.2.1 Eventu*e Local事 存储库的 作原理 / 195
6.2.2 Eventu*e的Java 户端框架 / 198
6.3 同时使用Saga 事 溯源 / 201
6.3.1 使用事 溯源实现 同式Saga / 203
6.3.2 创建编排式Saga / 203
6.3.3 实现基于事 溯源的Saga参与方/ 205
6.3.4 实现基于事 溯源的Saga编排 / 208
7章 在微服 架构中实现查询 / 212
7.1 使用API组合模式 行查询 / 213
7.1.1 findOrder查询 作 / 213
7.1.2 什么是API组合模式 / 214
7.1.3 使用API组合模式实现findOrder查询 作 / 215
7.1.4 API组合模式的设计缺陷 / 216
7.1.5 API组合模式的好处 弊端 / 219
7.2 使用CQRS模式/ 220
7.2.1 为什么要使用CQRS / 220
7.2.2 什么是CQRS / 223
7.2.3 CQRS的好处 / 226
7.2.4 CQRS的弊端 / 227
7.3 设计CQRS视图/ 228
7.3.1 择视图存储库 / 229
7.3.2 设计数据访问模块 / 230
7.3.3 添加 更新CQRS视图/ 232
7.4 实现基于AWS DynamoDB的CQRS视图 / 233
7.4.1 OrderHistoryEventHandle*模块/ 234
7.4.2 DynamoDB中的数据建模 查询设计 / 235
7.4.3 OrderHistoryD*DynamoDb类/ 239
8章 部API模式/ 244
8.1 部API的设计难题 / 245
8.1.1 FTGO移* 户端API的设计难题 / 246
8.1.2 其 类型 户端API的设计难题 / 248
8.2 API G*eway模式/ 250
8.2.1 什么是API G*eway模式/ 250
8.2.2 API G*eway模式的好处 弊端 / 256
8.2.3 以Netflix为例的API G*eway / 257
8.2.4 API G*eway的设计难题 / 258
8.3 实现一个API G*eway / 260
8.3.1 使用现成的API G*eway产品或服 / 261
8.3.2 开发自己的API G*eway / 262
8.3.3 使用GraphQL实现API G*eway / 269
9章 微服 架构中的测试策略(上) / 282
9.1 微服 架构中的测试策略概述 / 284
9.1.1 什么是测试 / 284
9.1.2 微服 架构中的测试挑 / 289
9.1.3 部署流*线 / 295
9.2 为服 编写单元测试 / 296
9.2.1 为实体编写单元测试 / 298
9.2.2 为值对象编写单元测试 / 299
9.2.3 为Saga编写单元测试 / 300
9.2.4 为 域服 编写单元测试 / 302
9.2.5 为控 编写单元测试 / 303
9.2.6 为事 息处理程序编写单元测试 / 305
10章 微服 架构中的测试策略(下) / 308
10.1 编写 成测试 / 308
10.1.1 针对持久化层的 成测试 / 311
10.1.2 针对基于REST的请求/响应式交互的 成测试 / 312
10.1.3 针对发布/订阅式交互的 成测试 / 316
10.1.4 针对异步请求/响应式交互的 成契 测试 / 320
10.2 编写组 测试 / 324
10.2.1 定义验收测试 / 325
10.2.2 使用Gherkin编写验收测试 / 326
10.2.3 设计组 测试 / 328
10.2.4 为FTGO的Order Service编写组 测试 / 330
10.3 端到端测试 / 334
10.3.1 设计端到端测试 / 335
10.3.2 编写端到端测试 / 335
10.3.3 运行端到端测试 / 336
11章 开发面向*产环境的微服 应用 / 338
11.1 开发安全的服 / 339
11.1.1 传统单体应用程序的安全* / 340
11.1.2 在微服 架构中实现安全* / 343
11.2 设计可配置的服 / 349
11.2.1 使用基于推送的 部化配置 / 350
11.2.2 使用基于拉取的 部化配置 / 352
11.3 设计可观测的服 / 353
11.3.1 使用健康检查API模式/ 355
11.3.2 使用*志聚合模式 / 357
11.3.3 使用分布式追踪模式 / 358
11.3.4 使用应用程序指标模式 / 361
11.3.5 使用异常追踪模式 / 364
11.3.6 使用审计*志模式 / 365
11.4 使用微服 基底模式开发服 / 367
11.4.1 使用微服 基底 / 368
11.4.2 从微服 基底到服 *格 / 368
12章 部署微服 应用 / 371
12.1 部署模式:编程语言 定的发布 格式 / 374
12.1.1 使用编程语言 定的发布 格式 行部署的好处 / 376
12.1.2 使用编程语言 定的发布 格式 行部署的弊端 / 377
12.2 部署模式:将服 部署为虚拟 / 378
12.2.1 将服 部署为虚拟 的好处 / 380
12.2.2 将服 部署为虚拟 的弊端 / 380
12.3 部署模式:将服 部署为容 / 381
12.3.1 使用Docker部署服 / 383
12.3.2 将服 部署为容 的好处 / 385
12.3.3 将服 部署为容 的弊端 / 386
12.4 使用Kuberes部署FTGO应用程序 / 386
12.4.1 什么是Kuberes / 386
12.4.2 在Kuberes上部署Restaurant Service / 389
12.4.3 部署API G*eway / 392
12.4.4 零停 部署 / 393
12.4.5 使用服 *格分隔部署与发布流程 / 394
12.5 部署模式:Serverless部署/ 402
12.5.1 使用AWS Lambda 行Serverless部署/ 403
12.5.2 开发Lambda函数/ 404
12.5.3 调用Lambda函数/ 404
12.5.4 使用Lambda函数的好处 / 405
12.5.5 使用Lambda函数的弊端 / 406
12.6 使用AWS Lambda AWS G*eway部署RESTful服 / 406
12.6.1 AWS Lambda版本的Restaurant Service / 407
12.6.2 把服 打 为ZIP* / 411
12.6.3 使用Serverless框架部署Lambda函数/ 412
13章 微服 架构的重构策略 / 415
13.1 重构到微服 需要 虑的问题 / 416
13.1.1 为什么要重构单体应用 / 416
13.1.2 绞 单体应用 / 417
13.2 将单体应用重构为微服 架构的若干策略 / 420
13.2.1 将新 能实现为服 / 420
13.2.2 隔离表现层与后端 / 422
13.2.3 提取业 能力到服 中 / 423
13.3 设计服 与单体的 作方式 / 429
13.3.1 设计 成胶* / 430
13.3.2 在服 单体 间维持数据一致* / 434
13.3.3 处理 份验 访问授权 / 438
13.4 将新 能实现为服 :处理错误配送订单 / 440
13.4.1 Delayed Delivery Service的设计/ 441
13.4.2 为Delayed Delivery Service设计 成胶* / 442
13.5 从单体中提取送餐管理 能 / 444
13.5.1 现有的送餐管理 能 / 444
13.5.2 Delivery Service概览/ 446
13.5.3 设计Delivery Service的 域模型 / 447
13.5.4 Delivery Service 成胶*的设计 / 450
13.5.5 修改FTGO单体使其能够与Delivery Service交互/ 451
作者介绍
克 斯·理查森(ChrisRichardson)
界十 软 架构师 一,《POJOSin A*ion》等技术名 的作者,也是开源项目 Cloud Foundry Eventu*e 的创 人。 的研究 域 括微服 架构设计、分布式数据管理、事 驱*的应用架构、 域驱*设计、持续交付、Spring 框架、Scala、NoSQL数据库等。
喻勇
在技术圈 骋多年,曾担任过微软技术布 师,VMware Cloud Foundry *态建设负责人,并有幸了容 技术的创业浪 。目前定居加拿 ,关注微服 架构、云原*应用等 域。
Chris 与喻勇曾在 VMware 全球开发者关 团队 事多年,现在 们合作为企业 户提*微服 相关的咨询 训服 , 们的中**站是:.chrisrichardson.
*摘
序言