如何在CQRS中的微服务体系结构中同步两个数据库,以分开的数据库进行读/写

时间:2019-06-25 07:12:00

标签: sql-server microservices cqrs data-synchronization

在这次采访中有人问我这个问题:

如何同步两个数据库数据?会有时间延迟等。我们该如何处理?

背景:我提到了微服务体系结构,还使用CQRS来提高性能(独立的读/获取查询数据库)和独立的写命令数据库。

现在,如果客户输入或修改数据,如何将其复制/同步到读取的数据库中?

我说的是诸如cosmos db options之类的东西,它可以防止脏读等。但是我不确定要进行同步的所有各种选项是什么。采访者在SQL DB级别专门问我如何在两个DB之间进行同步。

2 个答案:

答案 0 :(得分:1)

在SQL Server中有两个用于数据库同步的选项。

1。 SQL Server始终启用功能(SQL 2012及更高版本)-使用此功能,您需要制作一个主副本和辅助副本(可以是多个二级副本) ),配置了Always On功能后,第二个副本将根据主副本更新自动更新。这还提供了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 Server复制-合并复制,事务复制等。 https://docs.microsoft.com/en-us/sql/relational-databases/replication/types-of-replication?view=sql-server-2017

答案 1 :(得分:0)

  1. CQRS是一种模式,它指示 Command Query 操作的职责是分开的。
  2. 现在有多种方法可以使数据库之间的数据同步。您可以使用主从配置 Oplog复制机制或非常特定于数据库的东西。
  3. 但是在这里更重要的是决定使用哪种策略。因为,您现在使用的是CQRS模式,所以您拥有多个数据存储(写存储,读存储),并且这些数据存储很有可能被网络分区。在这种情况下,您将必须决定最重要的一致性可用性,这通常由业务需求决定。

因此,通常,要使用哪种复制策略取决于您的企业是否需要一致性可用性

参考

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