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