Использовать Mon goose -Транзакции над несколькими базами данных - PullRequest
5 голосов
/ 25 марта 2020

Я создаю Node.js API, состоящий из нескольких микросервисов.

Каждый микросервис отвечает за одну или несколько функций моего приложения. Однако мои данные структурированы в несколько баз данных, каждая из которых имеет несколько коллекций.

Теперь мне нужен один сервис для выполнения операций atomi c в нескольких базах данных. Если бы все происходило в одной базе данных, я бы использовал обычную транзакцию. Однако я не знаю, как это сделать с несколькими базами данных или это вообще возможно?

Пример :

Одно из микросервисов позаботится создания пользователей. Пользователь должен быть создан внутри двух баз данных. Однако это должно происходить атомарно, т. Е. Если пользователь создан, он должен быть создан в обеих базах данных.

ОБНОВЛЕНИЕ : Официальные документы MongoDB указывают следующее:

С распределенными транзакциями транзакции можно использовать для нескольких операций, коллекций, баз данных, документов и шардов.

Я не нашел ничего о том, как выполнять распределенные транзакции с mon goose.

Я был бы очень рад, если бы кто-нибудь дал мне некоторые разъяснения по этой теме c.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Вам необходимо использовать шаблон SAGA архитектуры микросервиса.

Шаблон SAGA подразделяется на два типа:

  1. Сага на основе хореографии
  2. Сага на основе оркестровки

Если вы хотите управлять распределенными транзакциями из одного сервиса, вы можете использовать сагу на основе оркестровки (2).

В этом шаблоне вы можете реализовать распределенную транзакцию, которая либо выполняет цепочку действий, либо выполняет откат вдоль цепочки, используя компенсирующие транзакции.

Я также рекомендую изучить шаблоны микросервисной архитектуры на этом сайте и рекомендуем книгу .

1 голос
/ 18 апреля 2020

EDIT: Mon goose поддерживает распределенные транзакции, потому что это клиент для MongoDB Server. Форма Пн goose С точки зрения, распределенная транзакция - это просто транзакция .

Согласно этому видео, в Распределенные транзакции в MongoDB Распределенные транзакции определены выше уровня mon goose и могут его использовать.

в документация mongodb, они говорят:

Распределенные транзакции и транзакции с несколькими документами Начиная с MongoDB 4.2, эти два термина являются синонимами. Распределенные транзакции относятся к многодокументным транзакциям в защищенных кластерах и наборах реплик. Многодокументные транзакции (будь то в защищенных кластерах или наборах реплик) также называются распределенными транзакциями, начиная с MongoDB 4.2.

Вот как я бы попытался решить эту проблему (Разделяй и властвуй):

  1. Попробуйте простой пример Распределенных транзакций с MongoDB
  2. Затем попробуйте использовать простые mon goose с Транзакциями (это может быть Насколько известно mon goose, между распределенными транзакциями и нераспределенными транзакциями не должно быть никаких различий, поскольку транзакции находятся на более высоком уровне (см. видео).
  3. Затем попробуйте объединить 2 решения и убедитесь, что это работает,
  4. Если не работает с mon goose, я бы попытался реализовать Распределенные транзакции с MongoDB, так как видео подразумевает, что они потратили много усилий в этом направлении, и с понедельника goose просто позволяют вам делать то, что вы можете делать только с MongoDB. Переход с mon goose на MongoDB может быть не таким простым, но реализовать распределенные транзакции очень сложно.
...