Вопрос проверяет понимание операционных рисков распределенных хранилищ и сложности миграции данных между шардами.
Решардинг — это перенос части данных между шардами при изменении их количества или распределения. Основные проблемы: большие объемы копирования, риск несогласованности данных и необходимость поддерживать работу системы без простоя. Часто приходится делать dual write, поддерживать совместимость роутинга и аккуратно переключать трафик. Ошибки решардинга могут приводить к потерям данных или длительной деградации.
Решардинг нужен, когда меняется число шардов, меняется стратегия распределения или появился перекос нагрузки. Это одна из самых “дорогих” операций в жизни системы.
Перенос данных означает:
чтение из исходного шарда
запись в целевой шард
проверку целостности
Даже если все автоматизировано, это:
нагрузка на сеть
нагрузка на диски
влияние на латентность продакшена
Ключевой риск: данные продолжают меняться, пока идет миграция.
Типовые сложности:
запись пришла в старый шард, а чтение уже идет в новый
часть данных скопирована, часть еще нет
“потерянные” апдейты при неправильной синхронизации
Чтобы уменьшить риск, применяют:
журналирование изменений
догоняющую синхронизацию (catch-up)
фиксацию точки (cutover point)
Во время решардинга нужно управлять маршрутизацией запросов.
Часто делают так:
добавить поддержку “старой” и “новой” схемы
постепенно переводить трафик
держать возможность отката
Если роутинг меняется резко:
часть запросов начнет ходить “не туда”
возрастет число ошибок и таймаутов
Один из распространенных подходов — некоторое время писать в две схемы:
запись в старый шард
запись в новый шард
Это снижает риск потери данных, но добавляет проблемы:
двойная нагрузка на запись
сложнее транзакционная целостность
возможны расхождения при частичных сбоях
Проблема: уникальность на уровне “всего кластера” сложнее обеспечить, когда данные физически в разных местах.
Например:
уникальный email по всей базе
глобальный order_number
При решардинге может понадобиться:
централизованный сервис генерации ID
глобальный индекс (дорого)
изменение бизнес-ограничений
Решардинг требует:
метрик прогресса миграции
метрик ошибок
сравнения контрольных сумм/количеств
Без этого вы можете “успешно” завершить перенос с тихими потерями данных.
Обычно делают последовательность:
подготовить новый набор шардов
начать фоновую миграцию данных
включить запись изменений (лог или dual write)
догнать расхождения
переключить чтение
переключить запись
оставить период наблюдения и возможность rollback
выключить старую схему
Проблемы решардинга — это объемы данных, консистентность при параллельных изменениях, сложность смены роутинга без простоя, риски dual write и ограничения вроде глобальной уникальности. Поэтому стратегию решардинга продумывают заранее, еще на этапе выбора ключа и схемы шардирования.