Slide 1

Slide 1 text

Отказоустойчивость и балансировка трафика для MySQL-бэкенда Анастасия Распопина, Владимир Федорков Big Data Days Moscow, 09.10.2019

Slide 2

Slide 2 text

О докладчиках • Владимир Федорков • 19+ лет опыта с MySQL. • Вытягиваю проекты из сложных жизненных ситуаций • в высоконагруженных проектах простых не бывает • Специализация - MySQL • Также – ProxySQL и полнотекстовый поиск • Анастасия Распопина • Коммуникации в СУБД- индустрии. • Придумываю интересные доклады (DevRel) • ориентирую экспертов в их морях смыслов • Специализация – мероприятия • В РФ и за рубежом

Slide 3

Slide 3 text

Информационная эпоха, 2019 1. Microsoft 904,860 2. Apple Inc. 895,670 3. Amazon.com 874,710 4. Alphabet Inc. 818,160 5. Berkshire Hathaway 493,750 6. Facebook 475,730 7. Alibaba Group 472,940 8. Tencent 440,980 9. Johnson & Johnson 372,230 10. ExxonMobil 342,170 … Ford motors 38,221

Slide 4

Slide 4 text

Изменились скорости

Slide 5

Slide 5 text

Поменялся внешний вид сайтов 1998…2000 2015…2019

Slide 6

Slide 6 text

Интернет-магазин 2001-го года • Физический магазин в центре Москвы. • На сайте: • каталог • страница товара • корзина • страница пользователя • Заказ оформляется после созвона с клиентом. • Один сервер, потому что если вдруг умрёт – поднимем.

Slide 7

Slide 7 text

Интернет-магазин 2019 • Бесперебойная работа сайта 24/7. • Основная точка продаж – Сеть. • Заказ оформляется и оплачивается прямо в Сети. • На сайте: • сервисы прямого поиска (три штуки); • интеграция с 1С (бухгалтерия, склады); • сервисы продвижения товаров (платные объявления и «с этим товаром также покупают»); • сервис рейтинга. • Никто даже не считает, сколько там страничек (тысячи!). • И это только софт!

Slide 8

Slide 8 text

Ещё кое-что: • DDOS и сетевая отказоустойчивость. • Многоуровневое кеширование: • CDN-сети, внутренние кеши данных, кеширование запросов. • Многократное дублирование: • Много серверов приложений (stateless) • Много серверов уровня хранения данных (stateful) • И это средний уровень • только один датацентр

Slide 9

Slide 9 text

#Тыжпрограммист! Почини тостер! • Исскуственный интеллект • Распознавание образов, навигационные алгоритмы, статистические системы • Поисковые системы • Финансовые системы и HFT • Биоинформатика • Просчет и оптимизация процессов

Slide 10

Slide 10 text

Уровень задач изменился • Один сервер не может и не должен держать всю нагрузку. • Даже со 128-ю ядрами и 512-ю гигами памяти • Много серверов – много отказов • Отказать может всё – и железо, и софт. • Единая точка отказа может стать и станет проблемой. • “Capacity” более важна, чем производительность. • Достаточно ли у нас запаса мощности чтобы обслужить пользователей? • Сколько пользователей мы можем обслужить с текущим железом? • Сколько пользователей выдержит наша архитектура? • “Capacity” – это сколько и каких серверов нам нужно, чтобы обслуживать клиентов с нужным временем отклика. • Умения настраивать один сервер недостаточно! • Про настройку отдельных серверов есть слайды на http://astellar.com/

Slide 11

Slide 11 text

Факторы нагрузки в MySQL • Один поток на соединение • Каждый запросы выполняется в один поток • Каждый запрос – это комбинация нагрузки на CPU и IO. • IO может быть очень медленным • Поэтому MySQL кеширует данные в память • В целом запас мощности определяется комбинацией времени отклика и пропускной способности.

Slide 12

Slide 12 text

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 0 10 20 30 40 50 60 70 80 90 2 4 8 16 24 32 40 48 64 96 128 160 192 256 320 Latency (milliseconds) Thousand QPS (kQPS) Active clients (connected processes) MySQL performance: Throughput vs Latency

Slide 13

Slide 13 text

Все отлично работало, НО!!! • В пятницу вечером выкатили новый build! • Наконец-то сделали автоматические миграции!!! • «Я поле просто добавил!» • «Просто у нас слишком много пользователей!!!»

Slide 14

Slide 14 text

Разработка vs. эксплуатация • Две разные Вселенные • Решают разные задачи • Поэтому друг друга понимают плохо… • Иногда кажется, что в реальном мире не пересекаются

Slide 15

Slide 15 text

Почему так происходит? VS. У разработки – минимум несколько часов У DBA – максимум несколько минут

Slide 16

Slide 16 text

Переходный процесс • Называется тестирование • Работает не всегда • Даже если сделан грамотно • Учесть все можно, но очень дорого • И долго • И все равно не гарантирует 100% результата • И всё равно падает!

Slide 17

Slide 17 text

MySQL все равно падает! • Почти всегда – самое узкое место. • Потому что stateful. • Поэтому сложно масштабируется. • Нужна поддержка приложения. • Многогранная система в целом • MVCC, ACID, и много других страшных и непонятных слов.

Slide 18

Slide 18 text

В чём сложности-то? • Писать можно не везде. • Galera и Group replication тоже не панацея. • Можно прочитать старые данные. • А можно и прочитать, но надо смотреть в GTID. • Запросы тормозят. • Скорость не всегда консистентна. • В результате тормоза, падения, звонки!

Slide 19

Slide 19 text

The DevOps Borat «In startup we are practice Outage Driven Infrastructure»

Slide 20

Slide 20 text

Как сделать, чтобы не падало? • Вдумчиво разрабатывать. • Серьезно тестировать. • Иметь большой запас по мощностям.

Slide 21

Slide 21 text

Как сделать, чтобы не падало? • Вдумчиво разрабатывать – бестолково. • Серьезно тестировать. • Иметь большой запас по мощностям.

Slide 22

Slide 22 text

Как сделать, чтобы не падало? • Вдумчиво разрабатывать – бестолково. • Серьезно тестировать – долго. • Иметь большой запас по мощностям.

Slide 23

Slide 23 text

Как сделать, чтобы не падало? • Вдумчиво разрабатывать – бестолково. • Серьезно тестировать – долго. • Иметь большой запас по мощностям – очень дорого!

Slide 24

Slide 24 text

Как сделать, чтобы не падало? • Вдумчиво разрабатывать – бестолково. • Серьезно тестировать – долго. • Иметь большой запас по мощностям – очень дорого. • Уметь менять всё, что нужно, на лету! • Без изменения кода

Slide 25

Slide 25 text

Балансировщики важны для инфраструктуры •Для HTTP-трафика их много • Потому что это уровень TCP/UDP •Трафик для базы данных проксировать сложнее. •У пользователей MySQL всё равно есть выбор: HA Proxy, MaxScale, MySQL Router, Vitesse и т.д. •Ну и, конечно, ProxySQL.

Slide 26

Slide 26 text

ProxySQL: open source, лицензия - GPL • ProxySQL «понимает» язык SQL • В отличие от прокси слоя 4 ISO/OSI, работающих на уровне транспорта • ProxySQL «знает» всё о запросе, его обработке, состоянии соединения, авторизации и результатах. • ProxySQL использует внутренний пул соединений с мультиплексированием для повторного использования существующих соединений. • ProxySQL может маршрутизировать запросы на основе различных фильтров: • By user, by database (schema name), by query itself

Slide 27

Slide 27 text

Базовый вариант конфигурации HostGroup 0 HostGroup2 HostGroup1 ProxySQL Application

Slide 28

Slide 28 text

Что может ProxySQL? • Переписывает запросы «на лету» • Поддерживает пул соединений и мультиплексирование • Маршрутизирует сложные запросы • Разделяет чтение и запись • Балансирует нагрузку между нодами кластера • Умеет работать в облаке • Предоставляет статистику в реальном времени • Обновляется без downtime • Большая часть работает из коробки вообще сразу!

Slide 29

Slide 29 text

Что-то ещё? • Кэширование запросов • Обеспечение отказоустойчивости незаметно для пользователя • Файервол • Запросы: • регулирование (throttling) • зеркалирование • Изменение конфигурации без задержек • Поддержка конфигурирования на уровне всего кластера • Поддержка Galera/PXC и Group Replication

Slide 30

Slide 30 text

Функция Read/Write split • Пишем на ноды, которые для этого предназначены. • Читаем со всех нод • Нодам можно присваивать весовые коэффициэнты • Конфиг можно менять на лету • Вводим понятие hostgroups. • HGxx0: Write masters • HGxx1: Read instances • ProxySQL знает, куда можно писать через флаг read_only. • Нужно быть аккуратным.

Slide 31

Slide 31 text

Красивая диаграмма О том, как все могло бы быть

Slide 32

Slide 32 text

Зачем такие сложности? • HG0: мастеры для записи (RW) • HG1: ноды для основных боевых запросов (RO) • HG2: reporting реплики

Slide 33

Slide 33 text

Что в результате? • Отказы серверов БД перестают значимо влиять на пользователей. • Потеря данных сводится к минимуму. • Нагрузка распределяется равномерно между нодами в кластере. • «Плохие» запросы отлавливаются «на лету». • И переписываются там же! • Если нельзя переписать, то можно отправить на отдельную ноду. • Даже внутри транзакции! • А где здесь спрятаны грабли, спросите после доклада, потому что там глубины и зыбучие пески, а время кончилось :)

Slide 34

Slide 34 text

Где почитать? • https://proxysql.com/blog/ • На прошлой неделе вышла ProxySQL версии 2.0.7 • https://twitter.com/proxysql • Спросить у нас! • Будет вебинар • запрос можно отправить на info@proxysql.com

Slide 35

Slide 35 text

Вопросы!

Slide 36

Slide 36 text

Спасибо!