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