事件风暴基础:概念、核心元素与工作坊流程
事件风暴(Event Storming)是由 Alberto Brandolini 提出的一种协作建模技术,通过高密度、低仪式感的 workshop 形式,让领域专家与技术人员在短时间内共同发现业务全貌。在分布式事务场景中,事件风暴是识别一致性边界、定位事务冲突、设计补偿流程的核心前置活动。
2.1 事件风暴的核心概念
事件风暴以“领域事件”为时间轴,通过“命令→事件→读模型→聚合→角色”的递进关系,逐步构建出完整的业务全景图。其核心理念是:先发现发生了什么,再分析谁触发了它,最后确定谁负责处理。
关键认知:事件风暴不是 UML 或架构图,而是一种“协作发现”技术。它产出的画布是后续设计聚合、限界上下文、事务边界和 Saga 流程的直接输入。
2.2 核心元素详解
事件风暴使用五种颜色便签(或数字节点)来区分不同元素,每种元素承载特定的建模语义:
| 元素 | 颜色(参考) | 定义 | 示例(订单场景) |
|---|---|---|---|
| 领域事件 | 橙色 | 业务中已经发生的、不可改变的事实,通常使用过去时态 | “订单已创建”、“库存已扣减”、“支付已完成” |
| 命令 | 蓝色 | 触发领域事件的用户意图或系统指令,通常使用祈使句 | “提交订单”、“扣减库存”、“执行支付” |
| 聚合 | 黄色 | 领域事件的产生者和消费者,是数据一致性的最小边界 | “订单聚合”、“库存聚合”、“账户聚合” |
| 角色 | 粉色 | 发起命令的人或外部系统,代表业务参与方 | “买家”、“卖家”、“支付网关”、“物流系统” |
| 读模型 | 绿色 | 执行命令时需要查询的已有数据或视图 | “商品库存视图”、“用户信用额度” |
实践建议:在分布式事务画布中,领域事件是 Saga 流程的“检查点”,命令对应 Saga 的“步骤”,聚合对应事务的“资源管理器”。这种映射关系能帮助团队直接从事件风暴过渡到 TCC/Saga 设计。
2.3 核心元素关系图
下图展示了事件风暴中五种核心元素之间的典型协作关系:角色发出命令,命令在聚合上执行并产生领域事件,领域事件可能触发新的命令或更新读模型。
2.4 工作坊流程:四阶段法
标准的事件风暴工作坊通常分为四个阶段,每个阶段聚焦不同的建模深度。在分布式事务项目中,建议将第四阶段扩展为“事务与补偿设计”。
- 混沌探索(Chaotic Exploration):所有参与者自由粘贴领域事件,不讨论对错,目标是覆盖尽可能多的业务事实。通常持续 30-60 分钟。
- 时间线排序(Timeline Sorting):将领域事件按时间顺序从左到右排列,形成业务时间轴。此时开始识别“命令”和“角色”,贴在对应事件左侧。
- 聚合与边界识别(Aggregate & Boundary):将相关的事件和命令归入黄色聚合框,确定每个聚合的职责和一致性边界。这是分布式事务拆分的关键步骤。
- 策略与热点(Policy & Hotspot):标记业务策略(如“库存不足时拒绝订单”)、异常流程、补偿动作和事务热点。在分布式事务项目中,此阶段直接产出 Saga 步骤和补偿方案。
常见陷阱:团队容易在第一阶段过度讨论“命令”和“聚合”的归属,导致探索阶段时间过长。正确的做法是:先只贴事件,再补充命令,最后才画聚合。跳过这个顺序会丢失大量隐性业务知识。
2.5 工作坊流程与产出物
下表总结了每个阶段的输入、活动、产出物及其在分布式事务设计中的用途:
| 阶段 | 核心活动 | 主要产出物 | 分布式事务用途 |
|---|---|---|---|
| 混沌探索 | 自由粘贴领域事件 | 事件池(Event Pool) | 识别所有可能的事务参与者 |
| 时间线排序 | 排列事件顺序,补充命令和角色 | 时间轴画布 | 确定 Saga 步骤顺序 |
| 聚合与边界 | 归并聚合,标记限界上下文 | 聚合地图 + 上下文映射 | 定义事务边界和资源锁范围 |
| 策略与热点 | 标记策略、异常、补偿 | 热点清单 + 补偿流程 | 设计补偿事务和回滚逻辑 |
2.6 工作坊流程示意图
下图展示了四阶段工作坊的递进关系,以及每个阶段在分布式事务设计中的关键产出:
2.7 在分布式事务项目中的实践要点
- 事件粒度控制:领域事件应处于“业务有意义”的粒度。例如“订单已提交”是合适的事件,而“订单总价已计算”通常过于细节,应合并到“订单已提交”中。
- 聚合与事务边界:一个聚合对应一个强一致性边界。在分布式事务中,跨聚合的操作必须通过 Saga 或 TCC 实现最终一致性。
- 补偿事件标记:在第四阶段,使用特殊标记(如红色闪电符号)标注需要补偿的事件,这些事件将直接转化为 Saga 的补偿步骤。
- 角色即参与者:每个角色在分布式事务中对应一个事务参与者(如支付网关、库存服务),角色的数量直接影响事务协调的复杂度。
推荐工具:物理白板 + 便签仍是事件风暴的最佳载体。如果远程协作,可以使用 Miro、MURAL 或专业的 Event Storming 工具(如 EventStorming Studio)。数字工具应支持颜色标记、自由移动和无限画布。