Открыть сервис

Шардирование

Шардирование (от англ. sharding) — это метод горизонтального масштабирования базы данных, при котором большая таблица (или набор данных) физически разбивается на несколько независимых, более мелких частей, называемых шардами (shards). Каждый шард представляет собой отдельную логическую или физическую единицу хранения (например, отдельную базу данных, запущенную на отдельном сервере), содержит подмножество строк исходной таблицы и обрабатывается независимо от других шардов. Цель шардирования — распределить нагрузку по чтению и записи, а также объем хранимых данных между несколькими узлами кластера, преодолевая ограничения одной машины (CPU, RAM, дисковая подсистема).

История и предпосылки появления

Необходимость в шардировании возникла по мере роста объемов данных и требований к производительности веб-приложений и сервисов в конце 1990-х — начале 2000-х годов. Традиционные реляционные базы данных (СУБД), такие как Oracle, MySQL или PostgreSQL, хорошо масштабируются вертикально (апгрейд до более мощного сервера), но это имеет физические и экономические пределы. Вертикальное масштабирование не решает проблему географической распределённости и не позволяет парировать пиковые нагрузки гибко.

Пионерами в применении шардирования стали крупные интернет-компании, столкнувшиеся с миллионами пользователей: Google (концепция Bigtable, позже — Spanner), Amazon (DynamoDB), Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ) (Apache Cassandra), Twitter, eBay. В частности, в 2004 году компания Flickr опубликовала опыт шардирования MySQL на свой страх и риск без готовых инструментов — это стало отправной точкой для популяризации подхода в сообществе разработчиков. Постепенно концепция шардирования легла в основу многих NoSQL-решений (MongoDB, Cassandra, HBase), а также встроенных механизмов масштабирования современных NewSQL-систем (Vitess, CockroachDB, Yandex ClickHouse, Greenplum).

В России шардирование активно применяется в высоконагруженных системах «Яндекса», VK, «Сбербанка», «Тинькофф Банка», а также при построении государственных информационных систем (ЕГАИС, ЕМИАС, ГИС ГМП) для обеспечения их доступности при пиковых нагрузках.

Классификация и виды шардирования

Шардирование классифицируется по способу распределения данных между шардами и по способу маршрутизации запросов.

По способу распределения данных

По способу маршрутизации запросов

Устройство и архитектура

Ключевыми компонентами реализации шардирования являются:

Архитектура шардирования может быть симметричной (все шарды используются для одного набора данных, например, при диапазонном шардировании) или асимметричной (шарды разного размера, существуют «горячие» и «холодные» партиции).

Применение

Шардирование применяется в высоконагруженных системах, где требования к производительности и доступности превышают возможности одной машины:

Примеры

Критика и ограничения

Несмотря на эффективность, шардирование вносит существенную сложность:

Альтернативы

Шардирование — не единственный способ масштабирования. Альтернативы:

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →