Борьба с нагрузкой на MySQL
Андрей Лещук
Особенности проекта и причины нагрузки
на MySQL
● Импорт и обработка большого количества товаров
(более 2 млн.)
● Проведение сервисных действий на сайте:
○ Модерация товаров
○ Сортировка товаров
○ Обновления наличия товаров
○ Генерация sitemap.xml
○ Рассылки пользователям
○ Многое другое
Проблемы которые пришлось решать
● Повышение производительности сервиса
● Нагрузка на MySQL при большом количестве
запросов
● Снижение общей нагрузки на сервер
Выбор решения
● Разбиение ресурсоемких процессов на
параллельные потоки
● Разделение сервиса на несколько серверов
Разделение сервиса на несколько
серверов
СЕРВИС
Сервер S1 Сервер S2
Техническая реализация
● Алгоритм распределения запросов между разными
серверами
● Разработка своего драйвера для работы с БД
Алгоритм распределения запросов
Сервер S2
Сервер S1
SELECT
INSERT/UPDATE/DELETE
REPLICATION
Распределения запросов на разные
сервера
● hook_exit()
Запись времени последнего запроса
INSERT/UPDATE/DELETE
● hook_boot()
Определение target запросов (default или slave)
● При запросах проверяем target и направляем
запросы на нужный сервер
Драйвер для работы с MySQL
● Переопределение класса SelectQuery() для
определения target запросов (default или slave)
● Переопределение классов InsertQuery(),
UpdateQuery(), DeleteQuery(), MergeQuery() для
фиксации времени запросов
Распределение запросов в отдельные
таблицы
● Таблицы которые не хранят полезной информации
на сайте: watchdog, queue etc.
● Все запросы на них должны идти на другую
БД/Сервер
● Не нужно фиксировать время
INSERT/UPDATE/DELETE запросов
● Не нужно определять target для SELECT запросов
(target всегда один)
В итоге
● Снизили нагрузку на Сервере S1 для
пользователей
● Увеличили производительность Сервера S2 для
сервисных действий
● Обеспечили актуальность данных при отставании
или сбоях репликации
● Решили проблему масштабируемости системы
Спасибо за внимание!
Рад выслушать вопросы.

DrupalTour. Vinnytsia — Борьба с нагрузкой на MySQL (Andrey Leshchuk, LetyShops)

  • 1.
    Борьба с нагрузкойна MySQL Андрей Лещук
  • 2.
    Особенности проекта ипричины нагрузки на MySQL ● Импорт и обработка большого количества товаров (более 2 млн.) ● Проведение сервисных действий на сайте: ○ Модерация товаров ○ Сортировка товаров ○ Обновления наличия товаров ○ Генерация sitemap.xml ○ Рассылки пользователям ○ Многое другое
  • 3.
    Проблемы которые пришлосьрешать ● Повышение производительности сервиса ● Нагрузка на MySQL при большом количестве запросов ● Снижение общей нагрузки на сервер
  • 4.
    Выбор решения ● Разбиениересурсоемких процессов на параллельные потоки ● Разделение сервиса на несколько серверов
  • 5.
    Разделение сервиса нанесколько серверов СЕРВИС Сервер S1 Сервер S2
  • 6.
    Техническая реализация ● Алгоритмраспределения запросов между разными серверами ● Разработка своего драйвера для работы с БД
  • 7.
    Алгоритм распределения запросов СерверS2 Сервер S1 SELECT INSERT/UPDATE/DELETE REPLICATION
  • 8.
    Распределения запросов наразные сервера ● hook_exit() Запись времени последнего запроса INSERT/UPDATE/DELETE ● hook_boot() Определение target запросов (default или slave) ● При запросах проверяем target и направляем запросы на нужный сервер
  • 9.
    Драйвер для работыс MySQL ● Переопределение класса SelectQuery() для определения target запросов (default или slave) ● Переопределение классов InsertQuery(), UpdateQuery(), DeleteQuery(), MergeQuery() для фиксации времени запросов
  • 10.
    Распределение запросов вотдельные таблицы ● Таблицы которые не хранят полезной информации на сайте: watchdog, queue etc. ● Все запросы на них должны идти на другую БД/Сервер ● Не нужно фиксировать время INSERT/UPDATE/DELETE запросов ● Не нужно определять target для SELECT запросов (target всегда один)
  • 11.
    В итоге ● Снизилинагрузку на Сервере S1 для пользователей ● Увеличили производительность Сервера S2 для сервисных действий ● Обеспечили актуальность данных при отставании или сбоях репликации ● Решили проблему масштабируемости системы
  • 12.
    Спасибо за внимание! Радвыслушать вопросы.