如何在 CQRS 的微服务架构中同步两个数据库 read/write

How to Synch two databases in Microservice architecture in CQRS separate ones for read/write

我在这次采访中被问到这个问题:

如何同步两个数据库的数据?会有时间延误等,我们如何处理?

背景:我提到了微服务架构以及使用 CQRS 来提高性能(单独 Read/get 查询数据库)和单独的写入命令数据库。

现在,如果客户输入或修改数据,它将如何 replicated/synched 进入读取数据库?

我说的是 cosmos db 选项等防止脏读等的东西。我还提到了缓存。但我不确定同步的各种选项是什么。面试官在 SQL 数据库级别专门问我如何在两个数据库之间同步。

  1. CQRS 是一种模式,它规定 CommandQuery 操作的职责是分开的。
  2. 现在有多种方法可以在数据库之间同步数据。您可以使用 Master-Slave 配置 Oplog 复制机制 或非常特定于数据库的东西。
  3. 但这里更重要的是决定使用什么策略。因为,您现在使用的是 CQRS 模式,所以您拥有多个数据存储(写入存储、读取存储),并且这些数据存储很可能是网络分区的。在这种情况下,您必须决定什么对您来说最重要 一致性可用性,这通常取决于企业的需求。

所以一般来说,使用什么复制策略取决于你的业务需要一致性还是可用性

参考文献:

  1. CAP Theroem: https://en.wikipedia.org/wiki/CAP_theorem
  2. 复制(由 CAP 定理驱动):https://www.brianstorti.com/replication/

在 SQL 服务器中有几个数据库同步选项。

1. SQL 服务器始终开启功能(SQL 2012 年起) - 通过使用此功能, 你需要做一个primary和secondary replica(可以是多个secondary replica),一旦配置了Always On特性,Second replicas会根据Primary replica的更新自动更新。这也提供了 HADR 功能,如果主副本出现故障,辅助副本将处于活动状态并扮演主副本角色。 https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?view=sql-server-2017

2。 SQL 服务器复制 - 合并复制、事务复制等。 https://docs.microsoft.com/en-us/sql/relational-databases/replication/types-of-replication?view=sql-server-2017