PHP 8.4.0 RC2 available for testing

API для плагинов к встроенному драйверу MySQL

Содержание

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

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top