Обработка распределенных транзакций

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

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

Но прежде чем продолжить, давайте рассмотрим сначала монолитную систему. Ниже -- интернет-магазин, где применяются транзакции:

Взаимодействие пользователя с платформой осуществляется по следующему алгоритму: - пользователь отправляет запрос на заказ (Checkout); - платформа создает локальную транзакцию в БД; - эта транзакция охватывает много таблиц базы данных, что необходимо для обработки заказа (Process) и резервирования (Reserve) нужных товаров на складе.

Важно отметить, что если любой из вышеописанных шагов не будет совершен, то и транзакция может откатиться, как итог -- отказ от заказа и от резервирования. Такой набор принципов называют ACID (Atomicity, атомарность; Consistency, согласованность; Isolation, изоляция; Durability, долговечность), причем выполнение гарантируется на уровне системы БД.

Воспользовавшись микросервисной архитектурой, можно декомпозировать систему:

Таким образом, были созданы микросервисы OrderMicroservice и InventoryMicroservice, которые обладают отдельными базами данных. Теперь, когда пользователь отправляет запрос на заказ (Checkout), происходит вызов обоих микросервисов, причем каждый из них осуществляет внесение изменений в свою БД. А так как транзакция уже распределяется на несколько БД во множестве систем, ее можно назвать распределенной.

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

По материалам статьи "Handling Distributed Transactions in the Microservice world".