1. Синхронная репликация

В синхронной репликации операция записи считается успешной только тогда, когда данные были записаны как на основной узел, так и на реплику. Это гарантирует отсутствие потерь данных, но может вызвать задержку из-за ожидания подтверждения.

Как это работает:

  1. Клиент отправляет запрос на запись на основной узел.
  2. Основной узел записывает данные в локальное хранилище.
  3. Основной узел ждет подтверждения от реплик, что они также записали данные.
  4. Как только все реплики подтверждают запись, основной узел отправляет подтверждение обратно клиенту.

Преимущества и недостатки:

Гарантированная консистентность данных (нет риска потери данных).
Сильная консистентность (реплики всегда имеют актуальные данные).
Высокая задержка (записи происходят медленнее, так как нужно ждать подтверждения реплик).
Узкие места производительности (если реплика медленная, это влияет на всю систему).

Применение:

  • Финансовые транзакции (банкинг, торговля акциями), где консистентность данных критична.
  • Важные приложения, где потеря данных недопустима, даже если это снижает скорость.

2. Асинхронная репликация

В асинхронной репликации основной узел сразу подтверждает запись, не ожидая реплик. Это делает процесс намного быстрее, но существует риск потери данных, если основной узел выйдет из строя до завершения репликации.

Как это работает:

  1. Клиент отправляет запрос на запись на основной узел.
  2. Основной узел записывает данные и немедленно подтверждает клиенту.
  3. Основной узел отправляет данные репликам в фоновом режиме.
  4. Реплики применяют изменения, но это происходит уже после того, как клиент получил подтверждение.

Преимущества и недостатки:

Быстрее операции записи (не нужно ждать подтверждения от реплик).
Лучшая масштабируемость (реплики не замедляют основной узел).
Потенциальная потеря данных (если основной узел выходит из строя до завершения репликации).
Постепенная консистентность (реплики могут содержать слегка устаревшие данные).

Применение:

  • Высокопроизводительные приложения, где скорость важнее, чем полная консистентность.
  • Аналитика и отчетность, где небольшие задержки в консистентности данных допустимы.
  • Распределенные системы, которым нужно эффективно масштабировать операции записи.

Таблица сравнения: синхронная vs. асинхронная репликация

ХарактеристикаСинхронная репликацияАсинхронная репликация
Консистентность данныхСильная (нет потери данных)Постепенная (некоторое замедление)
Задержка записиВысокая (ждут подтверждения)Низкая (немедленное подтверждение)
ПроизводительностьМедленнее (зависит от скорости реплик)Быстрее (не ждет реплик)
Риск потери данныхНетДа (если основной узел выйдет из строя до репликации)
ПрименениеБанковские операции, финансовые транзакции, критические приложенияВеб-приложения, аналитика, хранение логов
МасштабируемостьОграниченная (из-за нагрузки на подтверждения)Высокая (основной узел может обрабатывать больше записей)

Репликация в ClickHouse

ClickHouse использует асинхронную репликацию по умолчанию для высокой пропускной способности записи. Движок ReplicatedMergeTree гарантирует, что данные в конце концов станут консистентными на всех узлах. Если требуется сильная консистентность, приложения должны запрашивать кворум реплик.

Репликация в PostgreSQL / MySQL / MongoDB

  • PostgreSQL: Поддерживает как синхронную (2PC), так и асинхронную репликацию.
  • MySQL: По умолчанию используется полусинхронная репликация (гибрид синхронной и асинхронной).
  • MongoDB: Использует асинхронную репликацию в репликационных наборах