Top.Mail.Ru
Разработка
C#
Синхронизация данных в распределённых системах: как не утонуть в consistency и latency
10 апреля
17.00-17.40
Зал 2

1. Контекст задачи

Много доменных сервисов, единый источник данных (MongoDB)

Несколько целевых хранилищ: Postgres, ElasticSearch

Требования:

near-real-time синхронизация

масштабирование по объёму и числу сущностей

минимальная нагрузка на source

Почему «просто репликация» не подходит

2. Первая версия: синхронизация через джобы

Periodic batch-job:

читали данные из Mongo

трансформировали

писали в целевую БД

Плюсы:

просто

прозрачно

Минусы, которые быстро всплыли:

высокая latency

сложность масштабирования

нет изоляции ошибок по сущностям

3. Проблемы, которые джобами не решить

Расхождение данных между источником и приёмником

Повторные апдейты и race conditions

Невозможность быстро пересинхронизировать одну сущность

Ручные костыли для частичных падений

Чем больше данных → тем хуже становится всё

4. Переход к CDC и стриминговой архитектуре

Почему решили уйти от batch-подхода

Debezium + Kafka как транспорт изменений

Что реально дало CDC:

инкрементальные изменения

снижение нагрузки на Mongo

Какие новые проблемы появились сразу

5. Архитектура синхронизации сейчас

Разделение на этапы:

Source → Kafka

Converter

Destination

Почему нет «одного универсального пайплайна»

Разные стратегии для:

Mongo

Postgres

Elastic

Как выглядит поток данных end-to-end

6. Consistency на практике

Почему strict consistency невозможна

Как обеспечиваем:

порядок изменений

идемпотентность

корректные апдейты

Работа с повторной доставкой и дублями

7. Latency и её контроль

Где реально теряется время:

Kafka

batching

consumer lag

транзакции в destination

8. Инфраструктура и эксплуатация

Масштабирование консьюмеров

Партиционирование

Dead Letter Queue

Повторная обработка и ресинхронизация

Что происходит при падении одной части пайплайна

9. Сравнение: было vs стало

Batch jobs vs streaming

Latency: минуты → секунды

Нагрузка на source

Управляемость и дебаг

Цена поддержки решения

10. Выводы и уроки

CDC — это начало, а не решение

Архитектура синхронизации важнее инструментов

Consistency и latency — это управляемые компромиссы

Почему мы бы сразу не пошли этим путём заново