Шардирование в Yandex StoreDoc
Шардирование — стратегия горизонтального масштабирования данных, при которой части коллекций Yandex StoreDoc размещаются на разных хостах кластера. Шард (набор хостов) связывается с набором данных с помощью ключа шардирования. Yandex StoreDoc поддерживает шардирование для работы с большими объемами данных и для увеличения пропускной способности СУБД. Шардирование особенно полезно, когда вертикальное масштабирование (увеличение мощности сервера) нерентабельно или невозможно.
Yandex StoreDoc поддерживает основные стратегии шардирования данных:
- по хешу (ключ шардирования на базе хеша);
- по диапазону значений (ranged sharding).
Преимущества шардирования
Шардирование позволяет распределить нагрузку по хостам базы данных и обычно используется в следующих случаях:
- Ожидаются высокая частота запросов к базе данных и быстрый рост количества данных.
- Приложение требует все больше и больше ресурсов, но наращивать вычислительную мощность хостов кластера (дисков, памяти и процессоров) уже невозможно.
Горизонтальное масштабирование подразумевает распределение набора данных и нагрузки по нескольким узлам. Также для увеличения дисковой емкости могут добавляться серверы. Емкость одной машины или ее скорость могут быть невысокими, но в горизонтально масштабируемом кластере каждая машина обрабатывает лишь часть общей нагрузки и хранит лишь часть общих данных. Это делает систему потенциально эффективнее, чем единственный сервер с большой емкостью и быстрыми дисками.
Шардирование помогает:
-
Преодолевать технические ограничения.
Потребность работать с большими наборами данных может привести к тому, что инфраструктура хранения данных упрется в предел возможностей оборудования, доступного на рынке (например, IOPS дисковой подсистемы).
Если приложения работают близко к лимитам производительности, имеет смысл разбить информацию на шарды и распределить операции чтения.
-
Создавать геораспределенные системы.
Распределение шардов кластера по различным регионам может помочь:
- улучшить доступность для региональных пользователей;
- соблюсти местные законы, например, требование о хранении данных на территории определенной страны или региона.
-
Повышать отказоустойчивость.
Шардирование позволяет изолировать отказы отдельных хостов или наборов реплик. Без шардирования потеря отдельного хоста приводит к потере доступа ко всему набору данных, которые он содержит. А отказ, например, одного шарда из пяти оставляет доступными 80% данных коллекции.
Чтобы уменьшить риск отключения целого шарда, шарды рекомендуется настраивать как наборы трех реплик. Распределение хостов одного шарда по различным зонам доступности Yandex Cloud позволяет увеличить доступность данных.
-
Повышать скорость выполнения запросов.
Скорость запросов может снижаться из-за конкуренции за ресурсы. Обычно это происходит при росте количества операций чтения или затрат процессорного времени на их обработку.
Шарды выполняют запросы к одной и той же коллекции параллельно. Это исключает конкуренцию за общие ресурсы (процессор, дисковая подсистема) и сокращает время обработки запросов.
Использование шардирования
Чтобы распределить данные по шардам:
- Включите шардирование на уровне кластера Yandex StoreDoc.
- Добавьте нужное количество шардов.
- Включите шардирование для нужных коллекций.
См. также пример шардирования.
Особенности управления шардированием в Yandex StoreDoc
Yandex StoreDoc управляет шардами следующим образом:
-
Из-за ограниченных ресурсов кластер с хостами классов b1.medium и b2.medium не шардируется.
-
Кластер можно создать шардированным либо включить шардирование позже.
-
За управление шардированием в Yandex StoreDoc отвечают хосты с ролями
MONGOS(маршрутизация запросов пользователей) иMONGOCFG(хранение конфигурации шардов). -
В Yandex StoreDoc можно включить шардирование двух типов:
-
Стандартное — экономичный тип шардирования для кластеров, в которых нет особых требований к хостам, управляющим шардированием.
В кластер будут добавлены хосты
MONGOINFRA, сочетающие в себе ролиMONGOSиMONGOCFG. Минимальное количество таких хостов — три. -
Расширенное — гибкий тип шардирования для кластеров, в которых требуется определенное количество хостов каждой роли.
В кластер будут добавлены выделенные сервера
MONGOSиMONGOCFG. Минимальное количество хостовMONGOS— два, хостовMONGOCFG— три.
-
-
В кластере с включенным шардированием:
- Все запросы к Yandex StoreDoc должны направляться к хостам
MONGOSилиMONGOINFRAвместоMONGOD. - Нельзя отключить шардирование или полностью удалить хосты, которые поддерживают работу шардирования: в кластере всегда будет поддерживаться минимальное количество хостов
MONGOSиMONGOCFGилиMONGOINFRA.
- Все запросы к Yandex StoreDoc должны направляться к хостам