事件溯源Event Sourcing
事件溯源(Event Sourcing)的核心是捕获应用状态的每一个更改。也就是说,在应用实体上执行的每一个操作,都会被持久化。然后,我们可以查询这些事件,并通过事件列表来重建对象的当前状态。
让我们看一个简单的例子来理解这个概念:假设我们有一个会计应用程序,此应用程序的任务是跟踪一个帐户上发生的所有事务。换句话说,Account是这个应用程序中的一个聚合。账户上的所有交易事务都会存储在Event Store中。
事件溯源是由事件驱动的,但是如何决定一个事件呢?
这里的事件完全依赖于业务,比如非常简单的事件,AccountCreatedEvent、AccountUpdatedEvent等等。
基本上,一个好的事件结构将在很大程度上帮助我们有效地使用事件溯源。
为什么需要事件溯源?
事件溯源有如下一些优点:
(1)事件溯源是更新状态和发布事件的最佳方法之一。正如我们所看到的,传统的方法是持久化聚合的当前状态。但是,在事件溯源中,聚合是作为事件序列存储的。基本上,对于每个状态的更改,都会创建一个新事件并添加到事件存储(Event Store)中,这种操作本质上是原子性的。
(2)另外一个好处是,使用事件溯源,我们可以获得非常准确的审计日志记录。也就是说,事件存储也可以作为审计日志。
(3)另外一个主要优点是能够运行时态查询。事件存储维护了聚合的完整历史记录,这使得重建对象的历史状态变得非常容易。换句话说,事件存储就像一台时间机器。如果出现任何生产问题,我们都可以在问题发生时,重建对象的状态进行调查。
(4)最后一个优势是,事件溯源提供了惊人的业务洞察力。例如,即使在Account这个小示例中,我们也可以清楚地看到发生在Account上的事件顺序。然而,我们间接地看到了客户生活中发生的事件。将同样的方法应用于业务环境中的百万客户和重要的聚合,可能会在业务决策中产生巨大的影响。