Вертикальный шардинг
Вертикальный шардинг — это выделение таблицы или группы таблиц на отдельный сервер. Например, в приложении есть такие таблицы:
- users
— данные пользователей - photos
— фотографии пользователей - albums
— альбомы пользователей
Таблицу users Вы оставляете на одном сервере, а таблицы photos
и
albums
переносите на другой. В таком случае в приложении Вам необходимо будет использовать соответствующее соединение для работы с каждой таблицей
Вертикальное масштабирование
Вертикальное масштабирование предполагает наращивание мощностей сервера. Основным преимуществом метода является его простота. Нет необходимости переписывать код при добавлении мощностей, а управлять одним крупным сервером намного проще, чем целой системой. Это же является и основным недостатком — масштабирование ресурсов одного сервера имеет вполне конкретные аппаратные ограничения. Также стоит учесть стоимость такого решения: сервер с кратным объёмом вычислительных ресурсов в большинстве случаев оказывается дороже, чем несколько менее мощных серверов, дающих в сумме такую производительность.
Вертикальное масштабирование баз данных
Горизонтальный шардинг
Горизонтальный шардинг — это разделение одной таблицы на разные сервера. Это необходимо использовать для огромных таблиц, которые не умещаются на одном сервере. Разделение таблицы на куски делается по такому принципу:
- На нескольких серверах создается одна и та же таблица (только структура, без данных).
- В приложении выбирается условие, по которому будет определяться нужное соединение (например, четные на один сервер, а нечетные — на другой).
- Перед каждым обращением к таблице происходит выбор нужного соединения.
Стратегии
В основе масштабирования данных лежит тот же принцип, что и в основе масштабирования Web приложений. Это разделение данных на группы и выделение их на отдельные сервера. Существует две основные стратегии — репликация и шардинг.
Репликация
Репликация позволяет создать полный дубликат базы данных. Так, вместо одного сервера у Вас их будет несколько:
Master-slave
Чаще всего используют схему master-slave:
- Master
— это основной сервер БД, куда поступают все данные. Все изменения в данных (добавление, обновление, удаление) должны происходить на этом сервере. - Slave
— это вспомогательный сервер БД, который копирует все данные с мастера. С этого сервера следует читать данные. Таких серверов может быть несколько.
Репликация позволяет использовать два или больше одинаковых серверов вместо одного. Операций чтения (SELECT) данных часто намного больше, чем операций изменения данных (INSERT/UPDATE). Поэтому, репликация позволяет разгрузить основной сервер за счет переноса операций чтения на слейв.
Работа из приложения
В приложении у Вас будет два соединения с базой данных. Одно — для мастера и одно для слейва:
$master = mysql_connect(‘10.10.0.1’, ‘root’, ‘pwd’); $slave = mysql_connect(‘10.10.0.2’, ‘root’, ‘pwd’); # какой-то код и все такое… $q = mysql_query(‘INSERT INTO users …’, $master); # еще какой-то код… $q = mysql_query(‘SELECT * FROM users WHERE…’, $slave);
При выполнении запросов необходимо использовать соответствующее соединение
Репликация обычно поддерживается самой СУБД (например, MySQL) и настраивается независимо от приложения. Читайте детальнее про настройку, использование и типы репликации данных на примере MySQL.
Следует отметить
, что репликация сама по себе не очень удобный механизм масштабирования. Причиной тому — рассинхронизация данных и задержки в копировании с мастера на слейв. Зато это отличное средство для обеспечения отказоустойчивости. Вы всегда можете переключиться на слейв, если мастер ломается и наоборот. Чаще всего репликация используется совместно с шардингом именно из соображений надежности.
Шардинг (sharding)
Шардинг (иногда шардирование) — это другая техника масштабирования работы с данными. Суть его в разделении (партиционирование) базы данных на отдельные части так, чтобы каждую из них можно было вынести на отдельный сервер. Этот процесс зависит от структуры Вашей базы данных и выполняется прямо в приложении в отличие от репликации:
Вертикальный шардинг
Вертикальный шардинг — это выделение таблицы или группы таблиц на отдельный сервер. Например, в приложении есть такие таблицы:
- users
— данные пользователей - photos
— фотографии пользователей - albums
— альбомы пользователей
Таблицу users
Вы оставляете на одном сервере, а таблицы
photos
и
albums
переносите на другой. В таком случае в приложении Вам необходимо будет использовать соответствующее соединение для работы с каждой таблицей:
$users_connection = mysql_connect(‘10.10.0.1’, ‘root’, ‘pwd’); $photos_connection = mysql_connect(‘10.10.0.2’, ‘root’, ‘pwd’; # какой-то код и все такое… $q = mysql_query(‘SELECT * FROM users WHERE …’, $users_connection); # еще какой-то код… $q = mysql_query(‘SELECT * FROM photos WHERE…’, $photos_connection); # еще какой-то код… $q = mysql_query(‘SELECT * FROM albums WHERE…’, $photos_connection);
Для каждой таблицы или группы таблиц будет отдельное соединение
В отличие от репликации, мы используем разные соединения для любых операций, но с определенными таблицами. Читайте подробнее об использовании вертикального шардинга на практике.
Горизонтальный шардинг
Горизонтальный шардинг — это разделение одной таблицы на разные сервера. Это необходимо использовать для огромных таблиц, которые не умещаются на одном сервере. Разделение таблицы на куски делается по такому принципу:
- На нескольких серверах создается одна и та же таблица (только структура, без данных).
- В приложении выбирается условие, по которому будет определяться нужное соединение (например, четные на один сервер, а нечетные — на другой).
- Перед каждым обращением к таблице происходит выбор нужного соединения.
Допустим, наше приложение работает с огромной таблицей, которая хранит фотографии пользователей. Мы подготовили два сервера (обычно они называются шардами
) для этой таблицы. Для нечетных пользователей мы будем работать с первыми сервером, а для четных — со вторым. Таким образом, на каждом из серверов будет только часть всех данных о фотках пользователей. Это будет выглядеть так:
‘2’ => ‘10.10.0.2’, ]; $user_id = $_SESSION[‘user_id’]; # получение фотографий для пользователя $user_id $connection_num = $user_id % 2 == 0 ? 1 : 2; $connection = mysql_connect($photo_connections[$connection_num], ‘root’, ‘pwd’); $q = mysql_query(‘SELECT * FROM photos WHREE user_id = ‘ . intval($user_id), $connection);
Перед обращением к таблице, мы выбираем нужное нам соединение
Результат вот этой операции $user_id % 2 будет остатком от деления на 2. Т.е. для четных чисел — 0, а для нечетных — 1.
Любая работа с таблицей photos
теперь будет происходить только после получения нужного соединения на основе $user_id.
Горизонтальный шардинг — это очень мощный инструмент масштабирования данных. Но в то же время и очень нетривиальный. Читайте детально об использовании горизонтального шардинга на практике.
Не следует применять технику шардинга ко всем таблицам. Правильный подход — это поэтапный процесс разделения растущих таблиц. Следует задумываться о горизонтальном шардинге, когда количество записей в одной таблице переходит за пределы от нескольких десятков миллионов до сотен миллионов.
Сложности реализации блокчейн-шардинга
Шардинг не панацея. Проблемы использования шардов заключаются в коммуникациях и безопасности. Минусы у технологии существенные, поэтому каждый момент стоит осветить подробнее.
При использовании технологии горизонтального разделения баз данных может произойти изолирование компонентов. Каждой шарде прививается собственная сеть. Пользователям приходится применять другие технологии коммуникаций. Часто это приводит к дополнительным проблемам.
Проблемы использования шардов заключаются в коммуникациях и безопасности
Шардинг не безопасен. Дополнительная сегментация блокчена увеличивает риски взлома. Уменьшение хешрейта упрощает преступникам захват фрагментов. По итогам хакеры могут отправлять в сеть ложные сигналы.
Шардинг можно заменить другими технологиями. Они способны улучшить скорость передачи, сохранив должный уровень коммуникаций и безопасности. Например, для этого применяют схему увеличения блоков. Технология не лишена недостатков:
- Большие блоки требуют увеличения количества ресурсов.
- Повышается требования к мощности ПК.
- Растет централизация системы.
Некоторые эксперты называют шардинг безальтернативным методом. Однако каждой шарде нужно озадачиться вопросами коммуникаций и снижения рисков.
Шардинг как средство спасения Эфириума
Протокол «эфира» планируют переводить на стекинг. От обычного майнинга будут отказываться. Участники сети начнут получать пассивный доход. При этом энергоэффективность технологии увеличится на 99%.
Это стало возможным благодаря внедрению технологии разделения данных. Шардинг позволяет распределить транзакции по случайно выбранным компьютерам сети. Преимущества перехода на эту технологию можно представить в виде небольшой таблицы:
Скорость транзакций сейчас | Скорость транзакций в перспективе | Текущее энергопотребление сети | Ожидаемое энергопотребление |
15 операций в секунду | до 100000 в секунду | Как у средней по размерам европейской страны | Как у 2000 домохозяйств |
Плюсы очевидные. Шардинг может помочь Эфириуму выйти на первые позиции в мире и стать основной криптовалютой.
Шардинг
Некоторые распределенные системы реляционных баз данных, такие как Oracle RAC или IBM DB2 pureScale, основаны на архитектуре с общим диском, где все узлы базы данных обращаются к одному и тому же центральному репозиторию. Эти системы всегда обеспечивают согласованность данных, но сложно масштабируются.
NoSQL системы, рассматриваемые в этой статье, построены на архитектуре без общего доступа. То есть каждая система здесь состоит из множества серверов с частной памятью и частными дисками, которые подключены через сеть. Масштабируемость пропускной способности и объема данных достигается путем разбиения (шардинга) данных на разные узлы (шарды) по всей системе.
Для гибкости системы и упрощения поиска данные могут разбиваться по определенным диапазонам между серверами. Управляет всем оркестром баз данных автоматическая система, которая распределяет данные и реагирует на перегрузку шарда, чтобы перенести часть данных на другой, более свободный, шард.
Что такое шардинг
Шардинг – это метод горизонтального разделения баз данных. Такой вариант децентрализации кластеров отлично подходит для одноранговых сетей. Сама технология появилась значительно раньше блокчена. Шардирование в 1990-х годах использовали такие гиганты, как Google и Oracle.
Шардинг – это метод горизонтального разделения баз данных
Большую известность шардинг приобрел благодаря одной онлайн-игре. Разработчики приложения Ultima распределили геймеров по нескольким виртуальным мирам. Это позволило исключить перебои в трафике. Sharding можно использовать и для решения бизнес-задач. Схему применяют для разделения клиентов по географии проживания. Техника работы элементарная:
- Разработчики создают базу клиентов.
- Разделяют их по локальному признаку.
- Перемещают каждую группу на эксклюзивные серверы.
Сами серверы могут располагаться в одном data-центре. Шардами называют разные фрагменты, на которые пришлось разделить общую базу данных.
Технологию шардинга можно использовать в разных процессах. Однако наибольшее применение она получила в блокчейне.
Зачем применять шардинг
Вопросы масштабирования ограничивают использование блокчейна. Изначально в разделении блоков на шарды острой нужды не было. Технология особой популярностью у людей не пользовалась, клиентов было мало.
Использование шардинга
В основном ее применяли разные энтузиасты криптомира и «цифровые анархисты», желающие быстрее избавиться от «диктата» банков. Позже ситуация поменялась:
- стоимость криптовалют начала расти;
- активы стали использовать для инвестирования частники;
- подключились институциональные инвесторы.
Причем интерес к продуктам криптомира рост лавинообразными темпами. Скорость проведения транзакций уменьшилась. Перед технологией появился серьезный вызов. Шардинг – это вариант решения проблемы. Сеть делят на несколько шард, за каждой из которых закрепляют собственную ноду. Пропускная способность транзакций по итогам увеличивается. В частях находятся уникальные наборы счетов и смарт-контактов.
Каждая из shard работает в собственном сегменте. Необходимость поддерживать весь реестр исключается. В результате увеличивается возможность использования криптовалюты в экономике.