在事件源系统中删除带有墓碑和 Public/私有数据的事件
Deleting Events with Tombstones and Public / Private Data in an Event-Sourced System
David Schmitz 提到了在事件源系统中删除用户数据的解决方案 in this talk。它是这样工作的:
- 删除用户的所有事件
- 为该特定用户发出逻辑删除事件
- 其他服务也可能会监听 Tombstone 事件并清理数据
问题 #1
逻辑删除事件写入哪个流?
具体用户的事件流?或者是否有专门针对墓碑事件的事件流?
此外,为了保留一些数据(例如用户的 ID),他建议将用户流拆分为 public 和私有事件流。 (Reference to the talk)
问题 #2
您实际上如何将事件附加到两个流?
假设一个命令需要将事件附加到 public 和私人用户流。您如何确保两个事件都已附加?事件存储是否将 SomeUserEventHapppendPrivate
和 SomeUsererEventHappendPublic
都发布到事件总线?您会为两个流独立创建快照吗?在我看来,这似乎是一个很大的开销。
P.S。我也想听听有关删除事件源系统中数据的其他策略(除了加密事件然后删除密钥)。
问题 1: 您可以从一个事件 UserDeleteRequested 开始,它有两个标志,一个用于 public,一个用于私有。您将拥有负责此更改的 BoundedContext(和关联流)。其他服务可以按照您的描述收听该事件。
问题 2: 至于将数据分成两个流,这听起来像是同一 BC 中的两个聚合。您实际上如何将事件附加到两个流?您将使用 process/saga 加载每个聚合并在有效的两阶段提交中引发逻辑删除事件。
David Schmitz 提到了在事件源系统中删除用户数据的解决方案 in this talk。它是这样工作的:
- 删除用户的所有事件
- 为该特定用户发出逻辑删除事件
- 其他服务也可能会监听 Tombstone 事件并清理数据
问题 #1
逻辑删除事件写入哪个流?
具体用户的事件流?或者是否有专门针对墓碑事件的事件流?
此外,为了保留一些数据(例如用户的 ID),他建议将用户流拆分为 public 和私有事件流。 (Reference to the talk)
问题 #2
您实际上如何将事件附加到两个流?
假设一个命令需要将事件附加到 public 和私人用户流。您如何确保两个事件都已附加?事件存储是否将 SomeUserEventHapppendPrivate
和 SomeUsererEventHappendPublic
都发布到事件总线?您会为两个流独立创建快照吗?在我看来,这似乎是一个很大的开销。
P.S。我也想听听有关删除事件源系统中数据的其他策略(除了加密事件然后删除密钥)。
问题 1: 您可以从一个事件 UserDeleteRequested 开始,它有两个标志,一个用于 public,一个用于私有。您将拥有负责此更改的 BoundedContext(和关联流)。其他服务可以按照您的描述收听该事件。
问题 2: 至于将数据分成两个流,这听起来像是同一 BC 中的两个聚合。您实际上如何将事件附加到两个流?您将使用 process/saga 加载每个聚合并在有效的两阶段提交中引发逻辑删除事件。