Что такое синхронная репликация? Опишите её преимущества и недостатки.

Ответ

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

Пошаговый процесс:

  1. Клиент отправляет запрос на запись лидеру.
  2. Лидер записывает данные локально.
  3. Лидер пересылает данные всем синхронным репликам.
  4. Лидер ожидает подтверждения (acknowledgment) от каждой реплики.
  5. Только после получения всех подтверждений лидер отправляет клиенту ответ об успешном завершении операции.

Концептуальный пример на Go:

Этот код иллюстрирует блокирующую природу синхронной репликации. Функция не завершится, пока все реплики не "прочитают" данные из канала.

// replicas - это слайс небуферизованных каналов
func syncReplicate(data string, replicas []chan string) error {
    // Отправляем данные в каждую реплику.
    // Операция `replica <- data` является блокирующей.
    for _, replica := range replicas {
        replica <- data
    }
    // Функция вернет управление только после того,
    // как все реплики подтвердят получение данных (прочитав из канала).
    return nil
}

Преимущества:

  • Строгая согласованность (Strong Consistency): После успешной записи клиент гарантированно может прочитать эти данные с любой реплики.
  • Гарантия отсутствия потерь данных (Zero Data Loss): Если лидер выходит из строя после подтверждения записи, данные гарантированно сохранены как минимум на одной реплике.

Недостатки:

  • Высокая задержка записи (High Write Latency): Общая задержка операции определяется скоростью самого медленного узла в синхронной группе.
  • Низкая отказоустойчивость на запись: Если хотя бы одна синхронная реплика выходит из строя, вся система (или, по крайней мере, операции записи) может остановиться до её восстановления.

Примеры использования:

Синхронная репликация используется в системах, где сохранность и консистентность данных имеют наивысший приоритет, например:

  • Финансовые системы и банковские транзакции.
  • Управление критически важными конфигурационными данными.