从 AWS Eventbridge 存档中读取事件数据

Read event data from AWS Eventbridge Archive

我正在为我们的事件采购解决方案寻找选项。我收到了使用 Eventbridge Archive 的建议,因为我们已经在使用 AWS Eventbridge。

就我所发现的存档功能而言,它可以存储我们发送到事件总线的所有事件,并可以稍后根据过滤器重播它们。

问题是我无法在不重播事件的情况下从该存档中读取数据。

有谁知道是否有 API 允许我这样做?

我在 Google 上可以找到的所有内容都是关于创建、存档和重放的,但与从存档中存储的事件中读取数据无关。

我找到了另一个 question,但没有任何答案。

(免责声明:此答案仅通过快速浏览 Eventbridge 文档得出)

事件溯源是一个有点过载的术语:它被用来表示从基于交换事件构建的架构到使用持久事件作为真实来源的一切。

在该术语的后一种用法中(可能称为“going full event sourcing”),严格来说,所有读取都是事件流的重放,存在多个事件流并且经常写入相同的事件到多个事件流(例如,“购物车已结帐”事件很可能会写入该特定购物车的事件流以及仅包含“购物车已结帐”事件的事件流)。

EventBridge 和 EventBridge Archive 似乎足以“进行完整的事件溯源”:这些事件流中的每一个都成为事件总线。即时创建新总线可能不符合人体工程学,并且将同一事件发布到多个流的机制可能很复杂(例如,服务获取基本事件并不断将它们投射到其他流),假设你有更少的超过 100 个实体(因为 AWS 账户限制为 100 个事件总线)。如果您有超过 100 个实体,那么 EventBridge 不适合事件溯源。

就是说,在事件源系统中,几乎普遍存在一些不能很好地映射到重播流的读取功能(例如,针对事件的临时 queries/aggregations)。这就是Command Query Responsibility Segregation的用武之地:采用CQRS就可以了

  • 应用程序中有多个数据模型
  • 让工作负载使用最适合该工作负载的数据模型

应用程序的 command-processing/write 端通常受益于事件源(特别是如果有基础设施来帮助并发 control/caching/maintaining single-writer 的某种组合)。然后,您将事件流投射到其他数据模型(例如数据库或搜索系统或警报基础设施)中,这些模型可以针对将针对它们执行的查询进行调整。

因此,您的问题最好表述为“我如何在事件源系统中执行 CQRS”,值得庆幸的是,有一个 well-established 的技术体系。在您的情况下,将(至少部分)流中的所有事件发送到将它们写入数据库的 Lambda 可能是支持 CQRS 的合理方式。