Spring boot 如何在Microservices中的数据库(每个服务实例的每个数据库)之间同步数据?

Spring boot 如何在Microservices中的数据库(每个服务实例的每个数据库)之间同步数据?,spring-boot,architecture,microservices,distributed-computing,database-partitioning,Spring Boot,Architecture,Microservices,Distributed Computing,Database Partitioning,如果在微服务体系结构中,每个服务实例都有一个单独的数据库,我们如何保持数据同步?例如,如果instance#1提供一个请求并将数据存储在其数据库db#1中,而instance#2上的另一个请求需要通过instance#1插入db#1的数据,那么instance#2的数据库db#2如何从instance#2的数据库db#1中获取数据?我认为z-缩放是这里的解决方案 微服务架构使用了一种称为“最终一致性”的模式。正如您所描述的,新插入的数据不会直接在所有数据库中可用。你可以阅读更多关于它的内容 也就

如果在微服务体系结构中,每个服务实例都有一个单独的数据库,我们如何保持数据同步?例如,如果instance#1提供一个请求并将数据存储在其数据库db#1中,而instance#2上的另一个请求需要通过instance#1插入db#1的数据,那么instance#2的数据库db#2如何从instance#2的数据库db#1中获取数据?我认为z-缩放是这里的解决方案

微服务架构使用了一种称为“最终一致性”的模式。正如您所描述的,新插入的数据不会直接在所有数据库中可用。你可以阅读更多关于它的内容

也就是说,CQRS模式是解决数据分布/最终一致性问题的一种流行方式。

通过使用messagebroker/总线,您可以在队列上发布所谓的“事件”。 对更改/某些实体感兴趣的微服务可以订阅这些实体并将其保存在自己的数据库中。 这支持松散耦合的微服务,某些实体所需的数据存储在同一数据库中。数据复制是可以的,因为我们使用最终的一致性来确保(最终)所有的微服务都是同步的

可以找到有关使用微服务的CQRS模式的更多信息

这里有一个更实际的例子,我现在正在研究。语言为荷兰语,但流程应不言自明:

希望这有帮助!
我建议阅读以下主题:CQR、微服务、最终一致性和messagebrokers(rabbitmq、kafka等)

我认为问题与单个服务有两个实例运行单独的DB实例有关。理想情况下,它不应该是架构设计。但是,即使您希望为每个实例创建数据库,也要寻找数据库同步工具。如果是这种情况,CQRS仍然适用,由于您仍然使用messagebroker来共享创建的实体,我认为CQRS用于查询来自多个服务的数据,而SAGA模式用于维护跨服务的数据一致性。我认为您将这两个术语切换到了新的位置。我的问题是关于同一服务的每个实例的数据库之间的数据同步。我同意,理想情况下,我们应该拥有一个数据库/服务,而不是数据库/实例,但在特殊情况下,如果有数据库/实例,我们如何在每个实例的数据库之间立即同步数据?每个微服务单独的数据库模式是最佳做法。但微服务的每个实例都不应该有自己的数据库。