Что знаешь про Transactional Outbox и Saga? Расскажи практический кейс
Answer from AI
sobes.tech AI
Transactional Outbox и Saga — паттерны для обеспечения согласованности данных в распределённых системах и микросервисах.
-
Transactional Outbox — паттерн, при котором изменения в базе данных и отправка сообщений в очередь событий происходят в рамках одной транзакции. Вместо непосредственной отправки сообщения, оно записывается в специальную таблицу (outbox). Отдельный процесс читает эту таблицу и публикует события в очередь. Это гарантирует, что сообщение не потеряется и не будет отправлено дважды.
-
Saga — паттерн управления распределёнными транзакциями через последовательность локальных транзакций с компенсационными действиями. Если одна из транзакций неудачна, выполняются компенсирующие операции для отката предыдущих шагов.
Практический кейс:
Представим микросервис для обработки заказов и микросервис для управления складом. Когда создаётся заказ, нужно:
- Записать заказ в базу (Order Service).
- Зарезервировать товар на складе (Inventory Service).
- Отправить уведомление клиенту.
Используем Transactional Outbox в Order Service: запись заказа и запись события "OrderCreated" в outbox — в одной транзакции. Затем событие публикуется в очередь.
Inventory Service слушает очередь, резервирует товар. Если резервирование не удалось, Saga запускает компенсирующую транзакцию — отмену заказа.
Таким образом достигается согласованность между сервисами без распределённых транзакций.