Sobes.tech
Senior
17

Зачем писать в таблицу Outbox, если данные уже есть в основной таблице? Почему не читать WAL напрямую?

Companies where asked
Позитив Технолоджис

Answer from AI

sobes.tech AI

Таблица Outbox используется для реализации паттерна "Outbox" в архитектуре микросервисов и систем с распределёнными транзакциями. Основная идея — гарантировать атомарность записи данных и отправки событий (например, сообщений в очередь) в рамках одной транзакции базы данных.

Почему не читать WAL напрямую:

  • WAL (Write-Ahead Log) — это внутренний журнал базы данных, предназначенный для восстановления после сбоев, а не для бизнес-логики. Он не имеет стабильного API для чтения и может меняться между версиями СУБД.
  • Чтение WAL напрямую сложно и ненадёжно, требует глубокого понимания формата и может привести к ошибкам.
  • Outbox — это явная таблица, в которую пишутся события в рамках той же транзакции, что и основная запись. Это упрощает логику обработки и интеграцию с внешними системами.

Таким образом, Outbox обеспечивает:

  • Гарантию, что событие не будет потеряно или отправлено дважды.
  • Простоту интеграции с системами обмена сообщениями.
  • Отделение бизнес-данных от инфраструктурных логов базы.

Пример использования:

BEGIN;
INSERT INTO orders (...) VALUES (...);
INSERT INTO outbox (event_type, payload) VALUES ('OrderCreated', '{...}');
COMMIT;

Затем отдельный процесс читает из outbox и отправляет события в очередь.