Как и зачем готовить
«кластерные» СУБД?
Анатолий Попов
Director of Engineering
IDT Minsk (net2phone)
Повестка дня
• Зачем нужны кластерные СУБД?
• Примеры (если успеем), на самом деле нет
2
Обо мне
•Программирую с 2006 года
•Закрывал роль DBA с 2010 по 2018й год
3
Зачем программисту знать о СУБД?
• Структуры данных определяют ваш код
• Изменение структуры данных – дорого
• Код практически ничего не стоит*
4
Термины
• Replica set – набор реплик одного набора данных
• Шард – replica set, который хранит часть вашей СУБД
• Кластер – набор шардов
5
Сколько у вас данных?
1 GB+
6
Сколько у вас данных?
10 GB+
7
Сколько у вас данных?
100 GB+
8
Сколько у вас данных?
1 TB+
9
Один шард
• Microsoft SQL Server
• ~100 ГБ данных, 10М строк
• 96-128 ГБ ОЗУ
• 16 ядер
10
Один шард (Key-Value)
• ~5 ТБ
• 10М+ файлов
• Смигрировали в S3
11
Один шард знакомого
• Microsoft SQL Server
• 50-70 ТБ данных, 10 млрд+ записей
• 4 ТБ ОЗУ
• 8 сетевух
12
Зачем нам кластера?
13
Поехали в облака!
14
СУБД требует
• Гарантированной памяти
• Гарантированных IOPS
• Сеть, CPU – вторично
• Спот-инстансы вряд ли подойдут
15
Стоимость
• Server: 4 TB RAM, 4 TB SSD
• Instance Type: x1e.32xlarge (~4 TB RAM, ~4 TB SSD)
• Rent: 32 GB RAM, 256 GB SSD
16
Стоимость
17
0
100
200
300
400
500
600
700
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Price of hardware stack, ~4 TB RAM, ~4 TB SSD
Server Cloud Cloud, 1y Rent
Стоимость
18
0
500
1000
1500
2000
2500
3000
3500
4000
4500
0
20
40
60
80
100
120
140
160
180
200
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Gradual growth of needed RAM and SSD up to 4 TB
RAM Server Rent Cloud
Выводы
19
• Перевозить много – дорого
• Лучше расти постепенно
Добавление железки, обычно
20
Добавление железки, обычно
21
Добавление железки, обычно
22
Добавление железки, обычно
23
Добавление железки, обычно
24
Сколько это занимает?
25
14.22
1.42
-
5.00
10.00
15.00
20.00
25.00
30.00
35.00
100 1000 10000
Replication time in hours
100 1000 5000
Добавление железки, хочется
26
Добавление железки, хочется
27
Добавление железки, хочется
28
Выводы
• Шарды проще добавлять
• Подготовка всё равно требуется
29
Бэкапы обязательны*
• Каждый шард бэкапим
• Бэкапы тестируем
30
Репликация
• Иногда заменяет бэкапы*
• Иногда помогает в масштабировании
31
Репликация: идеал
32
Репликация: антипаттерн
33
Репликация: антипаттерн
• Конфликты
• Запись не масштабируется: WAL!
34
Шардинг: антипаттерны
• По дате
• Mod
• Автоматический*
35
Шардинг
• Корзины
• Размер
36
Шардинг: размер
• Неструктурированные данные – да
• Структурированные данные – нет
37
Шардинг: корзины
• Остаток от деления
• Дата
• Количество строк
38
Шардинг: по дате
39
Date-based sharding
Size
Шардинг: изменение остатка
40
1, 3, 5, 7, 9, 11 2, 4, 6, 8, 10, 12
Шардинг: изменение остатка
41
1, 3, 5, 7, 9, 11 2, 4, 6, 8, 10, 12
Шардинг: изменение остатка
42
1, 4, 7, 10 2, 5, 8, 11
3, 6, 9, 12
Шардинг: остаток
• Выбираем очень большой
• Redis: 16384
• Tarantool.VSHard: 3000
43
Шардинг: автоматический
44
Шардинг: неавтоматический
45
5
5
5
5
5
5
5
Шардинг: неавтоматический
46
1, 3, 5, 7, 9, 11 2, 4, 6, 8, 10, 12
Шардинг: неавтоматический
47
1, 3, 5, 7, 9, 11 2, 4, 6, 8, 10, 12
Шардинг: неавтоматический
48
1, 3, 5, 7, 9, 11 2, 4, 6, 8, 10
12
Шардинг: неавтоматический
• Redis: {hash}:key_part
• tarantool/vshard: bucket_id
49
Выводы
• Репликация => read scale
• Шардинг => read & write scale
• Шардинг => сразу много шардов
50
Литература
• “Designing Data-Intensive Applications” Martin Kleppmann
• https://about.gitlab.com/2017/02/10/postmortem-of-database-
outage-of-january-31/
• https://habr.com/ru/company/mailru/blog/436916/
• Elasticsearch 1 shard by default
51

