商品详情
书名:分布式系统应用设计(第二版)
书号:9787523907412
定价:68元
作者:[美]布伦丹·伯恩斯(Brendan Burns)
出版时间:2026-01-28
出版社:中国电力出版社
页码: 220 字数(千字):216
开本:16开 版次:1 印次:1
品牌介绍
中国电力出版社成立于 1951 年,作为中国成立最早的中央科技出版社之一,曾隶属于水利电力部、能源部、电力工业部、国家电力公司,现为国家电网公司所属的科技出版社,在电气技术专业出版领域享有极高的声誉。该社作为以图书出版为主体,音像、电子出版物、期刊、网络出版共同发展的大型出版企业,以强大的出版资源和高素质的专业队伍,致力于向读者提供包括电力工程、电气工程、建筑工程、电子技术、信息技术、外语、大中专教材、家教等学科门类齐全的权威出版物,也竭力为广大师生提供精品教材,是教育部和北京市教委规划教材的出版基地之一。
编辑推荐
一句话推荐
基于Kubernetes构建可扩展、可靠系统的模式与范式。
专家推荐
“学习分布式系统充满了挑战,但Brendan Burns通过引入标准化、易于理解和使用的模式,使这项任务变得更安全、更简单、更易于掌握。”
——Anne Currie,Strategically Green Learning and Development首席执行官,《Building Green Software》作者
编辑推荐
每个分布式系统都追求可靠性、性能与质量,但构建这样的系统充满挑战。建立一套设计模式能让软件开发者和系统架构师使用通用语言描述系统,并从他人开发的模式与实践中汲取经验。
容器与Kubernetes的普及为核心分布式系统模式和可复用的容器化组件铺平了道路。本实践指南汇集了一系列可复用的通用模式,通过借鉴当今性能最佳的分布式系统中采用的通用模式与实践,为构建系统提供指导。即使你从未构建过分布式系统,这些通用模式也能使你构建的系统更易于上手且更高效。
本书作者展示了如何改造现有软件设计模式来设计与构建可靠的分布式应用。系统工程师和应用开发者将了解这些久经考验的模式如何通过提供通用的语言和框架,显著提升系统质量。
本次全面更新的第二版新增了关于AI推理、AI训练,以及构建面向现实世界的健壮系统的章节。
产品特色
本书是介绍分布式系统概要的绝好读本,它可以指导开发者高效地构建最新的分布式系统,并通过Kubernetes编排系统与其他云原生应用很好的结合起来,共同搭建起系统总体架构。
作者介绍
Brendan Burns现任微软公司副总裁,负责Azure管理与治理、Azure Arc、Azure Kubernetes服务、Azure Linux服务,以及PowerShell等核心业务。
内容介绍
本书的主要内容有:理解模式与可复用组件如何助力快速开发可靠的分布式系统。通过边车模式、适配器模式和大使模式,将应用程序拆分为单机上的容器组。探索用于组件间复制、扩展与通信的松耦合多节点分布式模式。学习适用于批处理工作队列、事件驱动处理及协调式工作流的大规模批数据处理分布式模式。
前言
前言
目标读者
当今时代,几乎所有开发者都在开发或使用(甚至两者皆有)分布式系统。即便是相对简单的移动应用,其背后也依赖云端API 来实现跨设备数据同步。无论你是分布式系统开发的新手,还是身经百战的专家,本书所阐述的模式与组件都能将分布式系统开发从经验导向的艺术转化为系统化的科学。通过可复用的分布式系统组件与模式,你可以将精力集中于应用程序的核心逻辑开发。本书将助力所有开发者更高效、更敏捷地构建优质分布式系统。
创作缘起
在我的职业生涯中,从网页搜索引擎到云计算平台,我构建过众多可扩展、高可靠的分布式系统。这些系统大多是从零开始搭建的,这种现象在分布式应用领域普遍存在。尽管这些系统共享诸多相似概念甚至近乎相同的逻辑,但模式复用与组件复用的实现却始终充满挑战。这种重复劳动不仅耗费大量时间,也导致每个系统难以达到理想的完善程度。
容器技术与容器编排系统的革命性出现,彻底改变了分布式系统开发的格局。我们终于拥有了定义核心分布式系统模式的标准接口和可复用容器化组件。本书旨在为分布式系统实践者搭建共享的知识体系与技术标准库,使我们能够更高效地构建优质系统。
当代分布式系统现状
曾几何时,程序都运行于单机环境并由本地用户直接访问。如今,几乎每个应用程序都是运行在多台机器上,被全球用户访问的分布式系统。尽管这类系统已无处不在,其设计开发过程仍像少数“巫师”掌握的技巧。但随着技术进步,分布式系统领域正在经历规范化、抽象化的演进。本书系统地总结了可复用的通用模式,让可靠的分布式系统的开发变得更加高效可控。通过采用这些模式与组件,开发者得以从重复造轮子的困境中解放,专注于核心业务逻辑的创新。
本书的主要内容
本书分为以下五部分:
第一部分,基础概念
第1 ~ 2 章介绍分布式系统及其核心原理,这些知识是理解第二部分“单节点模式”中系统设计的基础。
第二部分,单节点模式
第3 ~ 5 章系统性解析分布式环境中的可复用单节点组件模式,具体涵盖边车模式、适配器和大使模式三大模式。
第三部分,服务模式
第6 ~ 8 章针对Web 应用等长期运行的服务,深度剖析多节点分布式架构设计,包含基础复制、分片技术、任务共享等核心方案。第9、10 章专题论述函数计算、事件驱动架构及领导人选举等关键分布式概念。
第四部分,批处理计算模式
第11 ~ 13 章聚焦大规模批处理场景,系统阐述工作队列管理、事件驱动批处理与协同工作流编排的分布式实现模式。
第五部分,通用概念
第14 章详解应用日志记录、监控告警体系建设;第15 章全景解析AI 系统基础设施架构;第16 章系统性归纳分布式系统建设中的高频故障模式与典型设计陷阱。
资深工程师可跳过第1 ~ 2 章基础内容,但仍建议快速浏览以掌握模式应用方法论,理解分布式系统模式化设计的核心价值。
单节点模式因其高度通用性,是全书复用价值最高的精华部分。读者可根据实际需求选择学习路径:专注批处理计算模式或长时服务模式(也可并行学习),这两部分在很大程度上彼此独立, 可以按任意顺序阅读。
对于经验丰富的分布式系统开发者,可能会发现前面某些章节( 如第三部分涉及的服务命名、服务发现与负载均衡等内容) 已经非常熟悉,建议概览获取框架性认知,强烈推荐关注书中精心设计的可视化图示。
排版约定
本书采用以下排版约定。
斜体(Italic)
表示新术语、URL、电子邮箱、文件名及文件扩展名。
等宽字体(Constant width)
用于代码清单,以及在段落中引用程序元素(如变量名、函数名、数据库、数据类型、环境变量、语句、关键词等)。
等宽斜体(Constant width italic)
表示需用户替换或由上下文确定的内容。
在线资源
虽然本书描述了普遍适用的分布式系统模式,但希望读者熟悉容器和容器编排系统。如果你对这些知识还不是很了解,我推荐你阅读以下资源:
• Docker(https://docker.io)
• Kubernetes(https://kubernetes.io)
• DC/OS(https://dcos.io)
代码示例
补充材料(代码示例、练习题等)可通过以下地址获取:https://github.com/brendandburns/designing-distributed-systems。
如遇技术问题或代码使用疑问,请发送邮件至support@oreilly.com 获取支持。本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可,销售或分发O’Reilly 图书的示例集则需要获得许可;引用本书中的示例代码回答问题无需获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN,例如:“Designing Distributed Systems by Brendan Burns (O’Reilly). Copyright 2025 Brendan Burns, 978-1-098-15635-0 ”。
如果你觉得自己对示例代码的使用超出了上述许可范围, 请通过permissions@oreilly.com 与我们联系。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
勘误、示例和其他信息可访问https://oreil.ly/designing-distributed-systems-2e获取。
欲了解本社图书和课程的新闻和信息,请访问我们的网站http://oreilly.com。
我们的LinkedIn:https://linkedin.com/company/oreilly-media。
我们的YouTube:https://youtube.com/oreillymedia。
致谢
特别感谢妻子Robin 和孩子们给予的精神支持,感恩成长道路上所有传道授业的良师益友,同时致敬父母赠予我的第一台SE/30 计算机。
我特别感谢技术审校团队为本书质量提升做出的卓越贡献:
• Dinesh Reddy Chittibala
• Anne Currie
• Chris Devers
• Werner Dijkerman
• Sukanya Moorthy
• Lalithkumar Prakashchand
• William Jamir Silva
• Rajeev Reddy Vishaka
最后,感谢O’Reilly 编辑团队及首版读者的建设性反馈,正是这些宝贵意见铸就了本书的不断完善。
目录
目录
前言 1
第一部分 基础概念
第1 章 概述 9
1.1 系统开发简史 9
1.2 软件开发模式的演进历程 10
1.2.1 算法编程的规范化 . 11
1.2.2 面向对象编程模式 . 11
1.2.3 开源软件的崛起 11
1.3 模式、实践与组件的价值 12
1.3.1 站在巨人的肩膀上 .12
1.3.2 用于讨论实践的通用语言 12
1.3.3 便于复用的共享组件.13
1.4 小结 .14
第2 章 分布式系统核心概念 .15
2.1 API 与RPC 15
2.2 时延性能指标 .16
2.3 可靠性 16
2.4 百分位数17
2.5 幂等性 18
2.6 交付语义18
2.7 关系完整性 19
2.8 数据一致性 20
2.9 编排与Kubernetes 21
2.10 健康检查 .22
2.11 小结 22
第二部分 单节点模式
第3 章 边车模式 25
3.1 边车模式示例:为遗留服务添加HTTPS 支持 .26
3.2 基于边车模式的动态配置 27
3.3 模块化应用容器 28
3.4 基于边车模式构建简易PaaS 平台 30
3.5 边车模块化与可复用性设计 30
3.5.1 容器参数化配置 31
3.5.2 定义容器的API 接口 32
3.5.3 容器文档化 33
3.6 小结 .35
第4 章 大使模式 37
4.1 使用大使模式实现服务分片 38
4.2 使用大使模式实现服务代理 42
4.3 使用大使模式进行实验或请求分流.42
4.4 小结 .46
第5 章 适配器 47
5.1 监控 .48
5.2 日志记录50
5.3 添加健康监控器 52
5.4 小结 .55
第三部分 服务模式
第6 章 多副本负载均衡服务 .61
6.1 无状态服务 61
6.1.1 负载均衡的就绪检测.62
6.1.2 实战演练:在Kubernetes 中创建多副本服务 63
6.2 会话保持服务 .65
6.3 应用层多副本服务 66
6.4 引入缓存层 66
6.4.1 部署缓存 .66
6.4.2 实战演练:部署缓存层 68
6.5 扩展缓存层 70
6.5.1 速率限制与拒绝服务防御 70
6.5.2 SSL 终止 .71
6.5.3 实战演练:部署Nginx 与SSL 终止 .72
6.6 小结 .75
第7 章 分片服务 77
7.1 分片缓存78
7.1.1 为何需要分片缓存 .78
7.1.2 缓存对于系统性能的影响 79
7.1.3 多副本分片缓存 80
7.1.4 实战演练:部署大使模式与Memcache 实现分片缓存 81
7.2 分片函数解析 .85
7.2.1 选择键 86
7.2.2 一致性哈希函数 88
7.2.3 实战演练:构建一致性HTTP 分片代理 .88
7.3 分片多副本服务 89
7.4 热分片系统 89
7.5 小结 .90
第8 章 分散模式与聚集模式 .91
8.1 从根节点分发的分散/ 聚集模式 92
8.2 基于叶子分片的分散/ 聚集模式 94
8.2.1 实战演练: 分片文档搜索 95
8.2.2 选择合适的叶子节点数量 96
8.3 提升分散/ 聚集模式的可靠性与规模 .97
8.4 小结 .98
第9 章 函数与事件驱动处理 .99
9.1 确定何时使用FaaS100
9.1.1 FaaS 的优势 100
9.1.2 FaaS 的挑战 100
9.1.3 对后台处理的需求 101
9.1.4 将数据保留在内存中的需求 102
9.1.5 持续的基于请求的处理成本 102
9.2 FaaS 模式 103
9.2.1 装饰器模式:请求或响应转换 103
9.2.2 实战演练:在请求处理前添加请求默认值 .104
9.2.3 处理事件 105
9.2.4 实战演练:实现双重认证 106
9.2.5 基于事件的管道 108
9.2.6 实战演练:实现新用户注册管道 .108
9.3 小结 110
第10 章 所有权选举 111
10.1 确定是否需要领导者选举 112
10.2 领导者选举概要 114
10.2.1 实战演练:部署etcd 115
10.2.2 实现锁 . 116
10.2.3 实战演练:在etcd 中实现锁 119
10.2.4 实现所有权121
10.2.5 实战演练:在etcd 中实现租约 122
10.3 处理并发数据操作 123
10.4 小结 125
第四部分 批处理计算模式
第11 章 工作队列系统 . 129
11.1 通用工作队列系统 129
11.1.1 源容器接口 130
11.1.2 工作队列API 131
11.1.3 工作单元容器接口 132
11.1.4 共享的工作队列架构 134
11.2 实战演练:实现视频缩略图生成器 136
11.3 工作单元的动态扩缩容 138
11.4 多工作单元模式 139
11.5 小结 140
第12 章 事件驱动批处理 . 141
12.1 事件驱动处理模式 142
12.1.1 复制器 .142
12.1.2 过滤器 .143
12.1.3 分流器 .144
12.1.4 分片器 .145
12.1.5 合并器 .147
12.2 实战演练:构建新用户注册事件的驱动工作流 148
12.3 发布者/ 订阅者基础架构 150
12.4 实战演练:部署Kafka .151
12.5 工作队列的弹性和性能 153
12.5.1 工作窃取 153
12.5.2 错误、优先级和重试 154
12.6 小结 156
第13 章 协调式批处理 . 157
13.1 连接(或栏栅同步) .157
13.2 Reduce 159
13.2.1 实战演练:计数 .160
13.2.2 求和 161
13.2.3 直方图 .162
13.2.4 实战演练:图像标记与处理流水线 .163
13.3 小结 166
第五部分 通用概念
第14 章 监控与可观测性模式 169
14.1 监控与可观测性基础 .169
14.1.1 日志记录 170
14.1.2 指标 172
14.1.3 基础请求监控 174
14.1.4 高级请求监控 175
14.1.5 告警 176
14.1.6 追踪 177
14.2 信息聚合 178
14.3 小结 179
第15 章 AI 推理与服务 181
15.1 AI 系统基础 181
15.2 模型部署 182
15.3 模型分发 183
15.4 模型开发实践 184
15.5 检索增强生成 185
15.6 测试与部署 .186
15.7 小结 187
第16 章 常见故障模式 . 189
16.1 惊群效应 189
16.2 无错误即异常 190
16.3 “客户端”与“预期”错误 191
16.4 版本控制错误 191
16.5 可选组件的迷思 192
16.6 糟糕,我们“清理”了所有数据 193
16.7 输入广度带来的挑战 .195
16.8 处理过时工作 196
16.9 “第二系统”问题 198
16.10 小结 .200
结语:新的起点 201
- 有电书房
- 扫描二维码,访问我们的微信店铺