小编dim*_*vin的帖子

事件溯源和 CQRS,我错过了什么?

我开始阅读结合 CQRS 的 Event-Sourcing 模式。据我了解,CQRS 模式是一种我们将写入和读取操作分开的模式。事件溯源是一种模式,其中系统中的一切都由触发事件的命令启动。事件溯源模式需要一个事件总线。有几件事我没能理解。

事件存储包含发生在某个实体上的所有事件。如果我想查询这个实体的当前状态,我需要查询这个实体发生的所有事件,并重新创建它的当前状态。
所有事件历史记录都存在于事件存储中。
为什么我不能有一个负责将每个事件保存到事件数据库的微服务(如果我想记录这些事件以进行进一步的操作。比如 Kafka)和一个单独的微服务,它可以定期更新实体上的更改数据库(例如对 MongoDB 中实体文档的简单更新)。当这些微服务完成它们的工作时,这个事件将从事件存储中删除(假设我使用队列实现了这个事件存储)。这样,每当我需要查询实体的当前状态时,我只需查询数据库,而不是查询事件存储并重建当前状态(或根据事件存储重新计算状态并定期缓存结果) . 我不明白为什么必须永久存储所有事件,为什么它不是可选的?

例如,接收事件的 Lambda 函数会生成事件并将它们存储在针对每种事件类型的单独 SQS 中。每个 SQS 都有自己的 lambda 函数,负责处理相应的事件类型。处理完事件后将删除该事件。

design-patterns cqrs event-sourcing

5
推荐指数
3
解决办法
3028
查看次数

标签 统计

cqrs ×1

design-patterns ×1

event-sourcing ×1