2. 事件风暴基础:定义、角色与四步法

事件风暴(Event Storming)是由 Alberto Brandolini 提出的一种协作建模技术,通过高密度、低仪式感的“工作坊”形式,让领域专家、开发人员、业务分析师和架构师在短时间内对齐业务全景。在分布式事务场景中,事件风暴是识别业务边界、发现聚合、定义一致性边界的关键前置活动。

核心定位:事件风暴不是一种编程技术,而是一种“知识获取与共享”的协作仪式。它用彩色便签和一条时间线,把隐性的业务知识显性化为可讨论、可验证的模型。

2.1 事件风暴的定义

事件风暴是一种基于“领域事件”的协作建模方法,参与者通过识别业务过程中发生的“事件”来逐步发现命令、聚合和限界上下文。其核心产出物包括:

产出物 说明 在分布式事务中的用途
领域事件流 按时间顺序排列的业务事实 识别事务触发点与补偿点
命令与角色 谁在什么条件下触发事件 定义权限边界与操作来源
聚合边界 高内聚的数据与行为单元 确定分布式事务的原子性范围
限界上下文 业务能力与数据所有权边界 划分服务边界与事务协议

2.2 事件风暴中的角色

一场成功的事件风暴工作坊需要以下角色参与,每个角色带来不同的视角:

  • 领域专家(Domain Expert) — 业务规则的最终权威,回答“为什么这样做”和“什么情况下会出错”。
  • 技术专家(Technical Expert) — 架构师、资深开发,负责评估技术可行性、识别分布式事务风险。
  • 引导师(Facilitator) — 控制节奏、提问、记录,确保讨论不偏离时间线。
  • 记录员(Scribe) — 将便签内容数字化,维护最终画布。
  • 决策者(Decision Maker) — 产品经理或业务负责人,在边界争议时做最终裁决。
实践建议:工作坊人数控制在 8–12 人最佳。人数过少视角单一,人数过多则讨论效率下降。引导师应确保领域专家发言时间占比超过 60%。

2.3 事件风暴四步法

四步法是事件风暴的标准流程,从混沌到有序,逐步收敛出可落地的模型。每一步对应一种颜色的便签:

步骤 便签颜色 核心问题 产出
1. 混沌(Chaos) 橙色 业务中发生了什么事实? 领域事件流(无序)
2. 命令(Command) 蓝色 谁在什么条件下触发事件? 命令与角色映射
3. 事件(Event) 橙色(精化) 事件的前置条件和后置结果是什么? 精化的事件流
4. 聚合(Aggregate) 黄色 哪些命令和事件属于同一个一致性边界? 聚合与限界上下文

步骤一:混沌(Chaos)

参与者自由地在时间线上贴出所有能想到的“领域事件”,不讨论对错、不排序、不质疑。目标是让隐性知识充分暴露。引导师在此阶段只做记录,不打断。

步骤二:命令(Command)

为每个事件贴上触发它的“命令”,并标注执行命令的“角色”。命令是用户或系统发出的指令,格式为“动词+宾语”,例如“提交订单”、“审批退款”。

步骤三:事件(Event)

重新审视事件,补充缺失的事件、删除重复事件、调整时间顺序。此时要关注事件的“因果链”:一个事件的发生是否导致另一个命令的触发?

步骤四:聚合(Aggregate)

将高内聚的命令、事件和数据归为一组,形成聚合。聚合是分布式事务的最小原子单元——一个事务只能修改一个聚合,跨聚合修改必须通过最终一致性。

常见误区:初学者容易在“混沌”阶段就开始讨论技术实现或数据库设计。引导师必须严格禁止,确保前两步只关注业务事实,不涉及技术细节。

2.4 四步法流程示意图

下图展示了四步法的演进关系,从无序的事件流逐步收敛为带有聚合边界的结构化模型:

事件风暴四步法演进流程 ① 混沌 无序领域事件 ② 命令 命令 + 角色 ③ 事件精化 因果链排序 ④ 聚合 — 一致性边界 聚合 A:订单 聚合 B:支付 聚合 C:库存 跨聚合事务原则 一个事务只修改一个聚合;跨聚合修改必须通过最终一致性 (Saga / 事件驱动 / 本地消息表)

2.5 四步法在分布式事务中的实践映射

将四步法的产出物映射到分布式事务设计,可以得到清晰的对应关系:

事件风暴步骤 分布式事务设计要素 示例
混沌(领域事件) 事务触发事件、补偿事件 订单已创建、支付已失败
命令(命令+角色) 事务发起方、权限校验点 用户提交订单 → 校验 token
事件精化(因果链) Saga 编排流程、事件溯源 订单创建 → 扣库存 → 支付
聚合(一致性边界) 事务原子性范围、锁粒度 订单聚合内强一致,跨聚合最终一致
关键洞察:事件风暴的“聚合”步骤直接决定了分布式事务的边界。如果聚合划分过粗,会导致锁竞争和性能瓶颈;如果聚合划分过细,则跨聚合的最终一致性复杂度会急剧上升。好的聚合边界是“高频操作在内部完成,低频跨聚合操作通过事件驱动”。

2.6 四步法常见避坑指南

  • 混沌阶段过度讨论 — 不要在一个事件上停留超过 2 分钟,先贴出来,后面再精化。
  • 命令与事件混淆 — 命令是“做某事”,事件是“某事已发生”。命令用蓝色便签,事件用橙色便签,严格区分。
  • 聚合粒度失控 — 如果一个聚合包含超过 7 个命令,通常意味着边界过大,需要拆分。
  • 忽略角色权限 — 每个命令必须标注执行角色,这是后续 OAuth2.0 权限设计的基础输入。
效率技巧:使用物理白板 + 便签进行首次工作坊,拍照留存;之后用 Miro 或 Draw.io 数字化。物理便签的“可移动性”能有效降低参与者的心理负担,促进自由表达。