0

我正在尝试基于 AWS 无服务器架构实现 CQRS + 事件溯源后端。问题在于 readmodel 更新。

当事件保存到事件存储时,它会发布到 SNS。SNS 然后调用UpdateReadModellambda。当多个顺序事件发布到 SNS 时,会调用多个 lambda。

一个问题是它们都执行相同的 ReadModel 更新,实际上只有一个 lambda 必须为所有事件调用。

第二问题是,最终的 ReadModel 状态可能会在多次执行 lambdas 后被破坏。

要求每个 ReadModel 只调用一个 lambda。

可能的解决方案:

  1. 使用 MessageBroker(RabbitMQ 或 Kafka)+ EC2 实例调用UpdateReadModelLambda.

  2. 在 SNS + EC2 实例之后添加 SQS,并编写调用 lambdas 并从 SQS 获取事件的代码。

但我不想使用实例,因为它不适合无服务器方法,开发人员应该手动管理和扩展容器或 MessageBus。

也许有人已经解决了这个问题或有其他云服务 + CQRS + EventSourcing 的解决方案?

4

1 回答 1

2

使用消息代理进行预测通常不是一个好主意。你不能保证排序,你不能保证只交付一次,你不能只为一个读取模型重放事件,因为其他读取模型将再次获得相同的事件,你不能拥有事件驱动的系统,因为在重放时它们也会获得集成事件。我不会那样做。

您可以使用由事件存储操作(例如 Dynamo 插入)触发的 lambda 函数。每个 lambda 可以是一种聚合类型的投影集合,也可以是一个单一的投影。不过,请记住,如果您重试,您有可能会出现乱序的事件,我非常不确定您是否可以在那里禁用并行化。

于 2017-09-12T08:48:02.953 回答