失效链接处理 |
微服务与事件驱动架构 PDF 下载
下载地址:
版权归出版社和原作者所有,链接已删除,请购买正版
用户下载说明:
电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:
https://product.dangdang.com/29311962.html
相关截图: 资料简介: 微服务既有同步实现,亦有异步实现。异步微服务架构以事件驱动,不受特定的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 |