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 (обработка пользователей)