Плагины mysqlnd
и MySQL Proxy — разные
технологии, использующие разные подходы. Оба варианта
являются подходящими инструментами для решения
разнообразных стандартных задач, таких как балансировка
нагрузки, мониторинг и улучшение производительности.
Важным отличием является то, что MySQL Proxy работает со
всеми клиентами MySQL, тогда как плагины
mysqlnd
— только для PHP-приложений.
Как модуль PHP, плагин mysqlnd
устанавливается на сервере приложений PHP вместе с
остальным PHP. MySQL Proxy может быть запущен на сервере
приложений PHP или же быть установлен на отдельной машине
для поддержки множественных серверов приложений PHP.
Установка MySQL Proxy на сервере приложений имеет два преимущества:
Отсутствие единой точки отказа
Лёгкость в масштабировании (горизонтальном или же клиентском)
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, изменения протокола обмена не
потребуют изменения плагина.