More Related Content

PPTX
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
PDF
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
PPTX
Как мы готовим MySQL / Николай Королёв (Badoo)
PDF
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
PPTX
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Как мы готовим MySQL / Николай Королёв (Badoo)
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...

What's hot (19)

PPTX
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PPTX
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
PPTX
опыт построения и эксплуатации большого файлового хранилища
PDF
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PPTX
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
PPTX
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
PPTX
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
PDF
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
PDF
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
PDF
Балансировка нагрузки и отказоустойчивость в Одноклассниках
PDF
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
PDF
ekbpy'2012 - Данила Штань - Распределенное хранилище
PPTX
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
PPTX
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
PPTX
High Load
PDF
Где живут Ваши объявления / Тюрин Михаил (Avito)
PDF
UCloud™- примеры использования облака
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Велосипед уже изобретен. Что умеют промышленные СХД? / Антон Жбанков (Nutanix)
опыт построения и эксплуатации большого файлового хранилища
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Балансировка нагрузки и отказоустойчивость в Одноклассниках
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ekbpy'2012 - Данила Штань - Распределенное хранилище
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
High Load
Где живут Ваши объявления / Тюрин Михаил (Avito)
UCloud™- примеры использования облака
Ad

Similar to #dotnetby meetup - 32 Как и зачем готовить ’кластерные’ СУБД (20)

PDF
Как мы готовим MySQL
PDF
Aлександр Зайцев, LifeStreet
PPTX
Как мы готовим MySQL
PPTX
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
PDF
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PDF
Сергей Житинский, Александр Чистяков (Git in Sky)
PDF
Всеволод Поляков "История одного мониторинга"
PPT
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
PPTX
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
PPT
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
PPT
Git in Sky presentation @ HighLoad++ 2013
PPTX
Open source субд глазами обычного программиста
PPTX
от авгиевых конюшен к звездам
PDF
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
PDF
По Вашей просьбе, продукты Atlassian в Docker
PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
PPTX
Мастер-класс про организацию службы эксплуатации
PDF
Стачка 2017: Golang – опыт промышленной разработки
PPTX
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
Как мы готовим MySQL
Aлександр Зайцев, LifeStreet
Как мы готовим MySQL
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обзор перспективных баз данных для highload / Юрий Насретдинов
Сергей Житинский, Александр Чистяков (Git in Sky)
Всеволод Поляков "История одного мониторинга"
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
Git in Sky presentation @ HighLoad++ 2013
Open source субд глазами обычного программиста
от авгиевых конюшен к звездам
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
По Вашей просьбе, продукты Atlassian в Docker
MyRocks: табличный движок для MySQL на основе RocksDB
Мастер-класс про организацию службы эксплуатации
Стачка 2017: Golang – опыт промышленной разработки
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
Ad

#dotnetby meetup - 32 Как и зачем готовить ’кластерные’ СУБД