CQRS 与数据库副本集

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

我对

CQRS(Command and Query Responsibility Segregation)
模式有一点困惑。

我们知道,在

CQRS
中,读写操作应该发生在分离的数据库上。而在应用层面,当写操作发生时,我们需要将数据同步到读数据库。例如,下图显示了将数据写入
sqlite
并将基于
rabbitmq
的数据同步到mongodb 作为读取数据库的CQRS 模式。 (这里展示的基本例子是基于这篇文章谈CQRS)

而且我们也知道,生产中的数据库作为一个集群运行,由一个

replica set
组成,可以提供高可用性特性。在副本集中,
primary
服务器接收写入(和读取)操作并将数据同步到
secondary
服务器(可以响应读取请求)。集群做了很多复杂的工作(比如选举算法)来保持副本集之间的一致性。

我的困惑点是,如果我们在应用程序级别使用

CQRS
模式,我们已经将数据库进行了读写分离。这里的数据库是独立服务器或集群(其中包含读/写服务器)。

本题不提供示例代码,更像是一道架构级别的题

cqrs mongodb-replica-set
1个回答
0
投票

数据库中的读写分离比CQRS更多的是一个实现细节。 CQRS 就是关于分离读取和写入的实现。但是,你怎么做取决于你。

其次,在您的图片中,我认为在读写端之间使用队列并不是最佳选择。例如:

更简单灵活的做法是让读端从写端“拉”出自己需要的数据。这简化了写端的实现。

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