在事件源系统中删除带有墓碑和 Public/私有数据的事件

Deleting Events with Tombstones and Public / Private Data in an Event-Sourced System

David Schmitz 提到了在事件源系统中删除用户数据的解决方案 in this talk。它是这样工作的:

问题 #1

逻辑删除事件写入哪个流?

具体用户的事件流?或者是否有专门针对墓碑事件的事件流?


此外,为了保留一些数据(例如用户的 ID),他建议将用户流拆分为 public 和私有事件流。 (Reference to the talk)

问题 #2

您实际上如何将事件附加到两个流?

假设一个命令需要将事件附加到 public 和私人用户流。您如何确保两个事件都已附加?事件存储是否将 SomeUserEventHapppendPrivateSomeUsererEventHappendPublic 都发布到事件总线?您会为两个流独立创建快照吗?在我看来,这似乎是一个很大的开销。


P.S。我也想听听有关删除事件源系统中数据的其他策略(除了加密事件然后删除密钥)。

问题 1: 您可以从一个事件 UserDeleteRequested 开始,它有两个标志,一个用于 public,一个用于私有。您将拥有负责此更改的 BoundedContext(和关联流)。其他服务可以按照您的描述收听该事件。

问题 2: 至于将数据分成两个流,这听起来像是同一 BC 中的两个聚合。您实际上如何将事件附加到两个流?您将使用 process/saga 加载每个聚合并在有效的两阶段提交中引发逻辑删除事件。