Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: transactional, outbox

Что такое transactional outbox и зачем он используется?

Вопрос проверяет, знаете ли вы, как надёжно синхронизировать изменения в БД и публикацию событий.

Короткий ответ

Transactional outbox — это паттерн, при котором бизнес-данные и событие записываются в одну транзакцию базы данных. Событие сохраняется в специальную outbox-таблицу. Отдельный процесс позже читает эту таблицу и публикует события в брокер. Это устраняет проблему “данные сохранились, а событие не ушло” или наоборот. Паттерн часто используют в микросервисах с асинхронным взаимодействием.

Длинный ответ

Определение

Transactional outbox — архитектурный паттерн, гарантирующий, что изменения в базе данных и соответствующие события будут зафиксированы атомарно.

Проблема, которую он решает

Без outbox возможна ситуация:

  1. Транзакция в БД закоммитилась.

  2. Отправка события в брокер упала.

  3. Другие сервисы никогда не узнают об изменении.

Или наоборот — событие отправлено, а данные не сохранены.

Как работает transactional outbox

  1. В рамках одной транзакции:

    • обновляются бизнес-таблицы;

    • вставляется запись в outbox-таблицу.

  2. После коммита:

    • отдельный worker читает outbox;

    • публикует события в брокер;

    • помечает записи как обработанные.

Упрощённый пример (идея)

with db.transaction():
    save_order(order)
    save_outbox_event(
        type="OrderCreated",
        payload={"order_id": order.id}
    )

Почему часто выбирают Postgres

  • Надёжные транзакции.

  • Простая реализация outbox-таблицы.

  • Возможность блокировок, batch-чтения, индексов.

  • Хорошо сочетается с CDC и logical replication.

Ограничения и нюансы

  • Нужно чистить outbox-таблицу.

  • Публикация событий происходит не мгновенно.

  • Worker должен быть устойчив к повторам.

Вывод

Transactional outbox — базовый паттерн для надёжной интеграции БД и событий, когда нельзя позволить себе рассинхронизацию данных и сообщений.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Postgres

    Postgres

Ключевые слова

#transactional

#outbox

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.