Быстрый и простой способ шардирования 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
Upcoming SlideShare
Loading in …5
×

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

2,518 views

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,518
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • 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++, Москва

    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

    ×