M
Maxim Korobov — DevBlog
@korobovdev60 подп.
137просмотров
19 февраля 2026 г.
provocation🎬 ВидеоScore: 151
Проблема Dual Write или как не терять данные в микросервисах Частый вопрос на собеседованиях и классическая ловушка для новичков. Представим сервис заказов: нужно обновить статус в БД и отправить событие в брокер (Kafka/RabbitMQ). Если делать это по очереди, мы рискуем: запись в БД пройдет, а брокер упадет. Данные разошлись, система в неконсистентном состоянии. Объединить их в одну транзакцию нельзя т.к. разные системы. Решение - паттерн Transactional Outbox: 1. В одной транзакции обновляем заказ и записываем событие в таблицу outbox в той же БД. 2. Гарантируется ACID. Либо сохранятся обе записи, либо ни одной. 3. Отдельный процесс читает таблицу outbox и перекладывает сообщения в брокер. Плюсы: ✅ Гарантированная доставка «At-least-once». ✅ Не нужны 2PC. ✅ Сервис не зависит от доступности брокера в моменте. Минусы: ⚠️Риск дублей: если процесс упадет после отправки, но до пометки «доставлено». Решается идемпотентным консьюмером. Сделал анимацию, как это работает на деле. Как вам такой формат?
137
просмотров
1016
символов
Нет
эмодзи
Да
медиа

Другие посты @korobovdev

Все посты канала →
Проблема Dual Write или как не терять данные в микросервисах — @korobovdev | PostSniper