<?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 => 'fr',
  ),
  'this' => 
  array (
    0 => 'mysqlnd.plugin.mysql-proxy.php',
    1 => 'Comparaison des plugins mysqlnd avec proxy MySQL',
    2 => 'Comparaison des plugins mysqlnd avec proxy MySQL',
  ),
  'up' => 
  array (
    0 => 'mysqlnd.plugin.php',
    1 => 'API du plugin du driver natif MySQL',
  ),
  'prev' => 
  array (
    0 => 'mysqlnd.plugin.php',
    1 => 'API du plugin du driver natif MySQL',
  ),
  'next' => 
  array (
    0 => 'mysqlnd.plugin.obtaining.php',
    1 => 'Obtenir l\'API du plugin mysqlnd',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    '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">Comparaison des plugins mysqlnd avec proxy MySQL</h2>
  <p class="simpara">
   Les plugins <code class="literal">Mysqlnd</code> et le proxy MySQL sont
   des technologies différentes utilisant différentes approches.
   Les deux sont des outils valides pour résoudre bon nombre
   de tâches classiques, comme l&#039;équilibrage de charge, la surveillance,
   et l&#039;amélioration des performances. Une importante différence est
   que le proxy MySQL fonctionne avec tous les clients MySQL alors que
   les plugins <code class="literal">mysqlnd</code> sont spécifiques aux
   applications PHP.
  </p>
  <p class="simpara">
   Comme une extension PHP, un plugin <code class="literal">mysqlnd</code>
   doit être installé sur le serveur d&#039;applications PHP, en plus du
   reste de PHP. Un proxy MySQL peut soit fonctionner sur le serveur
   d&#039;applications PHP, soit être installé sur une machine dédiée pour
   gérer plusieurs serveurs d&#039;applications PHP.
  </p>
  <p class="simpara">
   Le déploiement d&#039;un proxy MySQL sur un serveur d&#039;applications
   a 2 avantages :
  </p>
  <ol type="1">
   <li class="listitem">
    <span class="simpara">
     Pas un seul point d&#039;échec
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Facile à redimensionner (redimensionnement horizontal,
     redimensionnement par le client)
    </span>
   </li>
  </ol>
  <p class="simpara">
   Un proxy MySQL (et les plugins <code class="literal">mysqlnd</code>) peut
   résoudre des problèmes facilement, qui sinon, auraient dû nécessiter
   des modifications aux applications existantes.
  </p>
  <p class="simpara">
   Cependant, un proxy MySQL a quelques désavantages :
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Un proxy MySQL est un nouveau composant, une nouvelle technologie à
     appliquer au maître et à déployer.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Un proxy MySQL nécessite la connaissance du langage de script Lua.
    </span>
   </li>
  </ul>
  <p class="simpara">
   Un proxy MySQL peut être personnalisé en utilisant les langages de
   programmation C et Lua. Lua est le langage préféré pour un proxy MySQL.
   Pour la plupart des experts PHP, Lua est un nouveau langage à apprendre.
   Un plugin <code class="literal">mysqlnd</code> peut être écrit en C. Il est également
   possible d&#039;écrire un plugin en PHP en utilisant
   <a href="https://pecl.php.net/package/mysqlnd_uh" class="link external">&raquo;&nbsp;PECL/mysqlnd_uh</a>.
  </p>
  <p class="simpara">
   Un proxy MySQL fonctionne comme un démon - un processus en arrière-plan.
   Un proxy MySQL peut rappeler des décisions prises antérieurement,
   vu que tous les états peuvent être conservés. Cependant, un plugin
   <code class="literal">mysqlnd</code> est lié au cycle de vie d&#039;une requête PHP.
   Un proxy MySQL peut également partager des résultats calculés une seule fois
   sur plusieurs serveurs d&#039;applications. Un plugin <code class="literal">mysqlnd</code>
   peut donc avoir besoin de stocker des données dans un médium persistant.
   Un autre démon peut être utilisé dans ce but, par exemple
   Memcache. Ce mécanisme donne un avantage au proxy MySQL.
  </p>
  <p class="simpara">
   Un proxy MySQL fonctionne au-dessus de la couche physique. Avec un
   proxy MySQL, il faut analyser et effectuer du &quot;reverse engineering&quot;
   du protocole client serveur MySQL. Les actions sont limitées à celles
   qui peuvent être effectuées par la manipulation du protocole
   de communication. Si la couche physique change (ce qui arrive très rarement),
   les scripts du proxy MySQL peuvent devoir être adaptés.
  </p>
  <p class="simpara">
   Les plugins <code class="literal">Mysqlnd</code> fonctionnent au-dessus de l&#039;API C,
   reflétant ainsi les APIs client <code class="literal">libmysqlclient</code>.
   Cette API C est essentiellement une enveloppe du protocole Serveur Client MySQL,
   ou de la couche physique, vu qu&#039;elle est appelée quelques fois. L&#039;on peut
   intercepter tous les appels à l&#039;API C. PHP utilise l&#039;API C, toutefois,
   il est possible de connecter tous les appels PHP, sans avoir besoin de programmer
   au niveau de la couche physique.
  </p>
  <p class="simpara">
   <code class="literal">Mysqlnd</code> implémente la couche physique. Les plugins
   peuvent toutefois analyser, effectuer un &quot;reverse engineering&quot;, manipuler
   et toujours remplacer le protocole de communication. Cependant, ce n&#039;est
   généralement pas nécessaire.
  </p>
  <p class="simpara">
   Vu que les plugins permettent de créer des implémentations qui
   utilisent les 2 niveaux (API C et couche physique), ils ont plus de flexibilité
   que le proxy MySQL. Si un plugin <code class="literal">mysqlnd</code> est implémenté
   en utilisant l&#039;API C, toutes les modifications ultérieures à la couche
   physique ne nécessiteront pas de modification au plugin en tant que tel.
  </p>
 </div><?php manual_footer($setup); ?>