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