Сравнение плагинов 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. Это C API по сути обычная обертка вокруг протокола MySQL Client Server. Вы можете перехватывать все вызовы C API. PHP использует C API, фактически вы можете перехватывать вообще все вызовы PHP, без необходимости програмировать на уровне протокола обмена.

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

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