EDM 实践指引
这是"把书的内容展开成工程可执行"——不是读书笔记合集,是事件驱动微服务的工程落地指引。
17 章按 Bellemare 原书顺序排列,每章展开为:原书说了什么 / 是什么 / 为什么 / 怎么做 / 何时用不用 / 失效模式 / 相关节点。
〇、实践指引定位
"实践指引"与"主题案例库"的区别:
| 维度 | 实践指引(book-guides/) | 主题案例库(modeling/.../) |
|---|---|---|
| 维度 | 按"原书"切 | 按"软件工程生命周期"切 |
| 回答 | "事件驱动微服务是什么 / 怎么做" | "建模 / 设计 / 实现 / 运营 / 演化怎么做" |
| 形态 | 忠实于原书 + 少量 AI 实践判断 | 跨书综合 + 跨原书共振 |
| 目的 | 深入一本书 | 跨主题比较 |
核心理念:第一轮忠实于原书,第二/三轮再探索互联网扩充实践例子。
一、EDM 是什么
事件驱动微服务(Event-Driven Microservices):以事件流作为单一事实源(SSOT),微服务从流中物化状态(materialize state)的分布式架构风格。
Bellemare 4 特征:
- 异步消费/生产(非同步调用)
- 事件持久化(消费后不销毁,可重放)
- 小而专(一个 BC 一个服务)
- 自治(独立部署/演化)
与其他书的关系:
- IDDD 给"领域事件"概念(ch08)+ "集成限界上下文"模式(ch13)
- EDM 给"事件流作为 SSOT"基础设施 + 微服务拓扑 + Saga + 框架选型
- 两者互补:IDDD = 战略/战术 / EDM = 基础设施/集成/运维
二、核心论断 7 条
| # | 论断 | 出处 |
|---|---|---|
| 1 | 事件流 = SSOT(单一事实源) | Ch 1 |
| 2 | McLuhan 媒介论:媒介决定耦合 | Ch 1 |
| 3 | Conway 定律:业务通信结构 → 实现通信结构 | Ch 1 |
| 4 | Single Writer Principle:一个聚合 = 一个微服务 = 唯一写者 | Ch 2 |
| 5 | Schema 演化 3 类型:Forward / Backward / Full | Ch 3 |
| 6 | Choreography vs Orchestration 决策树 | Ch 8 |
| 7 | Saga = 多步 + 补偿(无分布式事务) | Ch 8 |
三、17 章地图
| Ch | 标题 | 核心主题 | 升格价值 |
|---|---|---|---|
| 1 | Why Event-Driven Microservices | 通信结构、McLuhan、Conway | ★★★ |
| 2 | Event-Driven Microservice Fundamentals | 微服务拓扑、事件 3 类型、Single Writer | ★★★★ |
| 3 | Communication and Data Contracts | Schema 演化、契约优先 | ★★★★★ |
| 4 | Integrating with Existing Systems | CDC、迁移策略 | ★★★ |
| 5 | Event-Driven Processing Basics | 3 步处理、单事件 vs 多事件 | ★★ |
| 6 | Deterministic Stream Processing | 确定性流处理 | ★★★ |
| 7 | Stateful Streaming | 状态物化、本地 vs 共享 | ★★★★ |
| 8 | Building Workflows with Microservices | Choreography、Orchestration、Saga | ★★★★★ |
| 9 | FaaS Microservices | 函数即服务 | ★★ |
| 10 | Basic Producer/Consumer | 基础生产者/消费者 | ★★ |
| 11 | Heavyweight Framework | Kafka Streams、Flink | ★★★ |
| 12 | Lightweight Framework | 轻量框架 | ★★ |
| 13 | Integrating Event-Driven + Request-Response | 混合架构 | ★★★ |
| 14 | Supportive Tooling | DevOps、监控、追踪 | ★★★ |
| 15 | Testing Event-Driven Microservices | 测试策略、契约测试 | ★★★★ |
| 16 | Deploying Event-Driven Microservices | 部署策略、CI/CD | ★★ |
| 17 | Conclusion | 总结 | ★★ |
四、何时用 EDM 何时不用
用 EDM 的 2 大场景
| 场景 | 关键判断 | 实例 |
|---|---|---|
| 跨服务业务事实需要可靠传递 | 业务事件不止一个消费者,且需追溯 | 订单生命周期、支付链路、库存变更 |
| 业务需要解耦团队独立演化 | 多个团队各自负责 BC,且 BC 频繁变更 | 电商订单/库存/支付/物流分离 |
不适用 EDM 的 4 大场景
| 场景 | 原因 | 替代方案 |
|---|---|---|
| 单体足够的小系统 | 微服务税 > 收益 | 单体 + 模块化 |
| 强一致 + 低延迟(如交易撮合) | 事件最终一致延迟不满足 | 同步 RPC + 强一致数据库 |
| 极简 CRUD + 单团队 | 复杂度过剩 | REST + 数据库 |
| 客户端直连 + 实时双向 | 事件单向 + 持久不适合 | WebSocket / gRPC stream |
五、与其他实践指引的关系
IDDD(DDD 战略战术)
↓ 领域事件 + 集成 BC
EDM(事件驱动基础设施)
↓ Schema 演化 + Saga
├── 工程层:单写者 + 拓扑 + 框架选型
└── 哲学层:涌现 + 解耦 + 自治互补关系:
- IDDD ch08 领域事件 ↔ EDM ch2 事件结构
- IDDD ch13 集成 BC ↔ EDM ch8 Saga + ch4 CDC
- IDDD ch10 聚合 ↔ EDM ch2 Single Writer
六、状态
| 项 | 状态 |
|---|---|
| 文件数 | 18(17 章 + index) |
| 总行数 | 1688 |
| V2 来源 | meta/source/event-driven/ |
| 升格范本 | 已对齐 V4 9 段(部分章需第二轮扩充) |
| 待第二轮 | ch05/09/10/11/12/14/16(深度不足) |
| 待第三轮 | 框架对比、工具选型、监控方案 |