CQRS和微服务中的数据管理

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

我是微服务架构的新手,在此文档http://microservices.io之后,我学到了很多关于它的基础知识,CQRS和事件源,但是我有一些尚不清楚的问题:

  1. 每个CQRS读取模型是否需要不同的数据库服务器,或者可以将它们放在同一数据库中但在不同的表中。

  2. 如果您有其他数据库,那么应该如何加入表。而且,如果我们使用相同的数据库,那么我们的微服务不会紧密耦合,这将使使用此体系结构的全部目的无法实现。

microservices cqrs event-sourcing
2个回答
0
投票

命令查询职责隔离(CQRS)是一种模式,您可以在其中将要更新的模型与该模型分开以读取数据。这意味着微服务的读取端将高度专业化且独立。

因此,在阅读方面,您可以拥有任意数量的数据库,通常,根据您需要执行的数据和查询的类型,您可以拥有一个经过专门优化的数据库。例如,您可以使用Elastsearch进行快速搜索,或者使用Neo4J进行图形结构。

这些数据库由您的微服务发布的Events更新,因此您不必在不同数据库之间联接表,它们是独立的。

无论您是否为每个微服务都使用关系数据库并具有Query服务来连接来自多个数据库的数据,这是一种反模式,它将在服务之间创建一对,并且受到锁表的影响。


0
投票

每个CQRS读取模型是否需要不同的数据库服务器,或者可以将它们放在相同的数据库中但在不同的表中。

您通常希望使用不同的逻辑数据库。它们可能恰好托管在同一持久性存储设备上,但是任何代码都不应期望将数据存储在同一位置。

如果您有不同的数据库,那么应该如何联接表。

您应该NOT加入表。相反,您复制数据-从对写有意义的表示转换为对读有意义的表示。

如果我们使用相同的数据库,那么我们的微服务不会紧密耦合,这将使使用该体系结构的全部目的失效

这种耦合实际上来自不同服务正在接触同一的假设。换句话说,我们不希望进程通过数据库进行[[communication。相反,我们在服务之间传递消息,并且服务管理它们自己的数据。

如果您没做错,那么您恰巧将数据存储在同一设备中这一事实就无关紧要了,因为您的服务实际上从不会出现在它们自己的小气泡之外。

表达相同想法的另一种方式:您应该能够更改“您的”模式,而无需与其他任何人进行协调。

假设我们有一个用户微服务和一个帖子微服务,我应该如何向发布这些帖子的每个用户查询这些帖子,如何管理不同微服务之间的相关数据?

您将数据复制到公共数据库,然后可以在其中创建所需的报告。

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