名词定义
事件驱动架构:Event Driven Architecture,简称 EDA
事件溯源:Event Sourcing,简称 ES
写在前边
我之前对「事件驱动架构」和「事件溯源」这两个概念的理解是比较模糊的,所以查了下资料,结论是「事件驱动架构」和「事件溯源」没有太多的可对比性。为了说明这两个概念的区别,后文我会从目的、范围、数据存储、可测试性这几方面分别对「事件驱动架构」和「事件溯源」做下介绍。
事件溯源
事件溯源指的是将应用状态的所有变化存储为一连串事件的系统。一个常见的例子是支持事务的数据库系统,它将所有状态变化存储在事务日志中。
在事件溯源中,术语「事件」指的不仅仅是「通知」,更多指的是「状态变化」。事件溯源使用只追加存储来记录对数据采取的完整系列操作,而不是仅存储域中数据的当前状态。因此,所有的历史操作都会被保留。
事件驱动架构
事件驱动架构这一术语可用于任何类型的软件系统,它基于仅通过事件进行通信的组件。事件驱动架构是一种松耦合、分布式的驱动架构,收集到某应用产生的事件后实时对事件采取必要的处理后路由至下游系统,无需等待系统响应。
在事件驱动架构中,一个事件可以被定义为「状态的重大变化」。在事件驱动架构的背景下,术语「事件」通常意味着「通知」。
事件溯源 vs 事件驱动架构
目的
- 事件溯源是一种持久化策略的代替方案,目的是保留历史。
- 事件驱动架构是一种分布式异步架构模式,用于提升应用程序的扩展性。
范围
- 事件溯源通常应用于单一的系统或应用,
- 事件驱动架构在多个系统或应用中使用。作为一种可靠的集成模式,具有很高的灵活性,可迅速响应不断变化的环境。
数据存储
- 事件溯源有一个中央事件仓库,通常有副本、分片等。它依赖于一个中央数据库。
- 事件驱动架构是分布式的,每个组件或处理器都是解耦的,可能各自有独立的仓库。
可测实性
- 事件溯源更容易测试,因为它可以从头开始重放整个事件序列,直到达到某个状态或情况。
- 事件驱动架构很容易单独测试每个组件,但由于这种模式的异步性,对整体的测试就比较复杂了。
综合
事件溯源模式 | 事件驱动架构模式 | |
---|---|---|
目的 | 保留历史 | 提高适应性和扩展性 |
范围 | 单一系统或应用 | 多个系统或应用 |
存储 | 中央事件仓库 | 分布式存储 |
测试 | 更简单 | 更困难 |
两者都以事件为基础,但其目的、范围和属性却截然不同。