Anton Sidorov homepage

Bookmark this to keep an eye on my project updates!

Follow me on GitHub

Синхронизация (репликация) данных

Зачем

Репликация представляет собой набор технологий копирования и распространения данных и объектов баз данных между базами данных, а также синхронизации баз данных для поддержания согласованности.

Сравнение видов репликации данных

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

Паттерны

  • Master-slave replica
    • Log shipping
    • Always On
  • ETL
  • ELT
  • CDC

С ростом данных наблюдается изменение парадигмы:

  • Значительный рост данных
  • Код летит к данным
  • Использование специализированных сервисов (CDC)
  • Изменение парадигмы ETL на ELT
  • Усложнение архитектуры для обработки данных
  • Линейная масштабируемость

CDC vs ETL

CDC и ETL являются двумя разными подходами к обработке данных, отличия:

  • Цель
    • CDC: Целью CDC является захватывать и реплицировать изменения, происходящие в реальном времени в исходных базах данных, чтобы другие системы могли использовать эти обновленные данные.
    • ETL: Цель ETL состоит в извлечении данных из различных источников, их преобразовании и загрузке в целевую систему данных для анализа или хранения.
  • Временная задержка
    • CDC: CDC обрабатывает изменения в режиме близком к реальному времени, что позволяет быстро обновлять данные в целевых системах.
    • ETL: ETL выполняет процесс пакетно, обычно с фиксированной периодичностью (например, ежедневно или ежечасно), поэтому между изменениями и их загрузкой может быть некоторая задержка.
  • Объем данных
    • CDC: CDC обычно работает только с изменениями данных, поэтому объем передаваемых данных может быть гораздо меньше по сравнению с полным набором данных.
    • ETL: В процессе ETL извлекаются и загружаются все данные, которые должны быть обработаны в процессе трансформации, даже если они не были изменены. Поэтому объем данных, передаваемых в процессе ETL, может быть значительно больше.

Технологии