Sobes.tech
Back to questions
Senior
3

Что знаешь про Transactional Outbox и Saga? Расскажи практический кейс

Companies where asked
СБК ПАРУС

Answer from AI

sobes.tech AI

Transactional Outbox и Saga — паттерны для обеспечения согласованности данных в распределённых системах и микросервисах.

  • Transactional Outbox — паттерн, при котором изменения в базе данных и отправка сообщений в очередь событий происходят в рамках одной транзакции. Вместо непосредственной отправки сообщения, оно записывается в специальную таблицу (outbox). Отдельный процесс читает эту таблицу и публикует события в очередь. Это гарантирует, что сообщение не потеряется и не будет отправлено дважды.

  • Saga — паттерн управления распределёнными транзакциями через последовательность локальных транзакций с компенсационными действиями. Если одна из транзакций неудачна, выполняются компенсирующие операции для отката предыдущих шагов.

Практический кейс:

Представим микросервис для обработки заказов и микросервис для управления складом. Когда создаётся заказ, нужно:

  1. Записать заказ в базу (Order Service).
  2. Зарезервировать товар на складе (Inventory Service).
  3. Отправить уведомление клиенту.

Используем Transactional Outbox в Order Service: запись заказа и запись события "OrderCreated" в outbox — в одной транзакции. Затем событие публикуется в очередь.

Inventory Service слушает очередь, резервирует товар. Если резервирование не удалось, Saga запускает компенсирующую транзакцию — отмену заказа.

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