Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: two phase commit, distributed transaction

Почему «отправка в брокер до коммита» не решает транзакционность с двумя очередями?

Вопрос проверяет опыт работы с брокерами.

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

С двумя независимыми очередями вы упираетесь в проблему двойной записи и отсутствие атомарности между БД и обоими брокерами. Без 2PC (дорого/редко доступно) единственный практичный путь — Outbox + идемпотентные публикации.

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

Проблема:

  • «Записал в БД → опубликовал в A → упал на публикации в B» — состояние рассинхронизировано.

Почему не 2PC:

  • брокеры часто не поддерживают общий координирующий протокол с СУБД;

  • это усложняет и снижает доступность.

Решение:

  • Outbox (одна транзакция в БД);

  • релей публикует в обе очереди, ретраит до успеха;

  • консумеры/побочные системы — идемпотентны.

Вывод: для нескольких очередей используйте Outbox и надежные ретраи вместо попыток «одной глобальной транзакции».

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Postgres

    Postgres

  • Kafka

    Kafka

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

#two phase commit

#distributed transaction

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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