事件风暴基础:概念、核心元素与工作坊流程

事件风暴(Event Storming)是由 Alberto Brandolini 提出的一种协作建模技术,通过高密度、低仪式感的 workshop 形式,让领域专家与技术人员在短时间内共同发现业务全貌。在分布式事务场景中,事件风暴是识别一致性边界、定位事务冲突、设计补偿流程的核心前置活动。

2.1 事件风暴的核心概念

事件风暴以“领域事件”为时间轴,通过“命令→事件→读模型→聚合→角色”的递进关系,逐步构建出完整的业务全景图。其核心理念是:先发现发生了什么,再分析谁触发了它,最后确定谁负责处理。

关键认知:事件风暴不是 UML 或架构图,而是一种“协作发现”技术。它产出的画布是后续设计聚合、限界上下文、事务边界和 Saga 流程的直接输入。

2.2 核心元素详解

事件风暴使用五种颜色便签(或数字节点)来区分不同元素,每种元素承载特定的建模语义:

元素 颜色(参考) 定义 示例(订单场景)
领域事件 橙色 业务中已经发生的、不可改变的事实,通常使用过去时态 “订单已创建”、“库存已扣减”、“支付已完成”
命令 蓝色 触发领域事件的用户意图或系统指令,通常使用祈使句 “提交订单”、“扣减库存”、“执行支付”
聚合 黄色 领域事件的产生者和消费者,是数据一致性的最小边界 “订单聚合”、“库存聚合”、“账户聚合”
角色 粉色 发起命令的人或外部系统,代表业务参与方 “买家”、“卖家”、“支付网关”、“物流系统”
读模型 绿色 执行命令时需要查询的已有数据或视图 “商品库存视图”、“用户信用额度”
实践建议:在分布式事务画布中,领域事件是 Saga 流程的“检查点”,命令对应 Saga 的“步骤”,聚合对应事务的“资源管理器”。这种映射关系能帮助团队直接从事件风暴过渡到 TCC/Saga 设计。

2.3 核心元素关系图

下图展示了事件风暴中五种核心元素之间的典型协作关系:角色发出命令,命令在聚合上执行并产生领域事件,领域事件可能触发新的命令或更新读模型。

事件风暴核心元素关系图 事件风暴核心元素关系图 角色 买家 / 支付网关 命令 提交订单 聚合 订单聚合 领域事件 订单已创建 读模型 库存视图 说明 角色 → 命令 → 聚合 → 领域事件 → 更新读模型 → 触发新命令(循环)

2.4 工作坊流程:四阶段法

标准的事件风暴工作坊通常分为四个阶段,每个阶段聚焦不同的建模深度。在分布式事务项目中,建议将第四阶段扩展为“事务与补偿设计”。

  1. 混沌探索(Chaotic Exploration):所有参与者自由粘贴领域事件,不讨论对错,目标是覆盖尽可能多的业务事实。通常持续 30-60 分钟。
  2. 时间线排序(Timeline Sorting):将领域事件按时间顺序从左到右排列,形成业务时间轴。此时开始识别“命令”和“角色”,贴在对应事件左侧。
  3. 聚合与边界识别(Aggregate & Boundary):将相关的事件和命令归入黄色聚合框,确定每个聚合的职责和一致性边界。这是分布式事务拆分的关键步骤。
  4. 策略与热点(Policy & Hotspot):标记业务策略(如“库存不足时拒绝订单”)、异常流程、补偿动作和事务热点。在分布式事务项目中,此阶段直接产出 Saga 步骤和补偿方案。
常见陷阱:团队容易在第一阶段过度讨论“命令”和“聚合”的归属,导致探索阶段时间过长。正确的做法是:先只贴事件,再补充命令,最后才画聚合。跳过这个顺序会丢失大量隐性业务知识。

2.5 工作坊流程与产出物

下表总结了每个阶段的输入、活动、产出物及其在分布式事务设计中的用途:

阶段 核心活动 主要产出物 分布式事务用途
混沌探索 自由粘贴领域事件 事件池(Event Pool) 识别所有可能的事务参与者
时间线排序 排列事件顺序,补充命令和角色 时间轴画布 确定 Saga 步骤顺序
聚合与边界 归并聚合,标记限界上下文 聚合地图 + 上下文映射 定义事务边界和资源锁范围
策略与热点 标记策略、异常、补偿 热点清单 + 补偿流程 设计补偿事务和回滚逻辑

2.6 工作坊流程示意图

下图展示了四阶段工作坊的递进关系,以及每个阶段在分布式事务设计中的关键产出:

事件风暴工作坊四阶段流程 事件风暴工作坊四阶段流程 阶段1:混沌探索 粘贴领域事件 产出:事件池 阶段2:时间线排序 排列事件+命令 产出:时间轴画布 阶段3:聚合与边界 归并聚合 产出:聚合地图 阶段4:策略与热点 标记补偿 产出:补偿流程 分布式事务设计映射 阶段1 → 识别事务参与者(资源管理器) 阶段2 → 确定 Saga 步骤顺序与依赖关系 阶段3 → 定义事务边界与一致性单元(聚合) 阶段4 → 设计补偿事务与回滚策略

2.7 在分布式事务项目中的实践要点

  • 事件粒度控制:领域事件应处于“业务有意义”的粒度。例如“订单已提交”是合适的事件,而“订单总价已计算”通常过于细节,应合并到“订单已提交”中。
  • 聚合与事务边界:一个聚合对应一个强一致性边界。在分布式事务中,跨聚合的操作必须通过 Saga 或 TCC 实现最终一致性。
  • 补偿事件标记:在第四阶段,使用特殊标记(如红色闪电符号)标注需要补偿的事件,这些事件将直接转化为 Saga 的补偿步骤。
  • 角色即参与者:每个角色在分布式事务中对应一个事务参与者(如支付网关、库存服务),角色的数量直接影响事务协调的复杂度。
推荐工具:物理白板 + 便签仍是事件风暴的最佳载体。如果远程协作,可以使用 Miro、MURAL 或专业的 Event Storming 工具(如 EventStorming Studio)。数字工具应支持颜色标记、自由移动和无限画布。