Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва.
1 of 44
More Related Content
Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва
1. Быстрый и простой способ шардирования MySQL
с помощью CUBRID SHARD
Эсен Сагынов
22 апреля 2013 г.
2. План на сегодня
2
1. Об NHN
2. Шардирование в производственных средах
3. Почему CUBRID SHARD
4. Как шардировать базы данных MySQL
5. Демо
6. CUBRID SHARD в Ndrive
5. Шардирование в производстве
• Использует реляционное СУБД с шардированием
• Данные хранятся в виде ключ-значение
•
•
•
•
•
•
•
•
•
•
•
•
6. Существующие решения шардирования
Название Тип Требования Интерфейс
СУБД Другие
СУБД с
- Hibernate
Hibernate shards Фреймворк, библиотека поддержкой Java
- JVM
Hibernate
- Hibernate
HiveDB Фреймворк, библиотека MySQL Java
- JVM
Промежуточное ПО и Java, C, PHP,
dbShards MySQL
библиотека Python, Ruby
Gizzard (Twitter) Промежуточное ПО Любая - JVM Java
Промежуточное ПО и
Spider for MySQL MySQL Любой
хранилище для MySQL
Spock Proxy Промежуточное ПО MySQL Любой
Shard-Query Промежуточное ПО MySQL PHP, RESTful API
- CUBRID
CUBRID SHARD Промежуточное ПО Любой
- MySQL
8. Библиотеки и хранилища
8
Библиотеки Недостатки
• Требует библиотеку Hibernate/Java
• Hibernate Shards • Конфигурация с помощью многих
• HiveDB XML файлов
• Не для действующих сервисов
Хранилища Недостатки
• Spider for MySQL • Требует изменения
хранилища
• Не для действующих
сервисов
9. Тяжеловесные промежуточные ПО
9
dbShards Gizzard
• Требует изменения кода • Неактивный
приложения
• Необходимо установить агентов
на каждый сервер СУБД
• Не для действующих сервисов
10. Легковесное промежуточное ПО
10
• Spock Proxy
– Активный проект
– Легковесный
– Гибкий
– Легко
настраиваемый
– Не требует
изменения кода
приложения
11. Блог: http://www.cubrid.org/blog/dev-
Spock Proxy platform/database-sharding-platform-at-nhn/
11
Spock Proxy
Хранилище для База данных MySQL
конфигураций
шардирования
Правила шардирования По модулю
Определение ключа шарда Полный разбор SQL
Преимущества Не требует изменения кода программы
Недостатки • Деградация производительности:
• Дополнительный разбор SQL
• Слияние результатов
• Поддерживает не весь SQL синтаксис
MySQL
• Однопоточный
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. Spock Proxy
Активный проект
Легковесный
Гибкий
Легко настраиваемый
Не требует изменения кода программы
✕Ведет к деградации производительности
14. 14
CUBRID SHARD
Легковесное и легко настраиваемое
промежуточное ПО для шардирования MySQL
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. Факты о CUBRID
Реляционное СУБД
ПО с открытым кодом (www.cubrid.org)
Оптимизирован для веб сервисов
Высокая производительность
Поддержка больших баз данных
Высокая доступность
Шардирование баз данных
Более 90% совместимости с синтаксисом MySQL, а также
аналитические функции Oracle
ACID транзакции
Онлайн резервное копирование
Разрабатывается NHN Corp.
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
22. Шаги конфигурирования
23
1. Создать шарды
2. Добавить пользователей в шарды
3. Создать единую схему в шардах
4. Настроить CUBRID SHARD
– Информацию о единой
шардированной базе данных, к
которой подключается клиент
– Информацию о подключениях к
шардам
– Правила шардирования CUBRID SHARD
5. Запустить CUBRID SHARD
6. Изменить код программы
– URL подключения
– SQL подсказки
23. # 1. Создать шарды
• Хост 1..N:
$> mysql –ushard -ppassword –hnode1
mysql> CREATE DATABASE sharddb;
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. # 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. Страница в документации:
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
– Список названий колонок шардированной таблицы
с их правилами шардирования.
28. Страница в документации:
shard_connection.txt http://www.cubrid.org/manual/91/en/shard.html#
setting-shard-metadata
Задать:
1. Шард ID
2. Настоящее имя базы данных на хосте
3. Название удаленного/локального хоста
# shard-id real-db-name connection-info
0 sharddb mysqlA:3306
1 sharddb mysqlB:3306
2 sharddb mysqlC:3306
…
** Название хостов обязательно должно быть идентичным
выводу команды hostname на каждом из хостов.
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_id
0 63 0 ** По умолчанию правило
64 127 1 шардирования - по
128 191 2 модулю 256
192 255 3 (SHARD_KEY_MODULAR в
shard.conf ).
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;
}
38. CUBRID SHARD
• Легко
– Конфигурация без хлопот!
– Без сюрпризов
• Надежный
– Высокая производительность
– Нет SPOF
• Open source
– Разрабатывается NHN Corp.
39. Недостатки CUBRID SHARD
Необходимо вставлять SQL подсказку во все
запросы
Пока нет автоматической балансировки
данных
Что требует тщательного планирования
стратегии шардирования.
Нет графического инструмента для
мониторинга. Только инструменты для
командной строки.
40. CUBRID SHARD лучше всего подойдет…
43
• для действующих Веб сервисов
• с быстрорастущим объемом данных,
• которым необходим стабильное решение
• с возможностью легкой настройки
• в рамках ограниченного времени
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. Облачное хранилище Ndrive
45
• 1 SHARD Брокер • Нет деградации
• 4 Прокси на Брокер производительности
• 50 CAS на Прокси после установки CUBRID
SHARD
64 128 192 256 320
Vuser
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.