распределенные транзакции с микро-сервисами и Spring Boot - PullRequest
0 голосов
/ 06 марта 2019

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

У меня есть микросервис, называемый микросервисом аутентификации, целью которого является аутентификация пользователей с использованием Oauth2.

Моя проблема заключается в следующем:

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

поэтому, когда я получаю эти данные, я должен сразу добавить пользователя и сотрудника. Теперь представьте, что пользователь был добавлен, но сотрудник не из-за какого-то сбоя? или даже хуже, представьте, когда я удаляю пользователя, а сотрудник не будет удален?

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

Я разместил вопрос, чтобы искать какие-то новые идеи или, может быть, есть какая-то новая технология, которую мне не хватает.

спасибо

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Как правило, есть два способа добиться того же:

  1. Шаблон SAGA - вы читаете его
  2. Вы делаете транзакцию в одном сервисе, затем другой сервис прослушивает событие ивыполнить обновление.Как и при удалении пользователя, сгенерируйте событие, которое UserRemoved и служба Employee прослушивают и удаляют работника.

Это очень важно понять в микросервисах:

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

Для таких вещей нам нужно сделатьСистема автоматического исправления таких несоответствий.Например:

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

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

0 голосов
/ 06 марта 2019

Добавление пользователя не должно быть задачей службы аутентификации. Вставьте сотрудника и пользователя в одну и ту же службу и уведомите службу проверки подлинности о новом пользователе. (используя одну из множества систем событий / сообщений)

...