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