Еще раз про шардинг::Журнал СА 09.2016
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6212
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6920
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4204
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3003
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3804
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3815
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6309
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3161
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3454
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7273
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10637
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12360
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13995
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9120
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7073
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5384
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4613
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3424
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3153
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3399
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3022
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Еще раз про шардинг

Архив номеров / 2016 / Выпуск №09 (166) / Еще раз про шардинг

Рубрика: Разработка /  Масштабирование

Александр Календарев АЛЕКСАНДР КАЛЕНДАРЕВ, AD-1, ведущий программист, akalend@mail.ru

Еще раз про шардинг

Проблема масштабирования БД – одна из самых обсуждаемых проблем современных архитектур информационных систем. Разберем примеры горизонтального масштабирования MySQL для разных случаев и рассмотрим типовые ошибки

Определимся с терминологией

Масштабирование БД – это возможность БД увеличивать объем хранимой информации при неизменных характеристиках доступа к данным. Масштабирование бывает вертикальным, когда увеличение происходит за счет аппаратных средств (увеличение памяти, количество и объем дисковых накопителей), и горизонтальным – за счет увеличения количества таблиц, баз и серверов. В данной статье как раз и будем его рассматривать.

Одна из техник масштабирования – это партицирование таблиц. Партицирование – это разбиение таблиц, содержащих большое количество записей, на логические части по некоторым критериям. В MySQL существуют встроенные средства партицирования. Однако это выходит за рамки данной статьи.

Шардингом называется прием, который позволяет распределять данные между разными логическими и физическими серверами БД. Так, одна такая логическая часть данных будет называться шардой.

Следует заметить, что на одном физическом сервере можно поднять два экземпляра БД [1]. Обычно это используется для взаимного дублирования данных, чтоб поддерживать высокую доступность путем горячего резервирования сиспользованием так называемой перекрестной схемы: на одном сервере запущены мастер шарды 1 и слейв шарды 2, а на втором сервере запущены мастер шарды 2 и слейв шарды 1.

Данные между серверами распределяют на основе некоторого алгоритма или стратегии. Стратегия шардинга – алгоритм распределения записей по разным физическим таблицам. Например, может быть такой алгоритм распределения записей: первые 1000 записей пишем в таблицу 1, следующие 1000 – в таблицу 2 и т.д., пока место не закончится... Или такой: первую запись пишем в таблицу 1. вторую – в таблицу 2, третью – в таблицу 3… После записи в последнею таблицу снова пишем в таблицу 1.

Само распределение записей по разным шардам можно осуществлять по разным полям таблицы, поэтому введем такое понятие, как критерий шардинга – это функция или правило, на основании которого принимают решение к отнесению записи в ту или иную таблицу (шарду).

Ключом шардинга является индексируемое поле (ключ) в соответствии с критерием шардинга. Например, для соцсети критерием шардинга может быть id профиля пользователя. Он же и будет ключом шардинга.

Существуют некоторые типовые стратегии шардинга:

  • Линейная
  • Циклическая
  • Гео

Линейная стратегия

Линейная стратегия – это поочередное заполнение таблиц данных, увеличение до определенного уровня, например 1 млн записей, сначала в одной таблице, потом заполнение 1 млн записей таблицы на другой шарде, затем на следующей, потом снова заполнение новой таблицы на первой шарде. Таким образом, первый миллион записей будет находиться в шарде 0, второй – в шарде 1, третий – в шарде 2.

Вычислить номер шарды можно по формуле:

Формула 1    (1)

где:

  • intval() – выделение целой части;
  • N – текущий номер записи;
  • Counttab – количество записей в заполненной таблице;
  • CountShard – общее количество шард;
  • % – операция остаток от деления.

Циклическая стратегия

Циклическаяя стратегия – это поочередное заполнение сразу всех таблиц данных: таблица 1, таблица 2 … таблица NshardCount.

Вычислить номер шарды можно по формуле:

Формула 2    (2)

Если при использовании линейной стратегии мы имеем ограниченный размер каждой таблицы, то при использовании циклической данные будут заполняться безразмерно, пока не закончится дисковое пространство.

Когда я отвечал за сервис обмена сообщениями (мессенджер) в одной службе знакомств, то там использовалась именно такая система шардинга. В результате чего за четыре года все серверы БД оказались переполненными. Я ради эксперимента запустил запрос: SELECT count(*) … , чтоб приблизительно оценить объем шарды, но мне пришлось его сбросить минут через пять, так как нехорошо такими экспериментами нагружать боевые серверы.

При выборе стратегии шардинга необходимо проанализировать периодический прирост данных и продумать варианты возможного дальнейшего масштабирования.

Геостратегия

Данная стратегия предполагает деление записи по шардам по некоторому ключу. На первом сервере данные по Африке, на втором – по Европе, на третьем – Северная Америка и т.д. Очевидно, она использовалась в службе учета геоданных, раз получила такое название.

Например, такая стратегия используется в одной международной службе знакомств: на одном сервере содержится поисковый индекс жителей Москвы и Подмосковья, на другом – остальные города России, на третьем – города Европы иСеверной Америки, на четвертом – Южной Америки.

Реализацию этой стратеги мы не будем рассматривать в данной статье, но вы можете это сделать самостоятельно, так как в ней нет ничего сложного.

Создание таблиц

При использовании линейной стратегии для MySQL можно использовать поле типа AUTOINCREMENT, так как вторая таблица начинается с записи номер:

Формула 3    (3)

где Ntab – номер таблицы, который вычисляется по формуле (2).

Ее создание осуществляется с использованием следующего оператора:

CREATE TABLE tab_name_Ntab (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

…. /* прочие данные*/

PRIMARY KEY (`id`),

… /* прочие ключи */

) AUTO_INCREMENT= Nfirst /* вписываем конкретное число*/

При реализации циклической стратегии все гораздо проще. На каждую шарду по одной такой таблице. Все таблицы создаются одинаковым SQL-запросом.

Ближе к практике

Выше было описано много скучной теории, но для надежной эксплуатации надо хоть немного знать, как и что устроено, и изредка залезать под капот своего автомобиля. Я реализовал относительно несложный PHP-пакет MySQLShard [2], который в этом нам поможет.

В пакете имеются две основные сущности:

  • класс MysqlShard [src/adapters/mysqlshard.php], который формирует запросы и осуществляет доступ к БД,
  • и набор разных стратегий, являющихся потомками класса AbstractStrategy [src/strategy].

Статью целиком читайте в журнале «Системный администратор», №09 за 2016 г. на страницах 75-79.

PDF-версию данного номера можно приобрести в нашем магазине.


  1. Описание запуска нескольких экземпляров MySQL на одном физическом сервере – http://dev.mysql.com/doc/refman/5.7/en/multiple-servers.html.
  2. Пакет mysql_shard – https://github.com/akalend/mysql_shard.
  3. Описание работы с докер-контейнерами – http://docs.docker.com.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru