具体描述
《反应式设计模式》介绍反应式应用程序设计的原则、模式和经典实践,讲述如何用断路器模式将运行缓慢的组件与其他组件隔开、如何用事务序列(Saga)模式实现多阶段事务以及如何通过分片模式来划分数据集,分析如何保持源代码的可读性以及系统的可测试性(即使在存在许多潜在交互和失败点的情况下)。 主要内容 ? “反应式宣言”指南 ? 流量控制、有界一致性、容错等模式 ? 得之不易的关于“什么行不通”的经验 ? 在巨大的负载下保持伸缩性的架构
作者简介
目录信息
第1章 为什么需要反应式? 3
1.1 剖析反应式应用 5
1.2 应对负载 6
1.3 应对失败 7
1.4 让系统即时响应 9
1.5 避免大泥球 10
1.6 整合非反应式组件 11
1.7 小结 12
第2章 《反应式宣言》概览 13
2.1 对用户作出反应 13
2.1.1 理解传统方法 14
2.1.2 使用共享资源的延迟分析 16
2.1.3 使用队列限制最大延迟 17
2.2 利用并行性 18
2.2.1 通过并行化降低延迟 19
2.2.2 使用可组合的Future改善并行性 21
2.2.3 为序列式执行表象买单 22
2.3 并行执行的限制 24
2.3.1 阿姆达尔定律 24
2.3.2 通用伸缩性法则 25
2.4 对失败作出反应 26
2.4.1 划分与隔离 28
2.4.2 使用断路器 29
2.4.3 监督 30
2.5 放弃强一致性 32
2.5.1 ACID 2.0 33
2.5.2 接受更新 34
2.6 对反应式设计模式的需求 35
2.6.1 管理复杂性 36
2.6.2 使编程模型更贴近真实世界 37
2.7 小结 38
第3章 行业工具 39
3.1 反应式的早期解决方案 39
3.2 函数式编程 41
3.2.1 不可变性 42
3.2.2 引用透明性 44
3.2.3 副作用 45
3.2.4 函数作为一等公民 46
3.3 即时响应用户 47
3.4 对反应式设计的现有支持 49
3.4.1 绿色线程 49
3.4.2 事件循环 50
3.4.3 通信顺序进程 51
3.4.4 Future和Promise 53
3.4.5 反应式扩展工具包 58
3.4.6 Actor模型 59
3.5 小结 64
第Ⅱ部分 微言大义
第4章 消息传递 67
4.1 消息 67
4.2 垂直伸缩 68
4.3 “基于事件”与“基于消息” 69
4.4 “同步”与“异步” 71
4.5 流量控制 73
4.6 送达保证 75
4.7 作为消息的事件 77
4.8 同步消息传递 79
4.9 小结 79
第5章 位置透明性 81
5.1 什么是位置透明性? 81
5.2 透明化远程处理的谬误 82
5.3 基于显式消息传递的纠正方案 83
5.4 优化本地消息传递 84
5.5 消息丢失 85
5.6 水平扩展性 87
5.7 位置透明性使测试更加简单 88
5.8 动态组合 88
5.9 小结 90
第6章 分而治之 91
6.1 分层拆解问题 92
6.2 “依赖”与“子模块” 94
6.3 构建你自己的大公司 96
6.4 规范和测试的优点 97
6.5 水平扩展性和垂直伸缩性 98
6.6 小结 99
第7章 原则性失败处理 101
7.1 所有权意味着承诺 101
7.2 所有权隐含生命周期控制 103
7.3 所有级别上的回弹性 104
7.4 小结 105
第8章 有界一致性 107
8.1 封装模块纠正方案 108
8.2 根据事务边界对数据和行为进行分组 109
8.3 跨事务边界建模工作流 109
8.4 失败单元即一致性单元 110
8.5 分离职责 111
8.6 坚持一致性的隔离范围 113
8.7 小结 114
第9章 按需使用非确定性 115
9.1 逻辑编程和声明式数据流 115
9.2 函数式反应式编程 117
9.3 不共享简化并发 118
9.4 共享状态的并发 119
9.5 如何窘境突围? 119
9.6 小结 121
第10章 消息流 123
10.1 推动数据向前流动 123
10.2 模型化领域流程 125
10.3 认清回弹性的局限性 125
10.4 估计速率和部署规模 126
10.5 为流量控制进行规划 127
10.6 小结 127
第Ⅲ部分 设计模式
第11章 测试反应式应用程序 131
11.1 如何测试 131
11.1.1 单元测试 132
11.1.2 组件测试 133
11.1.3 联动测试 133
11.1.4 集成测试 133
11.1.5 用户验收测试 134
11.1.6 黑盒测试与白盒测试 134
11.2 测试环境 135
11.3 异步测试 136
11.3.1 提供阻塞的消息接收者 137
11.3.2 选择超时时间的难题 139
11.3.3 断言消息的缺失 145
11.3.4 提供同步执行引擎 146
11.3.5 异步断言 148
11.3.6 完全异步的测试 149
11.3.7 断言没有发生异步错误 151
11.4 测试非确定性系统 154
11.4.1 执行计划的麻烦 155
11.4.2 测试分布式组件 155
11.4.3 模拟Actor 156
11.4.4 分布式组件 157
11.5 测试弹性 157
11.6 测试回弹性 158
11.6.1 应用程序回弹性 158
11.6.2 基础设施的回弹性 162
11.7 测试即时响应性 164
11.8 小结 165
第12章 容错及恢复模式 167
12.1 简单组件模式 167
12.1.1 问题设定 168
12.1.2 模式应用 168
12.1.3 模式回顾 170
12.1.4 适用性 171
12.2 错误内核模式 171
12.2.1 问题设定 172
12.2.2 模式应用 172
12.2.3 模式回顾 175
12.2.4 适用性 176
12.3 放任崩溃模式 176
12.3.1 问题设定 177
12.3.2 模式应用 177
12.3.3 模式回顾 178
12.3.4 实现上的考虑 179
12.3.5 推论:心跳模式 180
12.3.6 推论:主动失败信号模式 180
12.4 断路器模式 181
12.4.1 问题设定 182
12.4.2 模式应用 182
12.4.3 模式回顾 186
12.4.4 适用性 187
12.5 小结 187
第13章 复制模式 189
13.1 主动-被动复制模式 190
13.1.1 问题设定 190
13.1.2 模式应用 191
13.1.3 模式回顾 203
13.1.4 适用性 204
13.2 多主复制模式 204
13.2.1 基于共识的复制 205
13.2.2 具有冲突检测与处理方案的复制方式 208
13.2.3 无冲突的可复制数据类型 210
13.3 主动-主动复制模式 217
13.3.1 问题设定 218
13.3.2 模式应用 218
13.3.3 模式回顾 225
13.3.4 与虚拟同步模型的关系 226
13.4 小结 227
第14章 资源管理模式 229
14.1 资源封装模式 229
14.1.1 问题设定 230
14.1.2 模式应用 230
14.1.3 模式回顾 236
14.1.4 适用性 237
14.2 资源借贷模式 237
14.2.1 问题设定 238
14.2.2 模式应用 238
14.2.3 模式回顾 240
14.2.4 适用性 241
14.2.5 实现上的考虑 242
14.2.6 变体:使用资源借贷模式进行局部公开 242
14.3 复杂命令模式 243
14.3.1 问题设定 243
14.3.2 模式应用 244
14.3.3 模式回顾 251
14.3.4 适用性 252
14.4 资源池模式 252
14.4.1 问题设定 253
14.4.2 模式应用 253
14.4.3 模式回顾 255
14.4.4 实现上的考虑 256
14.5 托管阻塞模式 257
14.5.1 问题设定 257
14.5.2 模式应用 258
14.5.3 模式回顾 260
14.5.4 适用性 261
14.6 小结 262
第15章 消息流模式 263
15.1 请求-响应模式 264
15.1.1 问题设定 264
15.1.2 模式应用 265
15.1.3 该模式的常见实例 267
15.1.4 模式回顾 272
15.1.5 适用性 272
15.2 消息自包含模式 273
15.2.1 问题设定 273
15.2.2 模式应用 274
15.2.3 模式回顾 276
15.2.4 适用性 277
15.3 询问模式 277
15.3.1 问题设定 278
15.3.2 模式应用 278
15.3.3 模式回顾 281
15.3.4 适用性 283
15.4 转发流模式 283
15.4.1 问题设定 283
15.4.2 模式应用 284
15.4.3 模式回顾 284
15.4.4 适用性 285
15.5 聚合器模式 285
15.5.1 问题设定 285
15.5.2 模式应用 286
15.5.3 模式回顾 289
15.5.4 适用性 290
15.6 事务序列模式 290
15.6.1 问题设定 291
15.6.2 模式应用 291
15.6.3 模式回顾 293
15.6.4 适用性 294
15.7 业务握手协议(或可靠投递模式) 294
15.7.1 问题设定 295
15.7.2 模式应用 295
15.7.3 模式回顾 300
15.7.4 适用性 301
15.8 小结 301
第16章 流量控制模式 303
16.1 拉取模式 303
16.1.1 问题设定 304
16.1.2 模式应用 304
16.1.3 模式回顾 306
16.1.4 适用性 307
16.2 托管队列模式 307
16.2.1 问题设定 308
16.2.2 模式应用 308
16.2.3 模式回顾 310
16.2.4 适用性 310
16.3 丢弃模式 311
16.3.1 问题设定 311
16.3.2 模式应用 311
16.3.3 模式回顾 313
16.3.4 适用性 316
16.4 限流模式 316
16.4.1 问题设定 316
16.4.2 模式应用 317
16.4.3 模式回顾 320
16.5 小结 320
第17章 状态管理和持久化模式 321
17.1 领域对象模式 321
17.1.1 问题设定 322
17.1.2 模式应用 322
17.1.3 模式回顾 326
17.2 分片模式 326
17.2.1 问题设定 326
17.2.2 模式应用 327
17.2.3 模式回顾 329
17.2.4 重要警告 329
17.3 事件溯源模式 330
17.3.1 问题设定 330
17.3.2 模式应用 330
17.3.3 模式回顾 333
17.3.4 适用性 333
17.4 事件流模式 334
17.4.1 问题设定 334
17.4.2 模式应用 334
17.4.3 模式回顾 336
17.4.4 适用性 337
17.5 小结 337
附录A 反应式系统图示 339
附录B 一个虚构的案例 341
附录C 《反应式宣言》正文 355
· · · · · · (收起)
读后感
用户评价
不得不说,《反应式设计模式》这本书给我的整体感觉相当扎实。我特别喜欢它在讲解概念时所展现出的逻辑清晰和条理分明。这本书并没有一开始就抛出一些晦涩难懂的术语,而是循序渐进地引导读者进入反应式编程的世界。从最基础的异步处理,到更复杂的事件流和数据管道,每一个概念的提出都伴随着详尽的解释和生动的比喻,这让我在理解过程中感到非常轻松。书中对不同反应式框架的介绍和对比也让我印象深刻。它并没有强行推崇某一种技术,而是客观地分析了各种框架的优缺点,并指导读者根据实际需求进行选择。我尤其关注书中关于如何处理错误和异常的部分,这在反应式编程中往往是一个比较棘手的难题,而本书提供了非常有效的解决方案。此外,书中的代码示例也相当完善,不仅有清晰的解释,还提供了可运行的版本,这让我能够亲手实践,加深对书中内容的理解。总而言之,这是一本理论与实践结合得非常好的书籍,对于想要深入了解和掌握反应式设计模式的开发者来说,绝对是一本不可多得的参考书。
《反应式设计模式》这本书给我的感觉是,它非常贴合当前软件开发的前沿趋势。在如今这个信息爆炸、数据量巨大的时代,传统的同步阻塞式编程方式已经越来越难以满足需求。这本书恰恰填补了这一领域的空白。它不仅仅是一本技术书籍,更像是一份关于未来软件架构的蓝图。我尤其欣赏书中对“弹性”和“容错”的强调。在分布式系统和微服务架构日益普及的今天,如何保证系统的可用性和稳定性至关重要,而反应式设计模式提供了一套非常有效的解决方案。书中的内容涵盖了从基础概念到高级模式的广泛范围,对于不同经验水平的开发者都能有所裨益。我尤其关注书中关于“服务间通信”和“事件驱动架构”的内容,这些都是现代分布式系统中至关重要的组成部分。通过学习这些模式,我不仅能够提升自己解决当下问题的能力,更能为未来的软件设计打下坚实的基础,构建出能够应对未来挑战的、更具前瞻性的系统。
这本书的阅读体验可以说是相当的“治愈”。我之前在开发过程中,经常会遇到各种难以捉摸的异步问题,代码变得越来越冗长,维护起来也越来越困难。而《反应式设计模式》就像一位经验丰富的导师,为我指点迷津。书中的章节安排非常合理,循序渐进,让我能够一步一步地构建起对反应式编程的认知。它不仅仅讲解了“是什么”,更深入地探讨了“为什么”和“如何做”。我最看重的是书中关于“响应式思维”的培养。它教会我如何从全新的角度去看待问题,如何将复杂的系统拆解成更小的、可管理的部分,并且能够让这些部分之间以一种声明式的方式进行交互。书中提出的“声明式编程”和“不可变性”等原则,让我对代码的可读性和可维护性有了全新的认识。通过学习书中的模式,我能够更自信地去处理那些曾经让我头疼的并发场景,比如需要处理大量用户请求,或者实时更新大量数据的场景。这本书帮助我摆脱了“命令式”的思维定势,让我能够拥抱一种更优雅、更具弹性的编程方式。
拿到《反应式设计模式》这本书,我当时就抱着一种既好奇又期待的心情。这本书的书名本身就足够吸引人,在软件开发领域,“反应式”这个词汇近年来愈发频繁地出现在技术交流和讨论中,似乎预示着一种新的、更高效的编程范式。我尤其好奇的是,它所提及的“模式”究竟是怎样的,是像某些经典设计模式那样,可以被套用到各种场景中的解决方案,还是更侧重于一种思维方式的引导?我希望这本书能够深入浅出地剖析反应式编程的核心思想,并且通过丰富的实例,展示如何在实际项目中应用这些模式。例如,在处理高并发、异步操作,以及需要实时数据流的场景下,反应式编程能够带来哪些显著的优势?书中的例子是否涵盖了不同类型的应用,比如Web后端、移动应用,甚至是数据处理管道?我期待书中能够提供一些可操作的指南,帮助我理解如何在现有项目中逐步引入反应式思维,或者在新的项目从一开始就构建一个健壮的反应式架构。我希望这本书不仅仅是理论的堆砌,更能提供实际的技巧和方法,让读者能够真正掌握并运用反应式设计模式来提升软件的性能、弹性和可维护性。
读完《反应式设计模式》之后,我脑海中闪过的第一个念头就是“豁然开朗”。在此之前,我对反应式编程一直停留在概念层面,知道它很强大,但具体如何实践却感到迷茫。这本书就像一盏明灯,照亮了我前进的方向。它非常巧妙地将抽象的反应式概念与具体的“模式”联系起来,让我能够更清晰地认识到,反应式编程并非空中楼阁,而是可以通过一系列经过验证的设计模式来落地实现的。书中的“解耦”、“可观察性”、“弹性”等核心理念,在结合实际代码讲解时,变得生动而易于理解。我尤其欣赏书中对“管道”和“数据流”的详细阐述,这让我彻底理解了如何构建一个能够优雅处理连续数据输入的系统。书中提供的各种模式,例如“负载均衡器”模式下的容错处理,“限流器”模式下的性能保障,都给我带来了极大的启发。我发现,这些模式不仅能够解决现有的技术难题,更能帮助我预见和规避未来的潜在问题,从而构建出更加健壮和高效的软件系统。
akka 社区出版的宣传手册。乍一看仿佛还不错,其实是 akka 的操作手册。确实配不上《反应式设计模式》这个名字。其模式讲解颇流于形式,不如文档。所得不多。
帮助我重铸了知识体系。
是一本非常不错的书,可以当做一本知识体系参考目录
这翻译,读得头疼。
好书!