首页 > 解决方案 > 在多个数据库上使用 Mongoose-Transactions

问题描述

我正在创建一个由多个微服务组成的 Node.js API。

每个微服务负责我的应用程序的一个或多个功能。但是,我的数据被结构化为多个数据库,每个数据库都有多个集合。

现在我需要一种服务来跨多个数据库执行原子操作。如果一切都发生在同一个数据库中,我会使用普通事务。但是,我不知道如何使用多个数据库执行此操作,或者这是否可能?

示例

其中一个微服务负责创建用户。必须在两个数据库中创建一个用户。但是,这应该以原子方式发生,即如果创建了用户,则必须在两个数据库中都创建它。

更新MongoDB 的官方文档声明如下:

使用分布式事务,可以跨多个操作、集合、数据库、文档和分片使用事务。

不过,我还没有找到任何关于如何使用 mongoose 执行分布式事务的信息。

如果有人能就这个话题给我一些澄清,我会非常高兴。

标签: node.jsmongodbmongoosetransactionsnosql

解决方案


您需要使用微服务架构的SAGA 模式

SAGA 模式分为两种类型:

  1. 基于编舞的传奇
  2. 基于编排的传奇

如果您想从单个服务管理分布式事务,那么您可以使用基于 Orchestration 的 saga (2)。

因此,使用这种模式,您可以实现一个分布式事务,该事务要么执行一个动作链,要么沿着链回滚,使用补偿事务。

我还推荐在这个网站上学习微服务架构的模式并推荐这本书


推荐阅读