Назад к вопросам
Senior
11
Что из себя представляет Outbox-паттерн? Как его реализуют?
Компании, где спрашивали
СБК ПАРУС
Ответ от нейросети
sobes.tech AI
Outbox-паттерн — это архитектурный подход для надёжной передачи сообщений между сервисами или компонентами, особенно в распределённых системах. Он решает проблему согласованности между записью данных в базу и отправкой сообщений (например, событий) в очередь.
Идея:
- Вместо прямой отправки сообщения в момент изменения данных, сервис записывает событие в специальную таблицу "outbox" в той же транзакции, что и основное изменение данных.
- Отдельный процесс или сервис периодически читает эту таблицу и отправляет сообщения в брокер (Kafka, RabbitMQ и т.п.).
- После успешной отправки сообщение помечается как отправленное или удаляется из таблицы.
Так достигается атомарность: либо данные и событие записаны вместе, либо не записаны вовсе, исключая рассинхронизацию.
Реализация:
- Добавить в базу таблицу
outboxс полями: id, payload (событие), status, timestamp. - В коде бизнес-логики в рамках одной транзакции:
- Обновить основные данные
- Записать событие в
outbox
- Запустить отдельный воркер, который:
- Периодически выбирает неотправленные события из
outbox - Отправляет их в систему обмена сообщениями
- Обновляет статус событий в
outbox
- Периодически выбирает неотправленные события из
Пример таблицы outbox:
CREATE TABLE outbox (
id UUID PRIMARY KEY,
event_type VARCHAR(255),
payload TEXT,
status VARCHAR(20),
created_at TIMESTAMP
);
Outbox-паттерн повышает надёжность интеграции и упрощает обработку ошибок в распределённых системах.