如果处理命令有延迟,但我只有一个数据库,这是否是一个称为最终一致性的问题?

问题描述 投票:0回答:1

我知道有一个称为最终一致性的问题,涉及两个数据库(读数据库和写数据库)。

但是如果我们有一个数据库并使用消息代理怎么办?如果有时在处理命令并将结果保存到数据库时存在延迟,这也是一个称为最终一致性的问题还是与最终一致性不完全相关?

microservices domain-driven-design cqrs eventual-consistency
1个回答
0
投票

从高层次来看,最终一致性(在 CQRS 上下文中)的含义是“从已知命令已成功到该命令导致的状态变化可见时,可以有一段可观察的时间段(对于查询)”。

因此,如果您有一个设计,可以接收命令(例如通过 HTTP),处理它,并向代理发布消息以更新读取模型(即使在同一个数据库中)并成功响应,则有最终一致性(在获取成功响应后,可以在使用来自代理的消息的进程更新读取模型之前立即查询读取模型)。

如果有其他一些设计(例如)您没有透露命令是否实际上导致了状态更改(例如,您只承认该命令已发布到代理),那么这就回避了最终一致性的定义(尽管就用户而言,这与最终一致性没有什么区别;就用户/设备等对他们如何与应用程序交互有自己的看法而言,可以说存在不可避免的最终一致性。 ).

© www.soinside.com 2019 - 2024. All rights reserved.