Обработка распределенных транзакций
При разработке бэкенда высоконагруженных сервисов нередко используются распределенные транзакции. Рассмотрим, что это такое.
Если транзакции охватывают много физических систем либо компьютеров в сети, они называются распределенными. Например, при использовании микросервисной архитектуры транзакция распределяется между множеством сервисов, причем эти сервисы вызываются в определенной последовательности в целях завершения всей транзакции. Микросервисы, по сути, -- это распределенная система.
Но прежде чем продолжить, давайте рассмотрим сначала монолитную систему. Ниже -- интернет-магазин, где применяются транзакции:
Взаимодействие пользователя с платформой осуществляется по следующему алгоритму: - пользователь отправляет запрос на заказ (Checkout); - платформа создает локальную транзакцию в БД; - эта транзакция охватывает много таблиц базы данных, что необходимо для обработки заказа (Process) и резервирования (Reserve) нужных товаров на складе.
Важно отметить, что если любой из вышеописанных шагов не будет совершен, то и транзакция может откатиться, как итог -- отказ от заказа и от резервирования. Такой набор принципов называют ACID (Atomicity, атомарность; Consistency, согласованность; Isolation, изоляция; Durability, долговечность), причем выполнение гарантируется на уровне системы БД.
Воспользовавшись микросервисной архитектурой, можно декомпозировать систему:
Таким образом, были созданы микросервисы OrderMicroservice и InventoryMicroservice, которые обладают отдельными базами данных. Теперь, когда пользователь отправляет запрос на заказ (Checkout), происходит вызов обоих микросервисов, причем каждый из них осуществляет внесение изменений в свою БД. А так как транзакция уже распределяется на несколько БД во множестве систем, ее можно назвать распределенной.
Вроде бы все неплохо, но при выполнении распределенных транзакций в микросервисах мы тоже можем столкнуться с определенными проблемами. О них поговорим в следующий раз.
По материалам статьи "Handling Distributed Transactions in the Microservice world".