Загрузка…
Загрузка…
Шардинг — это горизонтальное разделение данных на несколько независимых узлов (шардов) для масштабирования системы за пределы одного сервера с точки зрения объема данных, нагрузки и пропускной способности.
Снимите ограничения с одного узла (ЦП/ОЗУ/диск/Ввод-вывод).
Увеличение пропускной способности записи/чтения за счет параллельной работы шардов.
Локализуйте «горячие» наборы данных и уменьшите конкуренцию за ресурсы.
данные секционируются по ключевым диапазонам (например, по дате или интервалу идентификатора);
простой для сценариев временных рядов;
риск «горячих» диапазонов.
шард определяется по хешу ключа;
более равномерно распределяет нагрузку;
сложнее делать запросы по диапазону.
отдельный ключ карты/сервиса → шард;
гибкая маршрутизация и миграции;
дополнительная сложность и зависимость от слоя поиска.
данные делятся по региону или клиенту (арендатору);
хорошо подходит для изоляции, соответствия требованиям и многопользовательских архитектур;
возможный дисбаланс между шардами.
Ребалансировка данных во время роста.
Межшардовые запросы, соединения и транзакции.
Сложности резервного копирования/восстановления и аварийного переключения.
Повышенная сложность наблюдения и оперативного обеспечения.
Шардинг — это инструмент масштабирования, который обеспечивает значительный прирост производительности, но за счет усложнения архитектуры. Выбор типа шардинга должен основываться на схеме доступа к данным, модели предметной области и плане развития системы.
func shardForUser(userID int64, shards int) int {
if shards <= 0 {
return 0
}
return int(userID % int64(shards)) // hash/range-логіку змінюють під домен
}Шардинг — это горизонтальное разделение данных на несколько независимых узлов (шардов) для масштабирования системы за пределы одного сервера с точки зрения объема данных, нагрузки и пропускной способности.
