内容简介 · · · · · ·
本书是系统架构领域经典参考书的升级版,由业内资深专家萨姆·纽曼(Sam Newman)撰写。 过去10年,随着微服务的普及,大量组织从单体应用迁移到了微服务应用,分布式系统变得愈加精细化,然而,这个过程中也出现了一系列问题。本书深入探讨了构建、管理、扩展和演进微服务架构时需要考虑的方方面面。内容分为三部分:第一部分“基础”(第1章~第4章),详细阐述微服务背后的核心思想;第二部分“实现”(第5章~第13章),带你转向具体实现细节,通过各种技术和方法最大程度地用好微服务;第三部分“人和组织”(第14章~第16章),具体阐述离开人和组织的支持,理念和技术将毫无意义。通过学习本书,你将深入了解对微服务的建模、集成、测试、部署和监控等方向最新的解决方案。 第2版进行了全面更新:新增了微服务构建和部署、无服务器计算及云原生应用等主题,扩充了进程间通信等内容。此...
本书是系统架构领域经典参考书的升级版,由业内资深专家萨姆·纽曼(Sam Newman)撰写。 过去10年,随着微服务的普及,大量组织从单体应用迁移到了微服务应用,分布式系统变得愈加精细化,然而,这个过程中也出现了一系列问题。本书深入探讨了构建、管理、扩展和演进微服务架构时需要考虑的方方面面。内容分为三部分:第一部分“基础”(第1章~第4章),详细阐述微服务背后的核心思想;第二部分“实现”(第5章~第13章),带你转向具体实现细节,通过各种技术和方法最大程度地用好微服务;第三部分“人和组织”(第14章~第16章),具体阐述离开人和组织的支持,理念和技术将毫无意义。通过学习本书,你将深入了解对微服务的建模、集成、测试、部署和监控等方向最新的解决方案。 第2版进行了全面更新:新增了微服务构建和部署、无服务器计算及云原生应用等主题,扩充了进程间通信等内容。此外,新版贯穿了更多业界经典案例,提供了更多代码示例,帮助大家落地微服务。
本书面向架构师、开发人员、测试人员和IT运维人员等各类对微服务感兴趣的读者。
编辑推荐
1-【经典】软件架构领域经典,Amazon 4.8 星好评
2-【全新】第2版全新升级,内容更新率超过 70%
3-【易读】内容通俗易懂,180 张图剖析微服务设计
4-【专业】作者为微服务先驱,译者为微服务实践者
5-【实战】聚焦微服务痛点,打造高可用分布式架构
6-【面广】多行业案例,涵盖电子商务、金融、广告、支付等
7-【力荐】Martin Fowler 领衔推荐,国内外一线专家联袂推荐
作者简介 · · · · · ·
萨姆·纽曼(Sam Newman)
微服务先驱 · Thoughtworks前系统架构师 · 独立咨询师
深耕行业20多年,聚焦微服务、云和持续交付,致力于帮助企业更迅速、可靠地交付软件,合作客户遍布全球。畅销技术书作者,著有《微服务设计》《重构到微服务》。
目录 · · · · · ·
第一部分 基础
第1章 追根问底微服务 3
1.1 微服务概述 3
1.2 微服务的关键概念 5
1.2.1 可独立部署 5
1.2.2 围绕业务领域建模 6
1.2.3 状态自主 7
1.2.4 服务大小 7
1.2.5 灵活性 8
1.2.6 架构和组织的一致性 8
1.3 单体 11
1.3.1 单进程单体 12
1.3.2 模块化单体 12
1.3.3 分布式单体 13
1.3.4 单体和交付争用 14
1.3.5 单体的优势 14
1.4 技术能力 14
1.4.1 日志聚合和分布式追踪 15
1.4.2 容器和Kubernetes 16
1.4.3 流技术 16
1.4.4 公有云和无服务器技术 17
1.5 微服务的优势 17
1.5.1 技术的异构性 17
1.5.2 健壮性 18
1.5.3 扩展性 19
1.5.4 部署的便捷性 20
1.5.5 组织协调 20
1.5.6 可组合性 20
1.6 微服务的痛点 20
1.6.1 开发者体验 21
1.6.2 技术过载 21
1.6.3 成本 21
1.6.4 生成报表 22
1.6.5 监控和故障排除 23
1.6.6 安全 23
1.6.7 测试 23
1.6.8 延迟 23
1.6.9 数据一致性 24
1.7 我应该采用微服务吗 24
1.7.1 不适用情况 24
1.7.2 适用情况 25
1.8 小结 26
第2章 微服务建模 27
2.1 MusicCorp简介 27
2.2 合理划分微服务边界 28
2.2.1 信息隐藏 28
2.2.2 内聚 29
2.2.3 耦合 29
2.2.4 内聚和耦合的相互作用 30
2.3 耦合的类型 30
2.3.1 领域耦合 31
2.3.2 传递耦合 33
2.3.3 公共耦合 36
2.3.4 内容耦合 39
2.4 恰到好处的领域驱动设计 40
2.4.1 通用语言 40
2.4.2 聚合 41
2.4.3 限界上下文 43
2.4.4 将聚合及限界上下文映射到微服务 45
2.4.5 事件风暴 46
2.5 DDD在微服务环境中的应用案例 47
2.6 领域边界的替代方法 48
2.6.1 易变性 48
2.6.2 数据 49
2.6.3 技术 50
2.6.4 组织 51
2.7 混合模型和例外 53
2.8 小结 53
第3章 拆分大单体 54
3.1 明确目标 54
3.2 增量迁移 55
3.3 单体并不是威胁 55
3.4 先拆分什么 56
3.5 按层拆分 58
3.5.1 代码优先 58
3.5.2 数据优先 59
3.6 有用的拆分模式 60
3.6.1 绞杀者模式 60
3.6.2 并行运行模式 61
3.6.3 功能开关模式 61
3.7 拆分数据库的注意事项 61
3.7.1 性能 61
3.7.2 数据完整性 63
3.7.3 事务 63
3.7.4 工具 64
3.7.5 报表数据库 64
3.8 小结 65
第4章 微服务间通信模式 66
4.1 从进程内到进程间 66
4.1.1 性能 66
4.1.2 接口变更 67
4.1.3 错误处理 67
4.2 进程内的通信技术:选择众多 69
4.3 微服务间的通信模式 69
4.4 同步阻塞模式 70
4.4.1 优点 71
4.4.2 缺点 71
4.4.3 适用情况 71
4.5 异步非阻塞模式 73
4.5.1 优点 73
4.5.2 缺点 74
4.5.3 适用情况 75
4.6 共用数据模式 75
4.6.1 实现 75
4.6.2 优点 76
4.6.3 缺点 76
4.6.4 适用情况 77
4.7 请求–响应模式 77
4.7.1 实现:同步与异步 78
4.7.2 适用情况 80
4.8 事件驱动模式 80
4.8.1 实现 82
4.8.2 事件 82
4.8.3 适用情况 85
4.9 谨慎行事 85
4.10 小结 87
第二部分 实现
第5章 实现微服务间通信 91
5.1 寻找理想的技术 91
5.1.1 轻松实现向后兼容 91
5.1.2 明确你的接口 91
5.1.3 保持API的技术中立 92
5.1.4 简化提供给消费者的服务 92
5.1.5 隐藏内部实现细节 92
5.2 技术选型 92
5.2.1 远程过程调用 93
5.2.2 REST 96
5.2.3 GraphQL 99
5.2.4 消息代理 101
5.3 序列化格式 104
5.3.1 文本格式 104
5.3.2 二进制格式 105
5.4 模式 105
5.4.1 结构性破坏和语义性破坏 106
5.4.2 是否应该使用模式 106
5.5 处理微服务间的变更 107
5.6 避免破坏性变更 107
5.6.1 扩展式更改 108
5.6.2 兼容的消费者 108
5.6.3 合适的技术 109
5.6.4 显式接口 109
5.6.5 尽早发现破坏性变更 110
5.7 管理破坏性变更 111
5.7.1 同步部署 111
5.7.2 共存不兼容的微服务版本 111
5.7.3 模拟旧接口 112
5.7.4 推荐的方法 113
5.7.5 社会契约 114
5.7.6 追踪使用情况 114
5.7.7 极端措施 114
5.8 DRY和微服务架构中的代码复用风险 115
5.9 服务发现 117
5.9.1 域名系统 117
5.9.2 动态服务注册 118
5.9.3 不要忘记人类 120
5.10 服务网格和API网关 120
5.10.1 API 网关 121
5.10.2 服务网格 123
5.10.3 其他协议 126
5.11 文档服务 126
5.11.1 显式模式 126
5.11.2 自描述系统 127
5.12 小结 129
第6章 工作流 131
6.1 数据库事务 131
6.1.1 ACID事务 131
6.1.2 还是ACID事务,但缺乏原子性支持吗 132
6.2 分布式事务:两阶段提交 134
6.3 分布式事务:只需说“不” 136
6.4 Saga 137
6.4.1 Saga故障模式 138
6.4.2 实现Saga 142
6.4.3 Saga与分布式事务 146
6.5 小结 147
第7章 构建 148
7.1 持续集成简介 148
7.1.1 你真的在实践持续集成吗 149
7.1.2 分支模型 149
7.2 构建流水线和持续交付 151
7.2.1 工具 152
7.2.2 权衡与环境 153
7.2.3 构建制品 153
7.3 将源代码和构建映射到微服务 155
7.3.1 一个巨大的代码库,一次巨大的构建 155
7.3.2 多代码库 156
7.3.3 单一代码库 159
7.3.4 我会使用哪种方式 163
7.4 小结 164
第8章 部署 165
8.1 从逻辑到物理 165
8.1.1 多实例 166
8.1.2 数据库 167
8.1.3 环境 170
8.2 微服务部署原则 172
8.2.1 隔离执行 172
8.2.2 专注于自动化 175
8.2.3 基础设施即代码 176
8.2.4 零停机部署 176
8.2.5 期望状态管理 177
8.3 部署选项 179
8.3.1 物理机 180
8.3.2 虚拟机 180
8.3.3 容器 182
8.3.4 应用容器 186
8.3.5 平台即服务(PaaS) 187
8.3.6 函数即服务(FaaS) 188
8.4 哪种部署方式适合你 193
8.5 Kubernetes与容器编排 195
8.5.1 容器编排案例 195
8.5.2 Kubernetes概念的简化视图 196
8.5.3 多租户和联邦 198
8.5.4 云原生计算基金会 200
8.5.5 平台和可移植性 200
8.5.6 Helm、Operator与CRD 201
8.5.7 Knative 201
8.5.8 未来 202
8.5.9 你应该使用它吗 202
8.6 渐进式交付 203
8.6.1 分离部署与发布 203
8.6.2 渐进式交付 204
8.6.3 功能开关 204
8.6.4 金丝雀发布 204
8.6.5 并行运行 205
8.7 小结 206
第9章 测试 207
9.1 测试类型 207
9.2 测试范围 209
9.2.1 单元测试 210
9.2.2 服务测试 211
9.2.3 端到端测试 212
9.2.4 权衡 212
9.3 实现服务测试 213
9.3.1 mock还是打桩 213
9.3.2 更智能的打桩服务 214
9.4 微妙的端到端测试 215
9.4.1 脆弱的测试 216
9.4.2 谁来写测试 217
9.4.3 测试应该运行的时间 218
9.4.4 大量的堆积 219
9.4.5 元版本 219
9.4.6 缺乏独立可测试性 219
9.5 应该放弃端到端测试吗 220
9.5.1 契约测试和消费者驱动的契约 220
9.5.2 一点补充 222
9.6 开发者体验 223
9.7 从预发布环境测试到生产环境测试 223
9.7.1 生产环境测试的类型 224
9.7.2 确保生产环境测试的安全性 224
9.7.3 平均故障间隔时间和平均修复时间的权衡 225
9.8 跨功能测试 225
9.8.1 性能测试 226
9.8.2 健壮性测试 227
9.9 小结 227
第10章 从监控到可观测性 229
10.1 混乱、恐慌和困惑 229
10.2 单个微服务,单个服务器 230
10.3 单个微服务,多个服务器 231
10.4 多个微服务,多个服务器 232
10.5 可观测性与监控 233
10.6 构建可观测性的组件 234
10.6.1 日志聚合 235
10.6.2 指标聚合 241
10.6.3 分布式追踪 243
10.6.4 我们做得如何 245
10.6.5 警报 247
10.6.6 语义监控 250
10.6.7 生产环境测试 251
10.7 标准化 253
10.8 选择工具 253
10.8.1 大众化 253
10.8.2 易于集成 253
10.8.3 提供上下文 254
10.8.4 实时性 254
10.8.5 恰如其分 254
10.9 机器专家 255
10.10 起点 255
10.11 小结 256
第11章 安全 258
11.1 核心原则 259
11.1.1 最小权限原则 259
11.1.2 深度防御 259
11.1.3 自动化 261
11.1.4 在交付过程中构建安全性 261
11.2 五大网络安全功能 262
11.2.1 身份识别 262
11.2.2 保护 263
11.2.3 检测 263
11.2.4 响应 263
11.2.5 恢复 264
11.3 应用安全的基础 264
11.3.1 凭证 264
11.3.2 打补丁 269
11.3.3 备份 271
11.3.4 重建 271
11.4 隐式信任与零信任 272
11.4.1 隐式信任 272
11.4.2 零信任 273
11.4.3 这是个范围 273
11.5 数据保护 275
11.5.1 传输中的数据 275
11.5.2 静态数据 277
11.6 身份验证和鉴权 279
11.6.1 服务间验证 279
11.6.2 用户的身份验证 279
11.6.3 常见的单点登录实现 280
11.6.4 单点登录网关 281
11.6.5 细粒度鉴权 282
11.6.6 混淆代理人问题 282
11.6.7 中心化上游鉴权 284
11.6.8 去中心化鉴权 284
11.6.9 JWT 284
11.7 小结 287
第12章 弹性 288
12.1 弹性介绍 288
12.1.1 健壮性 289
12.1.2 可恢复性 290
12.1.3 优雅的可扩展性 290
12.1.4 持续适应性 290
12.1.5 代入微服务架构 291
12.2 故障无处不在 291
12.3 多少才算多 292
12.4 功能降级 293
12.5 稳定性模式 293
12.5.1 超时 295
12.5.2 重试 297
12.5.3 舱壁 297
12.5.4 断路器 298
12.5.5 隔离 300
12.5.6 冗余 301
12.5.7 中间件 301
12.5.8 幂等 302
12.6 分散风险 303
12.7 CAP定理 304
12.7.1 牺牲一致性 305
12.7.2 牺牲可用性 305
12.7.3 牺牲分区容错性 306
12.7.4 AP还是CP 306
12.7.5 全部和全不并不是二选一 306
12.7.6 现实世界 307
12.8 混沌工程 307
12.8.1 演练日 308
12.8.2 生产实验 308
12.8.3 超越健壮性 309
12.9 问责 309
12.10 小结 310
第13章 扩展性 312
13.1 扩展性的4个维度 312
13.1.1 纵向扩容 313
13.1.2 横向复制 314
13.1.3 数据分区 317
13.1.4 功能拆分 320
13.2 组合模型 322
13.3 从小处着手 323
13.4 缓存 324
13.4.1 用于提高性能 324
13.4.2 用于提高扩展性 325
13.4.3 用于提高健壮性 325
13.4.4 将缓存设置在哪里 325
13.4.5 让缓存失效 329
13.4.6 缓存的黄金法则 333
13.4.7 新鲜度与优化程度 333
13.4.8 缓存中毒:一个需要警惕的故事 334
13.5 自动扩展 334
13.6 重新出发 335
13.7 小结 336
第三部分 人和组织
第14章 用户界面 339
14.1 迈向数字化 339
14.2 集中所有权模型 340
14.3 业务流团队 342
14.3.1 共享专家 343
14.3.2 确保一致性 343
14.3.3 持续应对技术的挑战 344
14.4 单体前端模式 345
14.5 微前端模式 346
14.5.1 实施视角 346
14.5.2 应用时机 346
14.6 基于页面的拆分模式 347
14.7 基于部件的拆分模式 349
14.7.1 实施视角 350
14.7.2 应用时机 352
14.8 约束 353
14.9 中心聚合网关模式 353
14.9.1 归属权 355
14.9.2 不同类型的用户界面 355
14.9.3 热点问题 356
14.9.4 应用时机 357
14.10 服务于前端的后端模式 357
14.10.1 如何确定BFF的数量 358
14.10.2 BFF如何应对复用问题 361
14.10.3 BFF在桌面Web和更多场景中的应用 363
14.10.4 应用时机 364
14.11 GraphQL 364
14.12 模式的混合应用 366
14.13 小结 366
第15章 组织结构 367
15.1 低耦合组织结构 367
15.2 康威定律 368
15.3 团队规模 370
15.4 理解康威定律 370
15.5 小团队,大组织 371
15.6 关注团队自治 372
15.7 强所有权与集体所有权 373
15.7.1 强所有权 373
15.7.2 集体所有权 374
15.7.3 团队层面与组织层面 375
15.7.4 模式之间的平衡 375
15.8 赋能团队 376
15.8.1 实践社区 377
15.8.2 平台 378
15.9 共享微服务 380
15.9.1 难以划分 380
15.9.2 跨领域的变更 380
15.9.3 交付瓶颈 381
15.10 内部开源 381
15.10.1 核心提交者的作用 382
15.10.2 成熟度 382
15.10.3 工具支撑 382
15.11 可插拔式模块化微服务 382
15.12 孤儿服务 387
15.13 案例研究:Real Estate网站 387
15.14 地域分布 388
15.15 逆康威定律 389
15.16 人 390
15.17 小结 391
第16章 演进式架构师 392
16.1 名字的意义 392
16.2 什么是软件架构 394
16.3 让改变成为可能 395
16.4 架构师的可演进愿景 395
16.5 定义系统边界 396
16.6 一种社会结构 398
16.7 宜居性 399
16.8 原则方法 400
16.8.1 战略目标 400
16.8.2 原则 400
16.8.3 实践 401
16.8.4 原则与实践相结合 401
16.8.5 一个真实的例子 401
16.9 演进式架构 402
16.10 业务流组织中的架构 403
16.11 组建团队 405
16.12 必要标准 405
16.12.1 可监控性 405
16.12.2 接口 406
16.12.3 架构安全性 406
16.13 治理并铺路 406
16.13.1 榜样的力量 407
16.13.2 定制的微服务模板 407
16.13.3 将铺好的路规模化 408
16.14 技术债务 408
16.15 异常处理 409
16.16 小结 409
后记:全景概述 411
参考资料 421
术语表 425
· · · · · · (收起)
原文摘录 · · · · · · ( 全部 )
-
聚在一起,就如何做事情达成共识是一个好主意。但是,花时间保证人们按照这个共识来做事情就没那么有趣了,因为在各个服务中使用这些标准做法会成为开发人员的负担。我坚信应该使用简单的方式把事情做对。我见过比较奏效的两种方式是,提供范例和服务代码模板。 (查看原文) —— 引自章节:代码治理 -
编写文档是有用的,... 但是开发人员更喜欢可以查看和运行的代码。 创建服务代码模板不是某个中心化工具的职责,也不是指导我们应怎样工作的架构团队的职责。应该通过合作的方式定义出这些实践,所以你的团队也需要负责更新这个模板。 我也见过一个团队的士气和生产力是如何被强制使用的框架给毁掉的。基于代码重用的目的,越来越多的功能被加入到一个中心化的框架中,直到把这个框架变成一个不堪重负的怪兽。 你还需要知道,重用代码可能引入的危险。在重用代码的驱动下,我们可能会引入服务之间的耦合。... 一些我接触过的团队,把服务代码模板简单地做成了一个共享的库依赖,这时他们就要非常小心地防止对 DRY 的追求导致系统过度耦合。 (查看原文) —— 引自章节:代码治理
> 全部原文摘录
喜欢读"微服务设计(第2版)"的人也喜欢的电子书 · · · · · ·
喜欢读"微服务设计(第2版)"的人也喜欢 · · · · · ·
微服务设计(第2版)的书评 · · · · · · ( 全部 22 条 )


