多年来,开发人员已经使用传统的创建、读取、更新、删除(CRUD)模型实现了持久性。如前所述,事件溯源模型通过将状态更改存储为历史事件(在数据存储发生写操作之前捕获业务活动)来实现持久性。这将事件从存储机制中分离出来,允许对事件进行聚合,或将它们放置在具有逻辑边界的组中。事件溯源是支持并发分布式系统实现高性能、可伸缩性和弹性的模式之一。
在分布式架构中,事件溯源提供了以下优点:

  • 在传统的CRUD模型中,实体实例通常被表示为内存中的可变对象和关系数据库表中的可变行。这导致了臭名昭著的对象关系不匹配。创建对象-关系映射器是为了弥合这一鸿沟,但也带来了新的复杂性。事件溯源模型将数据库视为序列化事件的追加日志。它不试图在数据库模式中直接建模每个实体的状态或它们之间的关系。这大大简化了写入和读取数据库的代码。
  • 实体如何达到其当前状态的历史记录将保留在存储事件中。事务性数据和审计数据之间的一致性得到了保证,因为它们实际上是相同的数据。
  • 您可以分析事件流并从中获得重要的业务信息——可能在设计事件时根本没有考虑到这些信息。您可以在系统活动中添加新的视图,而不会使写侧变得更复杂。
  • 提高了写性能,因为所有类型的事件都只是追加到数据存储中,而没有更新和删除。
  • 基于事件的系统易于测试和调试。为了测试目的,可以模拟命令和事件。事件日志为调试提供了良好的记录。如果在生产环境中检测到问题,则可以在受控环境中重播事件日志,以了解实体是如何达到坏状态的。

延伸阅读

关于事件溯源和CQRS的完整讨论超出了本文档的范围。要了解更多信息,我们推荐以下方法: