Please enable JavaScript.
Coggle requires JavaScript to display documents.
Репликация (Multi-Leader (Как решать конфликты на запись? (Автоматический…
Репликация
Multi-Leader
Multi-datacentr
Оффлайн операции с локальными лидерами
Одновременное редактирование (aka google doc)
Как решать конфликты на запись?
Синхронное и асинхронное определение
Избегание конфликтов
Конвергенция
Last write wins
Сохранить конфликтующие данные и решить на стороне приложения
Кастомный резолв
Во время записи
Во время чтения
Автоматический резолв
CRDT
Структуры данных
Operational transformation
Топологии
Круговая
Звезда
все со всеми
Leaderless
Масштабирование записи
Повышаем надежность
Копирование данных между репликами
ВО время чтения
Фоновый процесс
Кворум
w + r > n
Оптимизация под сценарии использования
Sloppy кворум
hinted handoff
Multi datacenter
Dynamo style
Для чего
Быть ближе к пользователям (latency)
Повышаем доступность
Масштабирование чтения
оффлайн операции
Синхронная и асинхронная репликация
Синхронная гарантирует консистентность
Синхронная Р. снижает доступность на запись
Асинхронная Р, быстрее
НО в асинхронной Р. могут быть проблемы
read your own writes
Monotonic reads
Consistent prefix reads
Определяем конкурентную запись
vector clocks (+version vector)
happens-before
last write wins
Conflict-free Replicated Data Types
Leaders and Followers
Followers
Ввод новых
Инициализация
Вывод из обращения
Leaders
Сбой
Понять что лидер упал
Выбрать нового лидера
Отстающая реплика
split brain
Переконфигурить систему
Переключение
Ручное
Автоматическое
Replication Log
Типы
Write-ahead log
Сложности при обновлении
row-based
trigger-based
Statement-based
Проблема автоинкремента
Что делать с side эффектом?
Плюс - простота и компактность
Детерминированные функции