微服务与事件驱动架构
Adam Bellemare
温正东 译
出版时间:2021年10月
页数:230
如今,许多公司常常难以在业务需求和不断增长的数据量之间找到平衡。随着各行各业积极拥抱数字化转型,对大规模实时数据的利用需求正在快速增长,传统的系统架构再也无法承担重任。
本书为构建事件驱动型微服务提供了实用框架。通过本书,你将学习如何根据事件驱动型微服务的原则跨业务部门利用大数据,从而提高服务的可伸缩性和可测试性,让技术选型更灵活,更轻松地应对不断变化的业务需求,真正实现持续交付。
● 如何利用事件驱动架构更好地实现商业价值
● 微服务在事件驱动架构设计中的角色
● 确保团队取得成功的架构模式
● 开发强大的事件驱动型微服务所需的应用模式
● 落地微服务生态系统所需的组件和工具
  1. 前言
  2. 第1章 为什么用事件驱动型微服务 
  3. 1.1 什么是事件驱动型微服务 
  4. 1.2 领域驱动设计和界限上下文 
  5. 1.2.1 运用领域模型和界限上下文 
  6. 1.2.2 保持界限上下文与业务需求一致 
  7. 1.3 沟通结构 
  8. 1.3.1 业务沟通结构 
  9. 1.3.2 实现沟通结构 
  10. 1.3.3 数据沟通结构 
  11. 1.3.4 康威定律和沟通结构 
  12. 1.4 传统计算中的沟通结构 
  13. 1.4.1 选项1:创建一个新服务 
  14. 1.4.2 选项2:将它加入现有服务中 
  15. 1.4.3 两种选项的利弊 
  16. 1.4.4 团队场景(续) 
  17. 1.4.5 冲突的压力 
  18. 1.5 事件驱动的沟通结构 
  19. 1.5.1 事件是通信的基础 
  20. 1.5.2 事件流提供了单一事实来源 
  21. 1.5.3 消费者执行自己的建模和查询 
  22. 1.5.4 整个组织的数据沟通得到改善 
  23. 1.5.5 高可访问的数据利于业务变更 
  24. 1.6 异步的事件驱动型微服务 
  25. 1.7 同步式微服务 
  26. 1.7.1 同步式微服务的缺点 
  27. 1.7.2 同步式微服务的优点 
  28. 1.8 小结 
  29. 第2章 事件驱动型微服务基础 
  30. 2.1 构建拓扑
  31. 2.1.1 微服务拓扑 
  32. 2.1.2 业务拓扑 
  33. 2.2 事件内容 
  34. 2.3 事件的结构 
  35. 2.3.1 无键事件 
  36. 2.3.2 实体事件 
  37. 2.3.3 键控事件 
  38. 2.4 物化来自实体事件的状态 
  39. 2.5 事件数据的定义和schema 
  40. 2.6 微服务单一写原则 
  41. 2.7 用事件代理赋能微服务 
  42. 2.7.1 事件存储和服务 
  43. 2.7.2 需要考虑的其他因素 
  44. 2.8 事件代理与消息代理 
  45. 2.8.1 从不可变日志中消费 
  46. 2.8.2 提供单一事实来源 
  47. 2.9 大规模管理微服务 
  48. 2.9.1 将微服务放到容器内 
  49. 2.9.2 将微服务放到虚拟机内 
  50. 2.9.3 管理容器和虚拟机 
  51. 2.10 缴纳微服务税 
  52. 2.11 小结 
  53. 第3章 通信和数据契约 
  54. 3.1 事件驱动数据契约 
  55. 3.1.1 使用显式schema作为契约 
  56. 3.1.2 schema定义的注释 
  57. 3.1.3 全能的schema演化 
  58. 3.1.4 有代码生成器支持 
  59. 3.1.5 破坏性的schema变更 
  60. 3.2 选择事件格式 
  61. 3.3 设计事件 
  62. 3.3.1 只讲述事实 
  63. 3.3.2 每个流都使用单一事件定义 
  64. 3.3.3 使用最窄的数据类型 
  65. 3.3.4 保持事件的单一用途 
  66. 3.3.5 最小化事件 
  67. 3.3.6 让潜在的消费者参与事件设计 
  68. 3.3.7 避免将事件作为信号量或信号 
  69. 3.4 小结 
  70. 第4章 将事件驱动架构与现有系统集成 
  71. 4.1 什么是数据解放 
  72. 4.1.1 数据解放的折中方案 
  73. 4.1.2 将被解放的数据转化成事件 
  74. 4.2 数据解放模式 
  75. 4.3 数据解放框架 
  76. 4.4 通过查询实施数据解放 
  77. 4.4.1 批量加载 
  78. 4.4.2 增量时间戳加载 
  79. 4.4.3 自增ID加载
  80. 4.4.4 自定义查询 
  81. 4.4.5 增量更新 
  82. 4.4.6 基于查询更新的优点 
  83. 4.4.7 基于查询更新的缺点 
  84. 4.5 使用变更数据捕获日志解放数据 
  85. 4.5.1 使用数据存储日志的优点 
  86. 4.5.2 使用数据库日志的缺点 
  87. 4.6 使用发件箱表解放数据 
  88. 4.6.1 性能考虑 
  89. 4.6.2 隔离内部数据模型 
  90. 4.6.3 确保schema兼容性 
  91. 4.6.4 使用触发器捕获变更数据 
  92. 4.7 对处于捕获的数据集做数据定义变更 
  93. 4.7.1 为查询和CDC日志模式处理事后数据定义变更 
  94. 4.7.2 为变更数据表捕获模式处理数据定义变更 
  95. 4.8 将事件数据落地到数据存储 
  96. 4.9 数据落地和获取对业务的影响 
  97. 4.10 小结 
  98. 第5章 事件驱动处理基础 
  99. 5.1 构建无状态拓扑 
  100. 5.1.1 转换 
  101. 5.1.2 分流与合流 
  102. 5.2 对事件流再分区 
  103. 5.3 对事件流协同分区 
  104. 5.4 给消费者实例分配分区 
  105. 5.4.1 使用分区分配器分配分区 
  106. 5.4.2 分配协同分区 
  107. 5.4.3 分区分配策略 
  108. 5.5 从无状态处理实例故障中恢复 
  109. 5.6 小结 
  110. 第6章 具有确定性的流处理 
  111. 6.1 事件驱动工作流的确定性 
  112. 6.2 时间戳 
  113. 6.2.1 同步分布式时间戳 
  114. 6.2.2 处理带时间戳的事件 
  115. 6.3 事件调度和确定性处理 
  116. 6.3.1 自定义事件调度器 
  117. 6.3.2 基于事件时间、处理时间和摄取时间进行处理 
  118. 6.3.3 消费者提取时间戳 
  119. 6.3.4 对外部系统的“请求–响应”调用 
  120. 6.4 水位 
  121. 6.5 流时间 
  122. 6.6 乱序事件和迟到事件 
  123. 6.6.1 使用水位和流时间的迟到事件 
  124. 6.6.2 乱序事件的原因和影响 
  125. 6.6.3 时间敏感的函数和窗口化 
  126. 6.7 处理迟到事件 
  127. 6.8 再处理与近实时处理 
  128. 6.9 间歇性故障和迟到事件 
  129. 6.10 生产者/事件代理的连接性问题 
  130. 6.11 小结与延展阅读 
  131. 第 7 章 有状态的流 
  132. 7.1 状态存储与从事件流中物化状态 
  133. 7.2 记录状态到变更日志事件流 
  134. 7.3 将状态物化至内部状态存储 
  135. 7.3.1 物化全局状态 
  136. 7.3.2 使用内部状态的优点 
  137. 7.3.3 使用内部状态的缺点 
  138. 7.3.4 内部状态的伸缩和恢复 
  139. 7.4 将状态物化至外部状态存储 
  140. 7.4.1 外部状态的优点 
  141. 7.4.2 外部状态的缺点 
  142. 7.4.3 外部状态存储的伸缩和恢复 
  143. 7.5 重建与迁移状态存储 
  144. 7.5.1 重建 
  145. 7.5.2 迁移 
  146. 7.6 事务与有效一次处理 
  147. 7.6.1 示例:库存计算服务 
  148. 7.6.2 使用“客户端–代理”事务的有效一次处理 
  149. 7.6.3 没有“客户端–代理”事务的有效一次处理 
  150. 7.7 小结 
  151. 第8章 用微服务构建工作流 
  152. 8.1 编排模式 
  153. 8.1.1 一个简单的事件驱动编排示例 
  154. 8.1.2 创建和修改编排的工作流 
  155. 8.1.3 监控编排的工作流 
  156. 8.2 编制模式 
  157. 8.2.1 一个简单的事件驱动编制模式例子 
  158. 8.2.2 一个简单的直接调用的编制模式例子 
  159. 8.2.3 对比事件驱动编制模式和直接调用的编制模式 
  160. 8.2.4 创建和修改编制工作流 
  161. 8.2.5 监控编制工作流 
  162. 8.3 分布式事务 
  163. 8.3.1 编排型事务:saga模式 
  164. 8.3.2 编制型事务 
  165. 8.4 补偿工作流 
  166. 8.5 小结 
  167. 第9章 使用“函数即服务”的微服务 
  168. 9.1 设计基于函数的微服务解决方案 
  169. 9.1.1 确保界限上下文的严格的成员关系 
  170. 9.1.2 只在完成处理之后提交偏移量 
  171. 9.1.3 少即是多 
  172. 9.2 选择FaaS供应商 
  173. 9.3 在函数之外构建微服务 
  174. 9.4 冷启动和热启动 
  175. 9.5 用触发器启动函数 
  176. 9.5.1 基于新事件触发:事件流监听器 
  177. 9.5.2 基于消费者组的滞后度触发 
  178. 9.5.3 按调度表触发 
  179. 9.5.4 使用网络钩子触发 
  180. 9.5.5 触发资源事件 
  181. 9.6 用函数执行业务工作 
  182. 9.7 维持状态 
  183. 9.8 调用其他函数的函数 
  184. 9.8.1 事件驱动通信模式 
  185. 9.8.2 直接调用模式 
  186. 9.9 终止和关闭 
  187. 9.10 调整函数 
  188. 9.10.1 分配足够的资源 
  189. 9.10.2 批量事件处理的参数 
  190. 9.11 FaaS的伸缩方案 
  191. 9.12 小结 
  192. 第10章 基础的生产者和消费者微服务 
  193. 10.1 BPC的适用场合 
  194. 10.1.1 集成现有遗留系统 
  195. 10.1.2 不依赖于事件顺序的有状态的业务逻辑 
  196. 10.1.3 当数据层完成大部分工作时 
  197. 10.1.4 处理层和数据层独立伸缩 
  198. 10.2 具有外部流处理的混合BPC应用程序 
  199. 10.3 小结 
  200. 第11章 使用重量级框架的微服务 
  201. 11.1 重量级框架的简单历史 
  202. 11.2 重量级框架的内部运作 
  203. 11.3 优点和局限性 
  204. 11.4 集群搭建方案和执行模式 
  205. 11.4.1 使用托管服务 
  206. 11.4.2 构建自己的完整集群 
  207. 11.4.3 使用CMS集成来创建集群 
  208. 11.5 应用程序提交模式 
  209. 11.5.1 驱动器模式 
  210. 11.5.2 集群模式 
  211. 11.6 处理状态和使用检查点 
  212. 11.7 伸缩应用程序和处理事件流分区 
  213. 11.7.1 伸缩运行中的应用程序 
  214. 11.7.2 通过重启伸缩应用程序 
  215. 11.7.3 自动伸缩应用程序 
  216. 11.8 从故障中恢复 
  217. 11.9 考虑多租户问题 
  218. 11.10 语言和语法 
  219. 11.11 选择一个框架 
  220. 11.12 示例:点击和观看的会话窗口 
  221. 11.13 小结 
  222. 第12章 使用轻量级框架的微服务 
  223. 12.1 优点和局限性 
  224. 12.2 轻量级处理 
  225. 12.3 处理状态和使用变更日志 
  226. 12.4 伸缩和故障恢复 
  227. 12.4.1 事件洗牌 
  228. 12.4.2 状态分配 
  229. 12.4.3 状态复制和热副本 
  230. 12.5 选择一个轻量级框架 
  231. 12.5.1 Apache Kafka Streams 
  232. 12.5.2 Apache Samza:嵌入模式 
  233. 12.6 语言和语法 
  234. 12.7 流–表–表联结:增强模式 
  235. 12.8 小结 
  236. 第13章 集成事件驱动型和“请求–响应”型微服务 
  237. 13.1 处理外部事件 
  238. 13.1.1 自动生成的事件 
  239. 13.1.2 由响应生成的事件 
  240. 13.2 处理自动生成的分析事件 
  241. 13.3 集成第三方“请求–响应”API 
  242. 13.4 处理并提供有状态的数据 
  243. 13.4.1 实时请求内部状态存储 
  244. 13.4.2 实时请求外部状态存储 
  245. 13.5 在事件驱动的工作流中处理请求 
  246. 13.6 “请求–响应”应用程序中的微前端 
  247. 13.7 微前端的优点 
  248. 13.7.1 基于组合的微服务 
  249. 13.7.2 容易与业务需求对齐 
  250. 13.8 微前端的缺点 
  251. 13.8.1 可能不一致的UI元素和样式 
  252. 13.8.2 不同的微前端性能 
  253. 13.8.3 示例:体验搜索与评论应用程序 
  254. 13.9 小结 
  255. 第14章 支持性工具 
  256. 14.1 微服务–团队分配系统 
  257. 14.2 事件流的创建和修改 
  258. 14.3 事件流元数据标记 
  259. 14.4 限额 
  260. 14.5 schema注册表 
  261. 14.6 schema创建和修改通知 
  262. 14.7 偏移量管理 
  263. 14.8 事件流的权限和访问控制列表 
  264. 14.9 状态管理和应用程序重置 
  265. 14.10 消费者偏移量滞后度监控 
  266. 14.11 流水线型的微服务创建流程 
  267. 14.12 容器管理控制 
  268. 14.13 集群创建和管理 
  269. 14.13.1 事件代理的程序化创建 
  270. 14.13.2 计算资源的程序化创建 
  271. 14.13.3 跨集群事件数据复制 
  272. 14.13.4 工具的程序化创建 
  273. 14.14 依赖跟踪和拓扑可视化 
  274. 14.15 小结 
  275. 第15章 测试事件驱动型微服务 
  276. 15.1 通用测试原则 
  277. 15.2 单元测试拓扑函数 
  278. 15.2.1 无状态的函数 
  279. 15.2.2 有状态的函数 
  280. 15.3 测试拓扑 
  281. 15.4 测试schema演化和兼容性 
  282. 15.5 事件驱动型微服务的集成测试 
  283. 15.6 本地集成测试 
  284. 15.6.1 在测试代码的运行时内创建临时环境 
  285. 15.6.2 在测试代码外部创建临时环境 
  286. 15.6.3 使用mocking和模拟器方法集成托管服务 
  287. 15.6.4 集成没有本地支持的远程服务 
  288. 15.7 完全远程集成测试 
  289. 15.7.1 程序化创建临时集成测试环境 
  290. 15.7.2 使用共享环境进行测试 
  291. 15.7.3 使用生产环境进行测试 
  292. 15.8 选择你的完全远程集成测试策略 
  293. 15.9 小结 
  294. 第16章 部署事件驱动型微服务 
  295. 16.1 微服务部署的原则 
  296. 16.2 微服务部署的架构组件 
  297. 16.2.1 持续集成系统、持续交付系统和持续部署系统 
  298. 16.2.2 CMS和商业硬件 
  299. 16.3 基本的全站式部署模式 
  300. 16.4 滚动更新模式 
  301. 16.5 破坏性的schema变更模式 
  302. 16.5.1 通过两个事件流达到最终迁移 
  303. 16.5.2 同步迁移到新事件流 
  304. 16.6 蓝绿部署模式 
  305. 16.7 小结 
  306. 第17章 结论 
  307. 17.1 通信层 
  308. 17.2 业务领域和界限上下文 
  309. 17.3 可共享的工具和基础设施 
  310. 17.4 结构化事件 
  311. 17.5 数据解放和单一事实来源 
  312. 17.6 微服务 
  313. 17.7 微服务实现方案 
  314. 17.8 测试 
  315. 17.9 部署 
  316. 17.10 结语 
书名:微服务与事件驱动架构
作者:Adam Bellemare
译者:温正东 译
国内出版社:人民邮电出版社
出版时间:2021年10月
页数:230
书号:978-7-115-57110-6
原版书书名:Building Event-Driven Microservices
原版书出版商:O'Reilly Media
Adam Bellemare
 
亚当·贝勒马尔(Adam Bellemare),Confluent公司微服务架构师,精通大数据技术,曾受邀在Kafka峰会上做有关事件驱动型微服务的主题演讲。
 
 
购买选项
定价:99.80元
书号:978-7-115-57110-6
出版社:人民邮电出版社