• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва
 

Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва

on

  • 1,268 views

Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва.

Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва.

Statistics

Views

Total Views
1,268
Views on SlideShare
1,268
Embed Views
0

Actions

Likes
2
Downloads
15
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • To keep this presentation simple, I will focus on three main things.
  • Ask your questions as I'm going through presentation.Hold off with longer questions to the endDo not hesitate to talk to me during conferenceFollowup by email.
  • We have researched how other companies manage big data. They still rely on relational databases and manage their data through data sharding. At NHN eventually we do the same.
  • These are the existing sharding solutions.
  • - Talking about the open source RDBMS solutions, MySQL doesn’t provide database sharding out of the box.- Google had to significantly change MySQL replication to make it work similarly. But at the time Sun, the former owner of MySQL didn’t accept Google’s changes, resulting in a fork form mainstream without mainstream support.Twitter has recently opened their MySQL fork.http://www.oracle.com/technetwork/database/features/availability/300461-132370.pdf
  • Spider for MySQL requires to change the storage engine. It’s not an option. We have running service and don’t want to change anything.
  • Application-aware architecture of dbShards is explained here http://www.dbshards.com/blog/2010/09/black-box-vs-application-aware-sharding/.
  • NHN has many large services in production. We don’t want any middleware that we need to add to affect the performance. So this was a critical requirement so that the sharding middleware shouldn’t decrease the overall performance of the service.
  • Spock Proxy and CUBRID SHARD have somewhat similar architecture. Both are lightweight and flexible.
  • No additional SQL parsing because of HINT.

Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва Presentation Transcript

  • Быстрый и простой способ шардирования MySQLс помощью CUBRID SHARDЭсен Сагынов22 апреля 2013 г.
  • План на сегодня 21. Об NHN2. Шардирование в производственных средах3. Почему CUBRID SHARD4. Как шардировать базы данных MySQL5. Демо6. CUBRID SHARD в Ndrive
  • Обо мне 3• Эсен Сагынов (NHN Corp.) – @CUBRID – fb.com/cubrid esen@cubrid.org
  • Об NHN
  • Шардирование в производстве • Использует реляционное СУБД с шардированием • Данные хранятся в виде ключ-значение • • • • • • • • • • • •
  • Существующие решения шардирования Название Тип Требования Интерфейс СУБД Другие СУБД с - HibernateHibernate shards Фреймворк, библиотека поддержкой Java - JVM Hibernate - HibernateHiveDB Фреймворк, библиотека MySQL Java - JVM Промежуточное ПО и Java, C, PHP,dbShards MySQL библиотека Python, RubyGizzard (Twitter) Промежуточное ПО Любая - JVM Java Промежуточное ПО иSpider for MySQL MySQL Любой хранилище для MySQLSpock Proxy Промежуточное ПО MySQL ЛюбойShard-Query Промежуточное ПО MySQL PHP, RESTful API - CUBRIDCUBRID SHARD Промежуточное ПО Любой - MySQL
  • Категории решений шардирования• Библиотека• Хранилище• Тяжеловесное промежуточное ПО• Легковесное промежуточное ПО
  • Библиотеки и хранилища 8Библиотеки Недостатки • Требует библиотеку Hibernate/Java• Hibernate Shards • Конфигурация с помощью многих• HiveDB XML файлов • Не для действующих сервисовХранилища Недостатки• Spider for MySQL • Требует изменения хранилища • Не для действующих сервисов
  • Тяжеловесные промежуточные ПО 9dbShards Gizzard• Требует изменения кода • Неактивный приложения• Необходимо установить агентов на каждый сервер СУБД• Не для действующих сервисов
  • Легковесное промежуточное ПО 10• Spock Proxy – Активный проект – Легковесный – Гибкий – Легко настраиваемый – Не требует изменения кода приложения
  • Блог: http://www.cubrid.org/blog/dev-Spock Proxy platform/database-sharding-platform-at-nhn/ 11 Spock ProxyХранилище для База данных MySQLконфигурацийшардированияПравила шардирования По модулюОпределение ключа шарда Полный разбор SQLПреимущества Не требует изменения кода программыНедостатки • Деградация производительности: • Дополнительный разбор SQL • Слияние результатов • Поддерживает не весь SQL синтаксис MySQL • Однопоточный
  • Производительность Spock Proxy 12 • Однопоточный • Разбирает и переписывает SQLВремя выполнения 500 400 Шардинг на уровне 300 приложения Spock Proxy 200 100 CUBRID SHARD 0 1 5 10 20 30 50 70 100 200 400 Параллельные клиенты
  • Spock Proxy Активный проект Легковесный Гибкий Легко настраиваемый Не требует изменения кода программы✕Ведет к деградации производительности
  • 14 CUBRID SHARD Легковесное и легко настраиваемоепромежуточное ПО для шардирования MySQL
  • Блог: http://www.cubrid.org/blog/dev- platform/database-sharding-platform-at-nhn/ Spock Proxy и CUBRID SHARD 15 Spock Proxy CUBRID SHARDХранилище для База данных MySQL Конфигурационный файлконфигурацийПравила По модулю • По модулюшардирования • Хэш-функции пользователяОпределения ключа Полный разбор SQL Поиск SQL подсказкишарда Преимущества Преимущества • Не требует изменения • Поддерживает CUBRID и MySQL программы • Полная поддержка MySQL синтаксиса • Высокая производительность Недостатки • Нет разбора SQL • Деградация • Многопоточность производительности: • Пул соединения • Дополнительный • Балансировка нагрузки разбор SQL • Пользовательские правила шардирования • Слияние результатов • Легкость конфигураций • Поддерживает только MySQL • Поддерживает не весь SQL Недостатки синтаксис MySQL • Требует изменения SQL запросов для • Однопоточный вставки SQL подсказок
  • Факты о CUBRID Реляционное СУБД ПО с открытым кодом (www.cubrid.org) Оптимизирован для веб сервисов Высокая производительность Поддержка больших баз данных Высокая доступность Шардирование баз данных Более 90% совместимости с синтаксисом MySQL, а также аналитические функции Oracle ACID транзакции Онлайн резервное копирование Разрабатывается NHN Corp.
  • Архитектура CUBRID SHARD Единое представление базы данных … … … или …
  • Шардированная среда … … … …
  • Установить CUBRID SHARD очень легко!
  • Страница в документации:Легкая установка http://www.cubrid.org/wiki_tutorials/entry/cubrid -installation-instructions http://www.cubrid.org/downloads apt-get yum chef ⭐ VM EC2 AMI cloud service
  • Настройка очень легкая и интуитивная!
  • Шаги конфигурирования 231. Создать шарды2. Добавить пользователей в шарды3. Создать единую схему в шардах4. Настроить CUBRID SHARD – Информацию о единой шардированной базе данных, к которой подключается клиент – Информацию о подключениях к шардам – Правила шардирования CUBRID SHARD5. Запустить CUBRID SHARD6. Изменить код программы – URL подключения – SQL подсказки
  • # 1. Создать шарды• Хост 1..N: $> mysql –ushard -ppassword –hnode1 mysql> CREATE DATABASE sharddb;
  • # 2. Добавить пользователей• Хост 1..N: $> mysql –ushard -ppassword –hnode1 mysql> USE mysql; mysql> GRANT ALL PRIVILEGES ON sharddb@localhost TO shard@localhost IDENTIFIED BY ‘shard123’ mysql> GRANT ALL PRIVILEGES ON sharddb@localhost TO shard@shardBrokerNode IDENTIFIED BY ‘shard123’
  • # 3. Создать единую схему• Хост 1..N: $> mysql –ushard -ppassword –hnode1 mysql> USE sharddb; mysql> CREATE TABLE tbl_users (id BIGINT PRIMARY KEY, name VARCHAR(20), age SMALLINT) $> mysql –ushard -ppassword –hnode2 …
  • Страница в документации: http://www.cubrid.org/manual/91/en/sha# 4. Легкая настройка rd.html#configuration-and-setup• shard.conf – Основной файл для конфигурации CUBRID SHARD.• shard_connection.txt – Список шард ID (shard_id) с названиями баз данных и хостов, к которым указывает тот или иной шард ID.• shard_keys.txt – Список названий колонок шардированной таблицы с их правилами шардирования.
  • Страница в документации: shard.conf http://www.cubrid.org/manual/91/en/shard.html# default-configuration-file-shard-confЗадать:1. SHARD_DB_NAME2. SHARD_DB_USER3. SHARD_DB_PASSWORD4. APPL_SERVER…SHARD_DB_NAME = sharddbSHARD_DB_USER = shardSHARD_DB_PASSWORD = shard123APPL_SERVER = CAS_MYSQL…
  • Страница в документации: shard_connection.txt http://www.cubrid.org/manual/91/en/shard.html# setting-shard-metadataЗадать:1. Шард ID2. Настоящее имя базы данных на хосте3. Название удаленного/локального хоста# shard-id real-db-name connection-info0 sharddb mysqlA:33061 sharddb mysqlB:33062 sharddb mysqlC:3306… ** Название хостов обязательно должно быть идентичным выводу команды hostname на каждом из хостов.
  • Страница в документации: shard_keys.txt http://www.cubrid.org/manual/91/en/shard.html# setting-shard-metadataЗадать:1. Нижний предел шард ключа2. Верхний предел шард ключа3. Шард ID[%student_no]# min max shard_id0 63 0 ** По умолчанию правило64 127 1 шардирования - по128 191 2 модулю 256192 255 3 (SHARD_KEY_MODULAR в shard.conf ).
  • Страница в документации: Пользовательская библиотека http://www.cubrid.org/manual/9 1/en/shard.html#setting-user- defined-hash-function int fn_shard_key_udf(int type, void *val)shard.conf { int mod = 2;1. SHARD_KEY_LIBRARY_NAME if (val == NULL)2. SHARD_KEY_FUNCTION_NAME { return ERROR_ON_ARGUMENT; }[%student_no]SHARD_KEY_LIBRARY_NAME=$CUBRID/c switch(type) {onf/shard_key_udf.so case SHARD_U_TYPE_INT:SHARD_KEY_FUNCTION_NAME {=fn_shard_key_udf int ival; ival = (int) (*(int *)val); return ival % 2; } break; case SHARD_U_TYPE_STRING: return ERROR_ON_MAKE_SHARD_KEY; default: return ERROR_ON_ARGUMENT; } return ERROR_ON_MAKE_SHARD_KEY; }
  • # 5. Запустить CUBRID SHARD $> cubrid shard start @ cubrid shard start ++ cubrid shard start: success
  • # 6. URL подключения connectionURL = "jdbc:cubrid:node1:45511:sharddb:shard:shard123: ?althosts=node2:port2,node3:port3 &loadBalance=true";
  • Шардированные запросы SELECT name FROM student WHERE student_no = /*+ shard_key */ ?; • •
  • Типы SQL подсказок
  • String query = "SELECT name FROM student WHERE student_no = /*+ shard_key */ ?; ";PrepareStatement query_stmt = connection.prepareStatement(query);query_stmt.setInt(1,100);ResultSet rs = query_stmt.executeQuery();// получить результат range key_column (hash result) shard_id min max student_no 0 63 0 student_no 64 127 1 student_no 128 191 2 student_no 192 255 3
  • MySQL Sharding DEMO Требования: • 1ГБ свободного RAM • 3ГБ свободного места для 2 VM • VirtualBox • Vagrant
  • MySQL Sharding DEMO 39https://github.com/kadishmal/cubr id-shard-demo
  • CUBRID SHARD• Легко – Конфигурация без хлопот! – Без сюрпризов• Надежный – Высокая производительность – Нет SPOF• Open source – Разрабатывается NHN Corp.
  • Недостатки CUBRID SHARDНеобходимо вставлять SQL подсказку во все запросыПока нет автоматической балансировки данных Что требует тщательного планирования стратегии шардирования.Нет графического инструмента для мониторинга. Только инструменты для командной строки.
  • CUBRID SHARD лучше всего подойдет… 43• для действующих Веб сервисов• с быстрорастущим объемом данных,• которым необходим стабильное решение• с возможностью легкой настройки• в рамках ограниченного времени
  • Облачное хранилище Ndrive 44• Мета данные файлов пользователей• Шардирование по ID пользователя• 24 мастер шардов – Intel(R) Xeon(R) L5640 @ 2.27GHz * 8, 16G RAM, 820G HDD• 10ТБ данных• Характеристика нагрузки: – 75~80% SELECT vs. 20~25% INSERT – Avg. ~3000 QPS/шард – Avg. ~5% CPU нагрузки на шард
  • Облачное хранилище Ndrive 45• 1 SHARD Брокер • Нет деградации• 4 Прокси на Брокер производительности• 50 CAS на Прокси после установки CUBRID SHARD 64 128 192 256 320 Vuser
  • CUBRID SHARD NextБалансировка данныхМониторинг шардовФункции агрегации
  • Спасибо! 47• Сагынов Эсен (NHN Corp.) – @CUBRID – fb.com/cubrid esen@cubrid.org