API для плагинов к встроенному драйверу MySQL

Содержание

API для плагинов к встроенному драйверу MySQL является особенностью встроенного драйвера MySQL (mysqlnd). Плагины mysqlnd работают на уровне между PHP-приложениями и сервером MySQL. Это похоже на работу MySQL Proxy. Плагины mysqlnd могут реализовывать стандартные задачи MySQL Proxy, такие как балансирование нагрузки, мониторинг и оптимизация быстродействия. При этом, вследствие другой архитектуры и месторасположения, плагины mysqlnd не имеют некоторых недочетов MySQL Proxy. Например, нет единой точки отказа, не требуется установка отдельного proxy-сервера и нет необходимости в изучении нового языка программирования Lua.

Плагин mysqlnd можно рассматривать как модуль mysqlnd. Плагины могут перехватывать большую часть функций mysqlnd. Эти функции вызываются модулями PHP, такими как ext/mysql, ext/mysqli и PDO_MYSQL. В конечном счете, плагины mysqlnd могут перехватывать все запросы, сделанные этими модулями из клиентского приложения.

Внутренние вызовы функций mysqlnd также могут быть перехвачены или заменены. Ограничения по работе с внутренней таблицей функций mysqlnd отсутствуют. Возможно настроить все таким образом, что при вызове определенных функций mysqlnd из модулей, использующих mysqlnd, этот вызов будет перенаправляться в соответствующую функцию плагина mysqlnd. Возможность манипулировать внутренней таблицей функций mysqlnd дает плагинам максимум гибкости.

Плагины mysqlnd фактически являются модулями PHP, написанными на C и использующими API для плагинов mysqlnd (встроенном в драйвер mysqlnd). Плагины могут быть полностью прозрачными для PHP-приложений. Изменять приложение не потребуется, поскольку плагины работают на другом уровне. Плагины mysqlnd можно рассматривать как работающие на уровень ниже mysqlnd.

Нижеуказанный список показывает несколько возможных вариантов плагинов mysqlnd.

  • Балансировка нагрузки

    • Разделение чтения и записи. Примером является модуль PECL/mysqlnd_ms (Master Slave). Модель разделяет запросы на чтение и запись для настройки репликации.

    • Отказоустойчивость

    • Равномерная загрузка, запросы на наименее загруженный сервер

  • Мониторинг

    • Логирование запросов

    • Анализ запросов

    • Аудит запросов. Примером является модуль PECL/mysqlnd_sip (SQL Injection Protection, защита от SQL-инъекций). Модель анализирует запросы и выполняет только подходящие под набор правил.

  • Производительность.

    • Кеширование. Примером является модуль PECL/mysqlnd_qc (Query Cache, кеширование запросов).

    • Ограничение ресурсов выделяемых запросу

    • Шардинг. Примером является модуль PECL/mysqlnd_mc (Multi Connect). Модель пытается разбить запрос SELECT на n частей, используя SELECT ... LIMIT part_1, SELECT LIMIT part_n. Он отправляет запросы на отдельные MySQL-сервера и собирает результат на клиенте.

Доступные плагины к встроенному драйверу MySQL

Существует несколько уже доступных плагинов mysqlnd. Список включает:

  • PECL/mysqlnd_mc - Multi Connect plugin.

  • PECL/mysqlnd_ms - Master Slave plugin.

  • PECL/mysqlnd_qc - Query Cache (кеширование запросов) plugin.

  • PECL/mysqlnd_pscache - Prepared Statement Handle Cache plugin (обработка кеширования подготовленных запросов)

  • PECL/mysqlnd_sip - SQL Injection Protection plugin (защита от SQL-инъекций)

  • PECL/mysqlnd_uh - User Handler plugin (обработка пользователей)