Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Быстрый и простой способ шардирования MySQLс помощью CUBRID SHARDЭсен Сагынов22 апреля 2013 г.
План на сегодня                                              21.   Об NHN2.   Шардирование в производственных средах3.   П...
Обо мне                             3• Эсен Сагынов (NHN Corp.)  – @CUBRID  – fb.com/cubrid    esen@cubrid.org
Об NHN
Шардирование в производстве            •    Использует реляционное СУБД с шардированием            •    Данные хранятся в ...
Существующие решения шардирования     Название                   Тип                 Требования             Интерфейс     ...
Категории решений шардирования•   Библиотека•   Хранилище•   Тяжеловесное промежуточное ПО•   Легковесное промежуточное ПО
Библиотеки и хранилища                                                             8Библиотеки           Недостатки       ...
Тяжеловесные промежуточные ПО                                                 9dbShards                          Gizzard• ...
Легковесное промежуточное ПО                               10• Spock Proxy  – Активный проект  – Легковесный  – Гибкий  – ...
Блог: http://www.cubrid.org/blog/dev-Spock Proxy                             platform/database-sharding-platform-at-nhn/  ...
Производительность Spock Proxy                                                                            12              ...
Spock Proxy Активный проект Легковесный Гибкий Легко настраиваемый Не требует изменения кода программы✕Ведет к деград...
14         CUBRID SHARD    Легковесное и легко настраиваемоепромежуточное ПО для шардирования MySQL
Блог: http://www.cubrid.org/blog/dev-                                                       platform/database-sharding-pla...
Факты о CUBRID Реляционное СУБД ПО с открытым кодом (www.cubrid.org) Оптимизирован для веб сервисов Высокая производит...
Архитектура CUBRID SHARD        Единое представление базы данных              …                  …         …           или...
Шардированная среда                      …         …     …          …
Установить CUBRID SHARD очень легко!
Страница в документации:Легкая установка           http://www.cubrid.org/wiki_tutorials/entry/cubrid                      ...
Настройка очень легкая и интуитивная!
Шаги конфигурирования                                                     231.   Создать шарды2.   Добавить пользователей ...
# 1. Создать шарды• Хост 1..N:  $> mysql –ushard -ppassword –hnode1  mysql> CREATE DATABASE sharddb;
# 2. Добавить пользователей• Хост 1..N:  $> mysql –ushard -ppassword –hnode1  mysql> USE mysql;  mysql> GRANT ALL PRIVILEG...
# 3. Создать единую схему• Хост 1..N:  $> mysql –ushard -ppassword –hnode1  mysql> USE sharddb;  mysql> CREATE TABLE tbl_u...
Страница в документации:                                   http://www.cubrid.org/manual/91/en/sha# 4. Легкая настройка    ...
Страница в документации: shard.conf                         http://www.cubrid.org/manual/91/en/shard.html#                ...
Страница в документации: shard_connection.txt                       http://www.cubrid.org/manual/91/en/shard.html#        ...
Страница в документации: shard_keys.txt                    http://www.cubrid.org/manual/91/en/shard.html#                 ...
Страница в документации: Пользовательская библиотека                            http://www.cubrid.org/manual/9            ...
# 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 ...
Шардированные запросы 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...
MySQL Sharding DEMO      Требования:      •   1ГБ свободного RAM      •   3ГБ свободного места для 2 VM      •   VirtualBo...
MySQL Sharding DEMO                                    39https://github.com/kadishmal/cubr           id-shard-demo
CUBRID SHARD• Легко  – Конфигурация без хлопот!  – Без сюрпризов• Надежный  – Высокая производительность  – Нет SPOF• Open...
Недостатки CUBRID SHARDНеобходимо вставлять SQL подсказку во все запросыПока нет автоматической балансировки данных  Чт...
CUBRID SHARD лучше всего подойдет…                                           43•   для действующих Веб сервисов•   с быстр...
Облачное хранилище Ndrive                                                          44• Мета данные файлов пользователей• Ш...
Облачное хранилище Ndrive                                                          45• 1 SHARD Брокер               • Нет ...
CUBRID SHARD NextБалансировка данныхМониторинг шардовФункции агрегации
Спасибо!                             47• Сагынов Эсен (NHN Corp.)  – @CUBRID  – fb.com/cubrid    esen@cubrid.org
Nächste SlideShare
Wird geladen in …5
×

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

