描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787115571106
1.本书从头开始,为读者讲解如何构建完整的事件驱动型微服务架构,站在初学的角度进行了细致的讲解。
2.本书为构建事件驱动型微服务提供了实用框架,让技术选型更灵活,应对不断变化的业务需求,实现持续交付。
3.本书适合软件架构师、系统设计师、数据工程师等相关从业者进行系统的学习,主要讲解了以下内容:
●如何利用事件驱动架构更好地实现商业价值
●微服务在事件驱动架构设计中的角色
●确保团队取得成功的架构模式
●开发强大的事件驱动型微服务所需的应用模式
●落地微服务生态系统所需的组件和工具
微服务既有同步实现,亦有异步实现。异步微服务架构以事件驱动,不受特定的API限制,系统的耦合度低,可扩展性强。本书教你从头开始构建完整的事件驱动型微服务架构,根据实际的业务需求调整、扩展微服务,更好地实践持续交付,并以新的视角思考如何充分利用实时数据的价值。
前言 xv
第 1 章 为什么用事件驱动型微服务 1
1.1 什么是事件驱动型微服务 2
1.2 领域驱动设计和界限上下文 3
1.2.1 运用领域模型和界限上下文 4
1.2.2 保持界限上下文与业务需求一致 4
1.3 沟通结构 5
1.3.1 业务沟通结构 5
1.3.2 实现沟通结构 6
1.3.3 数据沟通结构 7
1.3.4 康威定律和沟通结构 7
1.4 传统计算中的沟通结构 8
1.4.1 选项1:创建一个新服务 8
1.4.2 选项2:将它加入现有服务中 9
1.4.3 两种选项的利弊 9
1.4.4 团队场景(续) 10
1.4.5 冲突的压力 10
1.5 事件驱动的沟通结构 11
1.5.1 事件是通信的基础 11
1.5.2 事件流提供了单一事实来源 11
1.5.3 消费者执行自己的建模和查询 11
1.5.4 整个组织的数据沟通得到改善 12
1.5.5 高可访问的数据利于业务变更 12
1.6 异步的事件驱动型微服务 12
1.7 同步式微服务 14
1.7.1 同步式微服务的缺点 14
1.7.2 同步式微服务的优点 15
1.8 小结 16
第 2 章 事件驱动型微服务基础 17
2.1 构建拓扑 17
2.1.1 微服务拓扑 17
2.1.2 业务拓扑 18
2.2 事件内容 19
2.3 事件的结构 19
2.3.1 无键事件 19
2.3.2 实体事件 20
2.3.3 键控事件 20
2.4 物化来自实体事件的状态 20
2.5 事件数据的定义和schema 22
2.6 微服务单一写原则 22
2.7 用事件代理赋能微服务 23
2.7.1 事件存储和服务 23
2.7.2 需要考虑的其他因素 24
2.8 事件代理与消息代理 25
2.8.1 从不可变日志中消费 26
2.8.2 提供单一事实来源 27
2.9 大规模管理微服务 28
2.9.1 将微服务放到容器内 28
2.9.2 将微服务放到虚拟机内 28
2.9.3 管理容器和虚拟机 28
2.10 缴纳微服务税 29
2.11 小结 30
第 3 章 通信和数据契约 31
3.1 事件驱动数据契约 31
3.1.1 使用显式schema作为契约 32
3.1.2 schema定义的注释 32
3.1.3 全能的schema演化 33
3.1.4 有代码生成器支持 33
3.1.5 破坏性的schema变更 34
3.2 选择事件格式 36
3.3 设计事件 36
3.3.1 只讲述事实 36
3.3.2 每个流都使用单一事件定义 37
3.3.3 使用窄的数据类型 37
3.3.4 保持事件的单一用途 37
3.3.5 小化事件 40
3.3.6 让潜在的消费者参与事件设计 40
3.3.7 避免将事件作为信号量或信号 41
3.4 小结 41
第 4 章 将事件驱动架构与现有系统集成 42
4.1 什么是数据解放 43
4.1.1 数据解放的折中方案 43
4.1.2 将被解放的数据转化成事件 45
4.2 数据解放模式 45
4.3 数据解放框架 46
4.4 通过查询实施数据解放 46
4.4.1 批量加载 47
4.4.2 增量时间戳加载 47
4.4.3 自增ID 加载 47
4.4.4 自定义查询 47
4.4.5 增量更新 47
4.4.6 基于查询更新的优点 48
4.4.7 基于查询更新的缺点 48
4.5 使用变更数据捕获日志解放数据 49
4.5.1 使用数据存储日志的优点 50
4.5.2 使用数据库日志的缺点 50
4.6 使用发件箱表解放数据 51
4.6.1 性能考虑 52
4.6.2 隔离内部数据模型 52
4.6.3 确保schema兼容性 53
4.6.4 使用触发器捕获变更数据 56
4.7 对处于捕获的数据集做数据定义变更 59
4.7.1 为查询和CDC日志模式处理事后数据定义变更 60
4.7.2 为变更数据表捕获模式处理数据定义变更 60
4.8 将事件数据落地到数据存储 60
4.9 数据落地和获取对业务的影响 60
4.10 小结 62
第 5 章 事件驱动处理基础 63
5.1 构建无状态拓扑 64
5.1.1 转换 64
5.1.2 分流与合流 65
5.2 对事件流再分区 65
5.3 对事件流协同分区 66
5.4 给消费者实例分配分区 67
5.4.1 使用分区分配器分配分区 68
5.4.2 分配协同分区 68
5.4.3 分区分配策略 68
5.5 从无状态处理实例故障中恢复 70
5.6 小结 70
第 6 章 具有确定性的流处理 71
6.1 事件驱动工作流的确定性 72
6.2 时间戳 72
6.2.1 同步分布式时间戳 73
6.2.2 处理带时间戳的事件 74
6.3 事件调度和确定性处理 75
6.3.1 自定义事件调度器 75
6.3.2 基于事件时间、处理时间和摄取时间进行处理 75
6.3.3 消费者提取时间戳 76
6.3.4 对外部系统的“请求?C响应”调用 76
6.4 水位 76
6.5 流时间 78
6.6 乱序事件和迟到事件 80
6.6.1 使用水位和流时间的迟到事件 81
6.6.2 乱序事件的原因和影响 81
6.6.3 时间敏感的函数和窗口化 83
6.7 处理迟到事件 85
6.8 再处理与近实时处理 86
6.9 间歇性故障和迟到事件 86
6.10 生产者/事件代理的连接性问题 87
6.11 小结与延展阅读 88
第 7 章 有状态的流 89
7.1 状态存储与从事件流中物化状态 89
7.2 记录状态到变更日志事件流 90
7.3 将状态物化至内部状态存储 91
7.3.1 物化全局状态 92
7.3.2 使用内部状态的优点 92
7.3.3 使用内部状态的缺点 93
7.3.4 内部状态的伸缩和恢复 93
7.4 将状态物化至外部状态存储 96
7.4.1 外部状态的优点 97
7.4.2 外部状态的缺点 97
7.4.3 外部状态存储的伸缩和恢复 98
7.5 重建与迁移状态存储 99
7.5.1 重建 99
7.5.2 迁移 100
7.6 事务与有效一次处理 100
7.6.1 示例:库存计算服务 101
7.6.2 使用“客户端?C代理”事务的有效一次处理 102
7.6.3 没有“客户端?C代理”事务的有效一次处理 103
7.7 小结 107
第 8 章 用微服务构建工作流 108
8.1 编排模式 109
8.1.1 一个简单的事件驱动编排示例 109
8.1.2 创建和修改编排的工作流 110
8.1.3 监控编排的工作流 110
8.2 编制模式 111
8.2.1 一个简单的事件驱动编制模式例子 112
8.2.2 一个简单的直接调用的编制模式例子 113
8.2.3 对比事件驱动编制模式和直接调用的编制模式 114
8.2.4 创建和修改编制工作流 114
8.2.5 监控编制工作流 115
8.3 分布式事务 115
8.3.1 编排型事务:saga模式 115
8.3.2 编制型事务 117
8.4 补偿工作流 119
8.5 小结 119
第 9 章 使用“函数即服务”的微服务 120
9.1 设计基于函数的微服务解决方案 120
9.1.1 确保界限上下文的严格的成员关系 120
9.1.2 只在完成处理之后提交偏移量 121
9.1.3 少即是多 121
9.2 选择FaaS供应商 122
9.3 在函数之外构建微服务 122
9.4 冷启动和热启动 123
9.5 用触发器启动函数 124
9.5.1 基于新事件触发:事件流监听器 124
9.5.2 基于消费者组的滞后度触发 125
9.5.3 按调度表触发 126
9.5.4 使用网络钩子触发 126
9.5.5 触发资源事件 127
9.6 用函数执行业务工作 127
9.7 维持状态 127
9.8 调用其他函数的函数 128
9.8.1 事件驱动通信模式 128
9.8.2 直接调用模式 129
9.9 终止和关闭 131
9.10 调整函数 132
9.10.1 分配足够的资源 132
9.10.2 批量事件处理的参数 132
9.11 FaaS的伸缩方案 132
9.12 小结 133
第 10 章 基础的生产者和消费者微服务 134
10.1 BPC的适用场合 134
10.1.1 集成现有遗留系统 135
10.1.2 不依赖于事件顺序的有状态的业务逻辑 136
10.1.3 当数据层完成大部分工作时 137
10.1.4 处理层和数据层独立伸缩 137
10.2 具有外部流处理的混合BPC应用程序 138
10.3 小结 140
第 11 章 使用重量级框架的微服务 141
11.1 重量级框架的简单历史 142
11.2 重量级框架的内部运作 142
11.3 优点和局限性 144
11.4 集群搭建方案和执行模式 145
11.4.1 使用托管服务 146
11.4.2 构建自己的完整集群 146
11.4.3 使用CMS集成来创建集群 146
11.5 应用程序提交模式 148
11.5.1 驱动器模式 148
11.5.2 集群模式 148
11.6 处理状态和使用检查点 148
11.7 伸缩应用程序和处理事件流分区 149
11.7.1 伸缩运行中的应用程序 150
11.7.2 通过重启伸缩应用程序 153
11.7.3 自动伸缩应用程序 153
11.8 从故障中恢复 153
11.9 考虑多租户问题 153
11.10 语言和语法 154
11.11 选择一个框架 154
11.12 示例:点击和观看的会话窗口 155
11.13 小结 157
第 12 章 使用轻量级框架的微服务 158
12.1 优点和局限性 158
12.2 轻量级处理 159
12.3 处理状态和使用变更日志 159
12.4 伸缩和故障恢复 160
12.4.1 事件洗牌 160
12.4.2 状态分配 161
12.4.3 状态复制和热副本 161
12.5 选择一个轻量级框架 161
12.5.1 Apache Kafka Streams 162
12.5.2 Apache Samza:嵌入模式 162
12.6 语言和语法 162
12.7 流?C表?C表联结:增强模式 163
12.8 小结 166
第 13 章 集成事件驱动型和“请求?C响应”型微服务 167
13.1 处理外部事件 167
13.1.1 自动生成的事件 168
13.1.2 由响应生成的事件 168
13.2 处理自动生成的分析事件 168
13.3 集成第三方“请求?C响应”API 170
13.4 处理并提供有状态的数据 171
13.4.1 实时请求内部状态存储 172
13.4.2 实时请求外部状态存储 175
13.5 在事件驱动的工作流中处理请求 177
13.6 “请求?C响应”应用程序中的微前端 183
13.7 微前端的优点 184
13.7.1 基于组合的微服务 184
13.7.2 容易与业务需求对齐 185
13.8 微前端的缺点 185
13.8.1 可能不一致的UI元素和样式 185
13.8.2 不同的微前端性能 185
13.8.3 示例:体验搜索与评论应用程序 186
13.9 小结 188
第 14 章 支持性工具 190
14.1 微服务?C团队分配系统 190
14.2 事件流的创建和修改 191
14.3 事件流元数据标记 191
14.4 限额 192
14.5 schema注册表 192
14.6 schema创建和修改通知 193
14.7 偏移量管理 193
14.8 事件流的权限和访问控制列表 194
14.9 状态管理和应用程序重置 195
14.10 消费者偏移量滞后度监控 196
14.11 流水线型的微服务创建流程 196
14.12 容器管理控制 197
14.13 集群创建和管理 197
14.13.1 事件代理的程序化创建 197
14.13.2 计算资源的程序化创建 198
14.13.3 跨集群事件数据复制 198
14.13.4 工具的程序化创建 198
14.14 依赖跟踪和拓扑可视化 199
14.15 小结 202
第 15 章 测试事件驱动型微服务 203
15.1 通用测试原则 203
15.2 单元测试拓扑函数 203
15.2.1 无状态的函数 204
15.2.2 有状态的函数 204
15.3 测试拓扑 205
15.4 测试schema演化和兼容性 205
15.5 事件驱动型微服务的集成测试 206
15.6 本地集成测试 206
15.6.1 在测试代码的运行时内创建临时环境 208
15.6.2 在测试代码外部创建临时环境 209
15.6.3 使用mocking和模拟器方法集成托管服务 209
15.6.4 集成没有本地支持的远程服务 210
15.7 完全远程集成测试 211
15.7.1 程序化创建临时集成测试环境 211
15.7.2 使用共享环境进行测试 213
15.7.3 使用生产环境进行测试 214
15.8 选择你的完全远程集成测试策略 214
15.9 小结 215
第 16 章 部署事件驱动型微服务 216
16.1 微服务部署的原则 216
16.2 微服务部署的架构组件 217
16.2.1 持续集成系统、持续交付系统和持续部署系统 217
16.2.2 CMS和商业硬件 218
16.3 基本的全站式部署模式 218
16.4 滚动更新模式 220
16.5 破坏性的schema变更模式 220
16.5.1 通过两个事件流达到终迁移 222
16.5.2 同步迁移到新事件流 222
16.6 蓝绿部署模式 223
16.7 小结 224
第 17 章 结论 225
17.1 通信层 225
17.2 业务领域和界限上下文 226
17.3 可共享的工具和基础设施 226
17.4 结构化事件 226
17.5 数据解放和单一事实来源 227
17.6 微服务 227
17.7 微服务实现方案 228
17.8 测试 228
17.9 部署 229
17.10 结语 229
关于作者 230
关于封面 230
“这本书揭示了业内在管理规模和控制复杂度方面的奥秘。”
——K. Scott Morrison,PHEMI Systems CTO
“对于任何有兴趣了解事件驱动型系统的人来说,这本书是非常宝贵的。我对它的出版充满期待。”
——Ben Stopford,Confluent公司CTO办公室负责人,Designing Event-Driven Systems作者
评论
还没有评论。