<?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 => 'de',
  ),
  'this' => 
  array (
    0 => 'mysqlnd.plugin.mysql-proxy.php',
    1 => 'Vergleich der mysqlnd-Plugins mit dem MySQL-Proxy',
    2 => 'Vergleich der mysqlnd-Plugins mit dem MySQL-Proxy',
  ),
  'up' => 
  array (
    0 => 'mysqlnd.plugin.php',
    1 => 'Plugin-API des MySQL Native Drivers',
  ),
  'prev' => 
  array (
    0 => 'mysqlnd.plugin.php',
    1 => 'Plugin-API des MySQL Native Drivers',
  ),
  'next' => 
  array (
    0 => 'mysqlnd.plugin.obtaining.php',
    1 => 'Bezugsquellen f&uuml;r die mysqlnd-Plugin-API',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    '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">Vergleich der mysqlnd-Plugins mit dem MySQL-Proxy</h2>
  <p class="simpara">
   Bei den <code class="literal">mysqlnd</code>-Plugins und dem MySQL-Proxy handelt es
   sich um verschiedene Technologien, die unterschiedliche Ansätze verwenden.
   Beide eignen sich für eine Vielzahl von Standardaufgaben wie Lastausgleich,
   Überwachung und Leistungsverbesserung. Ein wichtiger Unterschied besteht
   darin, dass der MySQL-Proxy mit allen MySQL-Clients funktioniert, während
   <code class="literal">mysqlnd</code>-Plugins spezifisch für PHP-Anwendungen sind.
  </p>
  <p class="simpara">
   Als PHP-Erweiterung wird ein <code class="literal">mysqlnd</code>-Plugin zusammen mit
   dem Rest von PHP auf dem PHP-Anwendungsserver installiert. Der MySQL-Proxy
   kann entweder auf dem PHP-Anwendungsserver laufen oder auf einem
   dedizierten Rechner installiert werden, um mehrere PHP-Anwendungsserver zu
   verwalten.
  </p>
  <p class="simpara">
   Der Einsatz des MySQL-Proxys auf dem Anwendungsserver hat zwei Vorteile:
  </p>
  <ol type="1">
   <li class="listitem">
    <span class="simpara">
     Kein einzelner Ausfallpunkt
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Einfach zu skalieren (horizontale Skalierung, Skalierung durch den Client)
    </span>
   </li>
  </ol>
  <p class="simpara">
   Mit dem MySQL-Proxy (und den <code class="literal">mysqlnd</code>-Plugins) lassen
   sich auf einfache Weise Probleme lösen, die andernfalls Änderungen an
   bestehenden Anwendungen erfordert hätten.
  </p>
  <p class="simpara">
   Allerdings hat der MySQL-Proxy auch ein paar Nachteile:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Es handelt sich um eine neue Komponente und Technologie, die beherrscht
     und implementiert werden muss.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Er erfordert Kenntnisse in der Skriptsprache Lua.
    </span>
   </li>
  </ul>
  <p class="simpara">
   Der MySQL-Proxy kann mit C- und Lua-Programmierung angepasst werden, wobei
   Lua für diesen Zweck bevorzugt wird. Für die meisten PHP-Experten ist Lua
   eine neu zu erlernende Sprache. Ein <code class="literal">mysqlnd</code>-Plugin kann
   in C geschrieben werden und mit
   <a href="https://pecl.php.net/package/mysqlnd_uh" class="link external">&raquo;&nbsp;PECL/mysqlnd_uh</a>
   ist es auch möglich, Plugins in PHP zu schreiben.
  </p>
  <p class="simpara">
   Der MySQL-Proxy läuft als Daemon - ein Hintergrundprozess. Da alle Zustände
   gespeichert werden können, kann der MySQL-Proxy frühere Entscheidungen
   abrufen. Ein <code class="literal">mysqlnd</code>-Plugin ist im Gegensatz dazu an den
   Lebenszyklus einer PHP-Abfrage gebunden. Der MySQL-Proxy kann auch einmalig
   berechnete Ergebnisse auf mehrere Anwendungsserver verteilen. Ein
   <code class="literal">mysqlnd</code>-Plugin müsste dazu Daten in einem persistenten
   Medium speichern. Zu diesem Zweck müsste ein anderer Daemon verwendet
   werden, z. B. Memcache. Dies verschafft dem MySQL-Proxy in diesem Fall einen
   Vorteil.
  </p>
  <p class="simpara">
   Der MySQL-Proxy nutzt das Wire-Protokoll. Mit dem MySQL-Proxy muss das
   MySQL-Client-Server-Protokoll analysiert und rekonstruiert werden (Reverse
   Engineering). Die Aktionen sind auf diejenigen beschränkt, die durch die
   Änderung des Kommunikationsprotokolls erreicht werden können. Wenn sich das
   Wire-Protokoll ändert (was sehr selten vorkommt), müssen auch die
   MySQL-Proxy-Skripte geändert werden.
  </p>
  <p class="simpara">
   <code class="literal">Mysqlnd</code>-Plugins nutzen die C-API, die den
   <code class="literal">libmysqlclient</code>-Client nachbildet. Diese C-API ist im
   Wesentlichen ein Wrapper um das MySQL-Client-Server-Protokoll, das manchmal
   auch als Wire-Protokoll bezeichnet wird. Sämtliche C-API-Aufrufe können
   abgefangen werden. Da PHP die C-API nutzt, können somit alle PHP-Aufrufe
   eingehängt werden, ohne dass eine Programmierung auf der Ebene des
   Wire-Protokolls erforderlich ist.
  </p>
  <p class="simpara">
   <code class="literal">Mysqlnd</code> implementiert das Wire-Protokoll. Plugins können
   daher das Kommunikationsprotokoll analysieren, rekonstruieren, ändern und
   sogar ersetzen. In der Regel ist dies jedoch nicht nötig.
  </p>
  <p class="simpara">
   Mit Plugins können Implementierungen erstellt werden, die zwei Ebenen
   verwenden (C-API und Wire-Protokoll), weshalb sie flexibler sind als der
   MySQL-Proxy. Wenn ein <code class="literal">mysqlnd</code>-Plugin unter Verwendung
   der C-API implementiert wird, sind bei späteren Änderungen am
   Wire-Protokoll keine Änderungen am Plugin selbst erforderlich.
  </p>
 </div><?php manual_footer($setup); ?>