## Сравнение плагинов mysqlnd с MySQL Proxy

Плагины `mysqlnd` и приложение MySQL Proxy — разные технологии с разными подходами. Оба инструмента решают стандартные задачи наподобие балансировки нагрузки, мониторинга и улучшения производительности. Важное отличие состоит в том, что приложение MySQL Proxy работает со всеми MySQL-клиентами, тогда как плагины `mysqlnd` работают только с PHP-приложениями.

Как PHP-модуль, плагин `mysqlnd` устанавливается на сервер PHP-приложений вместе с остальными компонентами PHP-дистрибутива. MySQL Proxy запускают на сервере приложений PHP или устанавливают на отдельной машине для поддержки множественных серверов PHP-приложений.

Установка MySQL Proxy на сервере приложений даёт два преимущества:

1. Отсутствие единой точки отказа
2. Лёгкость в горизонтальном масштабировании и масштабировании за счёт клиента

Приложение MySQL Proxy и плагины `mysqlnd` легко решают проблемы, которые иначе потребовали бы изменений в текущих приложениях.

Тем не менее, MySQL Proxy содержит и ряд недостатков:

- MySQL Proxy — новый элемент и технология, которую потребуется изучить и установить.
- MySQL Proxy требует знания скриптового языка Lua.

Приложения MySQL Proxy настраиваются под конкретные задачи средствами языков C и Lua. Lua — предпочтительный скриптовый язык для MySQL Proxy. Для большей части PHP-экспертов Lua новый язык, который потребуется изучать. Плагин драйвера `mysqlnd` пишут на C или на PHP через модуль » PECL/mysqlnd_uh.

MySQL Proxy работает как демон — фоновый процесс. MySQL Proxy может вспомнить ранее принятые решения, так как все состояние может быть сохранено. Однако плагины `mysqlnd` привязаны к жизненному циклу PHP, базирующемуся на запросах. Также MySQL Proxy может разделять единожды полученный результат между разными серверами приложений. Плагины `mysqlnd` для решения этой задачи должны использовать какое-нибудь постоянное хранилище, для сохранения результатов между запросами. Например, для этого может быть использован другой демон, такой как Memcache. Так что в этом случае MySQL Proxy работает явно лучше.

MySQL Proxy работает поверх сетевых протоколов. С помощью MySQL Proxy вы можете разобрать и подвергнуть инженерному анализу протокол MySQL Client Server. Что-либо поменять можно только манипулируя протоколом обмена. Если протокол вдруг поменяется (что бывает крайне редко), скрипты MySQL Proxy потребуется переписывать.

Плагины `Mysqlnd` работают поверх C API, который дублирует клиент `libmysqlclient`. Этот API-интерфейс языка C по сути обычная обёртка вокруг протокола MySQL Client Server. Вы можете перехватывать каждый вызов API-интерфейса C. PHP использует API-интерфейс C, фактически можно перехватывать вообще каждый вызов PHP, без программирования на уровне протокола обмена.

`Mysqlnd` реализует протокол обмена. Таким образом, плагины могут перехватывать, исследовать, менять и даже целиком заменять протокол связи. Хотя обычно ничего этого не требуется.

Плагины позволяют вам использовать два уровня (C API и протокол обмена), в этом они гораздо гибче, чем MySQL Proxy. Если плагин `mysqlnd` реализован с использованием C API, изменения протокола обмена не потребуют изменения плагина.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open