微服务改造——拥有技术信仰团队的系统级重构

大咖经验分享,十足干货
这篇书评可能有关键情节透露
在中亚买了这本电子书,越看越喜欢,很对路的感觉,一个星期内利用上下班坐车时间看完了。 作为专业书,全书没有一行代码,这是非常难的的,但有比代码更复杂和深沉的思考。如果你没有做过类似系统,或没有从系统架构弹性的思维角度去考虑系统的组织和设计,对书中的很多内容... (展开)
阅历太浅不适合读此书么?

阅历太浅不适合读此书么?


很有广度的一本介绍微服务的书

一场与单体服务的战争
> 更多书评 22篇
论坛 · · · · · ·
在这本书的论坛里发言这本书的其他版本 · · · · · · ( 全部5 )
-
人民邮电出版社 (2016)8.1分 1043人读过
-
O'Reilly Media (2014)7.9分 118人读过
-
O'Reilly Media (2021)暂无评分 16人读过
-
歐萊禮 (2016)暂无评分
以下书单推荐 · · · · · · ( 全部 )
- 计算机科学 (Bruce Wayne)
- 企业级IT技术 (Snake)
- 2025待读清单 (MR.曌)
- Better Coding (离离原上草)
- 书单|微服务和先进架构 (psx)
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有91人想读,手里有一本闲着?
订阅关于微服务设计(第2版)的评论:
feed: rss 2.0
1 有用 哈哈公子Liu 2024-08-01 21:02:32 湖南
很详实的一本书,初学者可以入门但难悟道,适合有一定项目经验的来看
0 有用 Green 2025-02-16 15:45:19 北京
比较务虚的一本书,前边还有介绍一些基本概念和基本方法,后边就有点发散了…可能自己阅历浅吧,不过感觉不如专门介绍一种技术来的实用。
0 有用 YellowStar5 2025-05-03 20:32:59 浙江
写的挺全面,关键还是得自己多实践
1 有用 杨逸 2024-05-03 16:33:05 上海
相对于第一版大升级。首先涉及到了微服务的方方面面,从开发到部署,甚至到团队建设。第二深度比第一版深入很多,讲了非常多各个场景的技术选择,什么时候用哪种更合适,局限性是什么,不会像推销一样只谈好处。最后书里面有挺多不错的洞见,比如基于主干开发为什么比gitflow适合日常开发。
1 有用 图灵社区 2024-05-14 16:14:47 北京
系统架构圣经! 详解微服务的基本概念,帮你打下坚实的理论基础。 系统建模指南,教你如何合理划分服务边界,实现高效协作。 集成、测试、部署——全面覆盖微服务的关键环节。