2.703 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

  1. 1. Быстрый и простой способ шардирования MySQLс помощью CUBRID SHARDЭсен Сагынов22 апреля 2013 г.
  2. 2. План на сегодня 21. Об NHN2. Шардирование в производственных средах3. Почему CUBRID SHARD4. Как шардировать базы данных MySQL5. Демо6. CUBRID SHARD в Ndrive
  3. 3. Обо мне 3• Эсен Сагынов (NHN Corp.) – @CUBRID – fb.com/cubrid esen@cubrid.org
  4. 4. Об NHN
  5. 5. Шардирование в производстве • Использует реляционное СУБД с шардированием • Данные хранятся в виде ключ-значение • • • • • • • • • • • •
  6. 6. Существующие решения шардирования Название Тип Требования Интерфейс СУБД Другие СУБД с - 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
  7. 7. Категории решений шардирования• Библиотека• Хранилище• Тяжеловесное промежуточное ПО• Легковесное промежуточное ПО
  8. 8. Библиотеки и хранилища 8Библиотеки Недостатки • Требует библиотеку Hibernate/Java• Hibernate Shards • Конфигурация с помощью многих• HiveDB XML файлов • Не для действующих сервисовХранилища Недостатки• Spider for MySQL • Требует изменения хранилища • Не для действующих сервисов
  9. 9. Тяжеловесные промежуточные ПО 9dbShards Gizzard• Требует изменения кода • Неактивный приложения• Необходимо установить агентов на каждый сервер СУБД• Не для действующих сервисов
  10. 10. Легковесное промежуточное ПО 10• Spock Proxy – Активный проект – Легковесный – Гибкий – Легко настраиваемый – Не требует изменения кода приложения
  11. 11. Блог: http://www.cubrid.org/blog/dev-Spock Proxy platform/database-sharding-platform-at-nhn/ 11 Spock ProxyХранилище для База данных MySQLконфигурацийшардированияПравила шардирования По модулюОпределение ключа шарда Полный разбор SQLПреимущества Не требует изменения кода программыНедостатки • Деградация производительности: • Дополнительный разбор SQL • Слияние результатов • Поддерживает не весь SQL синтаксис MySQL • Однопоточный
  12. 12. Производительность Spock Proxy 12 • Однопоточный • Разбирает и переписывает SQLВремя выполнения 500 400 Шардинг на уровне 300 приложения Spock Proxy 200 100 CUBRID SHARD 0 1 5 10 20 30 50 70 100 200 400 Параллельные клиенты
  13. 13. Spock Proxy Активный проект Легковесный Гибкий Легко настраиваемый Не требует изменения кода программы✕Ведет к деградации производительности
  14. 14. 14 CUBRID SHARD Легковесное и легко настраиваемоепромежуточное ПО для шардирования MySQL
  15. 15. Блог: 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 подсказок
  16. 16. Факты о CUBRID Реляционное СУБД ПО с открытым кодом (www.cubrid.org) Оптимизирован для веб сервисов Высокая производительность Поддержка больших баз данных Высокая доступность Шардирование баз данных Более 90% совместимости с синтаксисом MySQL, а также аналитические функции Oracle ACID транзакции Онлайн резервное копирование Разрабатывается NHN Corp.
  17. 17. Архитектура CUBRID SHARD Единое представление базы данных … … … или …
  18. 18. Шардированная среда … … … …
  19. 19. Установить CUBRID SHARD очень легко!
  20. 20. Страница в документации:Легкая установка http://www.cubrid.org/wiki_tutorials/entry/cubrid -installation-instructions http://www.cubrid.org/downloads apt-get yum chef ⭐ VM EC2 AMI cloud service
  21. 21. Настройка очень легкая и интуитивная!
  22. 22. Шаги конфигурирования 231. Создать шарды2. Добавить пользователей в шарды3. Создать единую схему в шардах4. Настроить CUBRID SHARD – Информацию о единой шардированной базе данных, к которой подключается клиент – Информацию о подключениях к шардам – Правила шардирования CUBRID SHARD5. Запустить CUBRID SHARD6. Изменить код программы – URL подключения – SQL подсказки
  23. 23. # 1. Создать шарды• Хост 1..N: $> mysql –ushard -ppassword –hnode1 mysql> CREATE DATABASE sharddb;
  24. 24. # 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’
  25. 25. # 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 …
  26. 26. Страница в документации: 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 – Список названий колонок шардированной таблицы с их правилами шардирования.
  27. 27. Страница в документации: 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…
  28. 28. Страница в документации: 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 на каждом из хостов.
  29. 29. Страница в документации: 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 ).
  30. 30. Страница в документации: Пользовательская библиотека 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; }
  31. 31. # 5. Запустить CUBRID SHARD $> cubrid shard start @ cubrid shard start ++ cubrid shard start: success
  32. 32. # 6. URL подключения connectionURL = "jdbc:cubrid:node1:45511:sharddb:shard:shard123: ?althosts=node2:port2,node3:port3 &loadBalance=true";
  33. 33. Шардированные запросы SELECT name FROM student WHERE student_no = /*+ shard_key */ ?; • •
  34. 34. Типы SQL подсказок
  35. 35. 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
  36. 36. MySQL Sharding DEMO Требования: • 1ГБ свободного RAM • 3ГБ свободного места для 2 VM • VirtualBox • Vagrant
  37. 37. MySQL Sharding DEMO 39https://github.com/kadishmal/cubr id-shard-demo
  38. 38. CUBRID SHARD• Легко – Конфигурация без хлопот! – Без сюрпризов• Надежный – Высокая производительность – Нет SPOF• Open source – Разрабатывается NHN Corp.
  39. 39. Недостатки CUBRID SHARDНеобходимо вставлять SQL подсказку во все запросыПока нет автоматической балансировки данных Что требует тщательного планирования стратегии шардирования.Нет графического инструмента для мониторинга. Только инструменты для командной строки.
  40. 40. CUBRID SHARD лучше всего подойдет… 43• для действующих Веб сервисов• с быстрорастущим объемом данных,• которым необходим стабильное решение• с возможностью легкой настройки• в рамках ограниченного времени
  41. 41. Облачное хранилище 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 нагрузки на шард
  42. 42. Облачное хранилище Ndrive 45• 1 SHARD Брокер • Нет деградации• 4 Прокси на Брокер производительности• 50 CAS на Прокси после установки CUBRID SHARD 64 128 192 256 320 Vuser
  43. 43. CUBRID SHARD NextБалансировка данныхМониторинг шардовФункции агрегации
  44. 44. Спасибо! 47• Сагынов Эсен (NHN Corp.) – @CUBRID – fb.com/cubrid esen@cubrid.org

×