Перейти к основному содержимому

028 Архитектура: репликация данных

  • Репликация — хранение копии данных на разных машинах соединенных сетью
  • цели
    • географически ближе — уменьшает скорость доступа
    • отказоустойчивость
    • увеличение производительности
  • частный случай: неизменяемые данные
    • вывод: главная сложность в распространении изменений
  • запись через лидера, чтение через реплики
    • синхронная и асинхронная репликация
      • при синхронной репликации падение одной ноды останавливает запись
    • добавление реплик
    • неполные данные (кеши)
    • восстановление после падения реплики
    • восстановление после падения мастера
      • переконфигурирование клиентов
      • автоматическое переключение мастера
        • проблема детектирования сбоя
        • проблема выбора нового мастера
        • проблемы переключения
          • что, если старый мастер оживет?
          • что, если у нового мастреа записи старее, чем у одной из реплик?
          • Что если по ошибке будет 2 мастера?
          • на потеренные данные могут быть внешние ссылки
      • ручное переключение мастера
    • способы репликации
      • повторное применение мутаций
        • не должно быть операций зависящих от времени, вроде now()
        • сайд эффекты
      • специальный лог изменений
      • кастомные решения
        • частичные репликации
        • кеши
        • подписка на изменения
  • лаг репликации и нестрогая консистентность
    • eventual consistency
      • reading own writes
        • чтение с лидера при некоторых условиях
        • кеширование своих изменений
        • случай многих устройств
      • монотонное чтение
        • подключение к одной и той же реплике
  • много-мастерная репликация (синхронизация)
    • преимущества
      • ускоряет запись
      • делает запись устойчивой к падению
    • частный случай: устройство пользователя является мастером и позволяет оффлайн операции
    • конкурентная запись
      • синхронная синхронизация, как частный случай
      • избегание конфликтов
        • сами операции не позволяют конфликты
          • добавление/удаление элементов в неупорядоченные множества
        • пользователи пишут только свои данные
        • упорядочивание изменений
        • назначить приоритеты для нод
        • фиксированный алгоритм резолва конфликтов
        • отдать резолв конфликтов клиенту
  • репликация без лидеров, кворум
    • запись на W нод, чтение с R нод R+W>N