Ответ
Плюсы:
✅ Гарантированная консистентность данных – все реплики синхронизированы.
✅ Нет риска потери данных при сбое, так как подтверждение записи требует успешного сохранения на всех репликах.
✅ Упрощает логику приложения, так как чтение с любой реплики даёт актуальные данные.
Минусы:
❌ Высокая задержка записи – ждём подтверждения от всех реплик.
❌ Доступность снижается – при отказе одной реплики система может стать недоступной для записи.
❌ Нагрузка на сеть – требуется синхронная передача данных между узлами.
// Пример (условный): синхронная запись в 3 реплики
err := db.ExecuteTransaction(func(tx *Transaction) error {
if err := tx.WriteToReplica("primary", data); err != nil {
return err
}
if err := tx.WriteToReplica("replica1", data); err != nil { // Ждём подтверждения
return err
}
if err := tx.WriteToReplica("replica2", data); err != nil { // Ждём подтверждения
return err
}
return nil
})