API для плагинов к встроенному драйверу MySQL
Содержание
- Сравнение плагинов mysqlnd с MySQL Proxy
- Получение API плагинов mysqlnd
- Архитектура плагинов MySQL Native Driver
- API плагинов mysqlnd
- Начинаем разработку плагина mysqlnd
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 (обработка пользователей)