【发布时间】:2018-06-19 06:32:21
【问题描述】:
我对事件溯源还很陌生,我们有一个域,我们考虑在其上应用事件溯源。
我们有一个应用程序将域事件存储到Oracle DB 和事件的消费者将使用它们来生成读取模型(所有读取模型都将在内存中生成),这些消费者将主要使用轮询模型来获取事件。
这意味着他们将收到一个请求,并根据该请求消费一个事件流并生成他们的读取模型,然后将其返回给调用者。
例如
Event Generation API --> 为类型 A 的聚合生成事件并将它们存储在 Oracle DB 中。
Consumer 1 --> 获取特定类型 A 聚合的请求,然后获取事件并重放它们以准备其读取模型。
Consumer 2 --> 做同样的事情,但呈现不同的读取模型
我们为什么要使用 ES
- 我们需要提供每次更改的数据历史表示形式以及该更改时的聚合状态。
- 我们需要能够在每个事件的任何时间点获取聚合的快照,例如,在更改名称时,我们需要该名称更改事件时间的聚合状态
- 我们需要表示时间点之间聚合状态的差异
但是所有这些要求都需要以轮询的方式完成,这意味着消费者将在某个时间点请求视图(可能是最新的或以前的)
问题 1
既然consumer 1 和consumer 2 都将执行基本相同的逻辑来重放事件,那么重放事件的代码应该在哪里呢?我们会实现一个通用的库代码吗?这是否意味着我们将在消费者之间拥有重复的重放代码?
我担心当我们更新一个事件架构时,我们需要更新多个消费者
问题 2
这是一个很好的事件溯源案例吗?
【问题讨论】:
标签: events architecture microservices cqrs event-sourcing