<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/mysqlnd.plugin.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'mysqlnd.plugin.mysql-proxy.php',
    1 => 'Сравнение плагинов mysqlnd с MySQL Proxy',
    2 => 'Сравнение плагинов mysqlnd с MySQL Proxy',
  ),
  'up' => 
  array (
    0 => 'mysqlnd.plugin.php',
    1 => 'API интеграции плагинов в драйвер MySQL Native Driver',
  ),
  'prev' => 
  array (
    0 => 'mysqlnd.plugin.php',
    1 => 'API интеграции плагинов в драйвер MySQL Native Driver',
  ),
  'next' => 
  array (
    0 => 'mysqlnd.plugin.obtaining.php',
    1 => 'Получение API плагинов mysqlnd',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/mysqlnd/plugin.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqlnd.plugin.mysql-proxy" class="section">
  <h2 class="title">Сравнение плагинов mysqlnd с MySQL Proxy</h2>
  <p class="simpara">
   Плагины <code class="literal">mysqlnd</code> и приложение MySQL Proxy — разные
   технологии с разными подходами. Оба инструмента решают
   стандартные задачи наподобие балансировки
   нагрузки, мониторинга и улучшения производительности.
   Важное отличие состоит в том, что приложение MySQL Proxy работает
   со всеми MySQL-клиентами, тогда как плагины
   <code class="literal">mysqlnd</code> работают только с PHP-приложениями.
  </p>
  <p class="simpara">
   Как PHP-модуль, плагин <code class="literal">mysqlnd</code> устанавливается
   на сервер PHP-приложений вместе с остальными компонентами
   PHP-дистрибутива. MySQL Proxy запускают на сервере
   приложений PHP или устанавливают на отдельной машине
   для поддержки множественных серверов PHP-приложений.
  </p>
  <p class="simpara">
   Установка MySQL Proxy на сервере приложений даёт два преимущества:
  </p>
  <ol type="1">
   <li class="listitem">
    <span class="simpara">
     Отсутствие единой точки отказа
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Лёгкость в горизонтальном масштабировании и масштабировании за счёт клиента
    </span>
   </li>
  </ol>
  <p class="simpara">
   Приложение MySQL Proxy и плагины <code class="literal">mysqlnd</code>
   легко решают проблемы, которые иначе
   потребовали бы изменений в текущих приложениях.
  </p>
  <p class="simpara">
   Тем не менее, MySQL Proxy содержит и ряд недостатков:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     MySQL Proxy — новый элемент и технология, которую потребуется изучить и установить.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     MySQL Proxy требует знания скриптового языка Lua.
    </span>
   </li>
  </ul>
  <p class="simpara">
   Приложения MySQL Proxy настраиваются под конкретные задачи средствами языков C и Lua.
   Lua — предпочтительный скриптовый язык для MySQL
   Proxy. Для большей части PHP-экспертов Lua новый
   язык, который потребуется изучать. Плагин
   драйвера <code class="literal">mysqlnd</code> пишут на C
   или на PHP через модуль <a href="https://pecl.php.net/package/mysqlnd_uh" class="link external">&raquo;&nbsp;PECL/mysqlnd_uh</a>.
  </p>
  <p class="simpara">
   MySQL Proxy работает как демон — фоновый процесс. MySQL Proxy может вспомнить ранее
   принятые решения, так как все состояние может быть сохранено. Однако плагины
   <code class="literal">mysqlnd</code> привязаны к жизненному циклу PHP, базирующемуся на
   запросах. Также MySQL Proxy может разделять единожды полученный результат между
   разными серверами приложений. Плагины <code class="literal">mysqlnd</code> для решения этой
   задачи должны использовать какое-нибудь постоянное хранилище, для сохранения
   результатов между запросами. Например, для этого может быть использован другой демон,
   такой как Memcache. Так что в этом случае MySQL Proxy работает явно лучше.
  </p>
  <p class="simpara">
   MySQL Proxy работает поверх сетевых протоколов. С помощью
   MySQL Proxy вы можете разобрать и подвергнуть инженерному
   анализу протокол MySQL Client Server. Что-либо поменять
   можно только манипулируя протоколом обмена. Если протокол
   вдруг поменяется (что бывает крайне редко), скрипты
   MySQL Proxy потребуется переписывать.
  </p>
  <p class="simpara">
   Плагины <code class="literal">Mysqlnd</code> работают поверх C API,
   который дублирует клиент <code class="literal">libmysqlclient</code>. Этот API-интерфейс языка C по сути обычная обёртка вокруг
   протокола MySQL Client Server. Вы можете перехватывать каждый
   вызов API-интерфейса C. PHP использует API-интерфейс C, фактически можно
   перехватывать вообще каждый вызов PHP, без программирования на уровне протокола обмена.
  </p>
  <p class="simpara">
   <code class="literal">Mysqlnd</code> реализует протокол обмена.
   Таким образом, плагины могут перехватывать, исследовать, менять
   и даже целиком заменять протокол связи. Хотя
   обычно ничего этого не требуется.
  </p>
  <p class="simpara">
   Плагины позволяют вам использовать два уровня (C API и
   протокол обмена), в этом они гораздо гибче, чем MySQL
   Proxy. Если плагин <code class="literal">mysqlnd</code> реализован с
   использованием C API, изменения протокола обмена не
   потребуют изменения плагина.
  </p>
 </div><?php manual_footer($setup); ?>