Что такое синхронная репликация в контексте баз данных?

«Что такое синхронная репликация в контексте баз данных?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Синхронная репликация — это режим репликации, при котором основная (master) база данных ждет подтверждения записи данных от одной или нескольких синхронных реплик (standby), прежде чем подтвердить транзакцию клиенту. Это гарантирует, что данные на реплике идентичны данным на мастере в момент подтверждения записи.

Как это работает (на примере PostgreSQL):

  1. Клиент отправляет команду COMMIT.
  2. Master записывает данные в свой WAL (Write-Ahead Log).
  3. Master отправляет WAL-данные на синхронную реплику и ждет подтверждения о их записи на диск реплики.
  4. Только получив подтверждение от реплики, master подтверждает (COMMIT) транзакцию клиенту.

Настройка в PostgreSQL (postgresql.conf):

# Указываем имена синхронных реплик
synchronous_standby_names = 'standby1'
# Или для нескольких реплик (здесь требуется подтверждение от любой одной из двух)
synchronous_standby_names = 'ANY 1 (standby1, standby2)'

# Уровень синхронности
synchronous_commit = 'on'  # или 'remote_write', 'remote_apply' для разных уровней гарантий

Плюсы и минусы с точки зрения DevOps:

Плюсы Минусы
Гарантия нулевой потери данных (RPO=0): При аварии мастера данные точно есть на реплике. Увеличенная задержка записи (latency): Зависит от сетевой задержки до реплики.
Строгая согласованность (strong consistency): Реплика всегда имеет актуальные данные. Риск недоступности: Если синхронная реплика отключится, мастер может заблокировать запись (в зависимости от настроек).
Мгновенный failover: Реплика готова стать новым мастером без потери транзакций. Сложность и стоимость: Требует мощной сети и инфраструктуры.

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