TGViewer
System Design World System Design World @system_design_world · 5.97K subscribers
Post #665 2.2K
💻 System Design: что такое CDC

В прошлом посте мы разобрали CQRS на примере booking-сервиса.

У нас была схема:
🫰 Админ обновляет данные номера в Postgres.
🔍 Пользователь ищет номера через ElasticSearch.

Между ними есть важная часть:
Postgres -> CDC -> ElasticSearch

CDC - Change Data Capture.
Перевожу для себя так - Захват Изменяющихся Данных
Если просто - CDC позволяет отследить изменения в базе данных и передать их дальше в другую систему.

CDC отвечает на вопрос:
«Как изменения из source of truth доезжают до read model?»

В нашем примере:
Postgres - source of truth.
ElasticSearch - read model для быстрого поиска.
CDC - механизм доставки изменений между ними.

❓ Как реализовать эту концепцию?
Один из способов реализовать CDC - outbox pattern.

Идея:
Когда сервис обновляет данные в Postgres, он в той же транзакции записывает событие в отдельную таблицу, называемую outbox.

Например:
➡️ Обновили цену номера в таблице rooms.
➡️ В этой же транзакции записали событие room_price_updated в таблицу outbox_events.
➡️ Отдельный worker читает outbox_events.
➡️ Worker отправляет изменение дальше.

Почему это удобно?
➡️ Потому что изменение данных и запись события происходят атомарно.

Мы избежим ситуации, когда:
➡️ Данные в Postgres обновились.
➡️ А событие для ElasticSearch потерялось.

👍 Плюсы outbox pattern:
🤎 Надёжность: данные и событие записываются в одной транзакции.
🤎 Можно контролировать формат события.
🤎 Хорошо подходит для бизнес-событий: RoomUpdated, PriceChanged, BookingCreated.
🤎 Можно добавить retry, статус обработки и dead letter queue.

Минусы:
Давайте опишем в комментариях 👍

Итог:
CDC - это способ доставить изменения из source of truth в другие системы.
А outbox pattern - это один из практичных способов сделать такую доставку надёжнее.
Цена - больше инфраструктурной логики и больше ответственности за обработку событий.

Больше про паттерн:
🔘50 оттенков Transactional Outbox - Денис Цветцих
🔘Transaction Outbox под нагрузкой: как не потерять ни одного события при 100k+ RPS - Олег Мифле
🔘Outbox pattern для System Design Интервью - моя статья
  • 🔥 7
  • ❤ 3
  • 👍 2
More from @system_design_world
  1. Sep 24, 2026🤖 AI-агент как System Design задача. Что скрыто под этим громким названием AI-агент? Сооб…
  2. Sep 22, 2026🛒 Мои отношения с Т-Банком. Part II. System Design 📕 Для подготовки к System Design Инте…
  3. Sep 21, 2026🛒 Мои отношения с Т-Банком. Part I 2019 год. Собеседование. Трушное в офисе. На северо-за…
  4. Sep 19, 2026AI System Design Интервью в Т-Банк. Первое в рунете. Эксклюзив для участников сообщества.…
  5. Sep 16, 2026🤷‍♂️ Что находится на серверной стороне AI? ⚡️ Огромную ИИ инфраструктуру нужно поддержив…
  6. Sep 14, 2026🔠🔠🔠 CAP в System Design Что это? ➡️Теорема Сложная? ➡️Нет Для чего полезно знать? ☑️Для…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →