Написать свой CDC (Change Data Capture) на Rust — это звучит просто, пока не встретишься с PostgreSQL WAL, битовыми смещениями и проблемами репликации, которые проявляются только в production.
В этом докладе я расскажу о разработке собственного решения для захвата изменений данных — от архитектуры и процесса разработки до реальных критических ошибок, которые едва не развалили систему.
Что будет в докладе:
- Что такое CDC и почему это важно — почему синхронизация БД требует нетривиальных подходов
- Как PostgreSQL хранит изменения — WAL, логические репликационные слоты и логический декодинг
- Разработка CDC на Rust: на что обращать внимание — архитектурные решения и типичные ошибки
- Декодинг и WAL: трудные детали — как правильно читать и интерпретировать поток данных
- Debezium и альтернативы: почему свой инструмент — сравнение подходов и причины выбора
- Production reality: две глобальные проблемы — как ошибка в работе с битами и неверное масштабирование развалили систему (2 msg/sec → потеря данных, 100K/sec → стабильность)
- Бенчмарки и метрики в реальных условиях — что показали нагрузочные тесты
Это история о том, как строить high-load системы реального времени на Rust, когда готовые решения не подходят, и как учиться на своих ошибках.