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 (обробка користувачів)