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