Синхронизация (репликация) данных
Зачем
Репликация представляет собой набор технологий копирования и распространения данных и объектов баз данных между базами данных, а также синхронизации баз данных для поддержания согласованности.
Сравнение видов репликации данных
- Блочная репликация - на уровне системы хранения данных
- имеет смысл, когда других способов репликации нет, для баз данных её лучше не использовать.
- Физическая репликация - хороша, когда требуется обеспечение отказоустойчивости инфраструктуры или перенос части читающих приложений на реплики
- Репликация транзакций СУБД
- mssql Log shipping/Always On
- pgsql Log shipping/Streaming replication
- Репликация данных Key-value - redis
- Репликация транзакций СУБД
- Логическая репликация - все изменения в базе данных происходят в результате вызовов её API – например, в результате выполнения SQL-запросов.
- подходит для обеспечения отказоустойчивости только в том случае, если приложение знает об этой репликации и умеет в случае аварии ждать синхронизации реплик.
- идеальна для всевозможных отчётных баз
- Платформы CDC хороши, если у вас большое количество реплицируемых баз и/или есть необходимость сложных преобразований данных.
- Репликация триггерами имеет смысл в том случае, если база сильно нагружена, а реплицировать нужно крайне ограниченное количество информации.
- Минусы: Потребуется изменения в монолите
- Разработка прикладной репликации оправдана только в случае разработки собственной платформы или фреймворка.
Паттерны
С ростом данных наблюдается изменение парадигмы:
- Значительный рост данных
- Код летит к данным
- Использование специализированных сервисов (CDC)
- Изменение парадигмы ETL на ELT
- Усложнение архитектуры для обработки данных
- Линейная масштабируемость
CDC vs ETL
CDC и ETL являются двумя разными подходами к обработке данных, отличия:
- Цель
- CDC: Целью CDC является захватывать и реплицировать изменения, происходящие в реальном времени в исходных базах данных, чтобы другие системы могли использовать эти обновленные данные.
- ETL: Цель ETL состоит в извлечении данных из различных источников, их преобразовании и загрузке в целевую систему данных для анализа или хранения.
- Временная задержка
- CDC: CDC обрабатывает изменения в режиме близком к реальному времени, что позволяет быстро обновлять данные в целевых системах.
- ETL: ETL выполняет процесс пакетно, обычно с фиксированной периодичностью (например, ежедневно или ежечасно), поэтому между изменениями и их загрузкой может быть некоторая задержка.
- Объем данных
- CDC: CDC обычно работает только с изменениями данных, поэтому объем передаваемых данных может быть гораздо меньше по сравнению с полным набором данных.
- ETL: В процессе ETL извлекаются и загружаются все данные, которые должны быть обработаны в процессе трансформации, даже если они не были изменены. Поэтому объем данных, передаваемых в процессе ETL, может быть значительно больше.