## Comparaison des plugins mysqlnd avec proxy MySQL

Les plugins `Mysqlnd` 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'équilibrage de charge, la surveillance, et l'amélioration des performances. Une importante différence est que le proxy MySQL fonctionne avec tous les clients MySQL alors que les plugins `mysqlnd` sont spécifiques aux applications PHP.

Comme une extension PHP, un plugin `mysqlnd` doit être installé sur le serveur d'applications PHP, en plus du reste de PHP. Un proxy MySQL peut soit fonctionner sur le serveur d'applications PHP, soit être installé sur une machine dédiée pour gérer plusieurs serveurs d'applications PHP.

Le déploiement d'un proxy MySQL sur un serveur d'applications a 2 avantages :

1. Pas un seul point d'échec

2. Facile à redimensionner (redimensionnement horizontal, redimensionnement par le client)

Un proxy MySQL (et les plugins `mysqlnd`) peut résoudre des problèmes facilement, qui sinon, auraient dû nécessiter des modifications aux applications existantes.

Cependant, un proxy MySQL a quelques désavantages :

- Un proxy MySQL est un nouveau composant, une nouvelle technologie à appliquer au maître et à déployer.

- Un proxy MySQL nécessite la connaissance du langage de script Lua.

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 `mysqlnd` peut être écrit en C. Il est également possible d'écrire un plugin en PHP en utilisant » PECL/mysqlnd_uh.

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 `mysqlnd` est lié au cycle de vie d'une requête PHP. Un proxy MySQL peut également partager des résultats calculés une seule fois sur plusieurs serveurs d'applications. Un plugin `mysqlnd` peut donc avoir besoin de stocker des données dans un médium persistant. Un autre démon peut être utilisé dans ce but, comme par exemple, Memcache. Ce mécanisme donne un avantage au proxy MySQL.

Un proxy MySQL fonctionne au dessus de la couche physique. Avec un proxy MySQL, vous devez analyser et effectuer du "reverse engineering" 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 peut devoir être adaptés.

Les plugins `Mysqlnd` fonctionnent au dessus de l'API C, reflétant ainsi les APIs client `libmysqlclient`. Cette API C est essentiellement une enveloppe du protocole Serveur Client MySQL, ou de la couche physique, vu qu'elle est appelée quelques fois. Vous pouvez intercepter tous les appels à l'API C. PHP utilise l'API C, toutefois, vous pouvez connecter tous les appels PHP, sans avoir besoin de programmer au niveau de la couche physique.

`Mysqlnd` implémente la couche physique. Les plugins peuvent toutefois analyser, effectuer un "reverse engineering", manipuler et toujours remplacer le protocole de communication. Cependant, ce n'est généralement pas nécessaire.

Vu que les plugins vous autorisent à 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 `mysqlnd` est implémenté en utilisant l'API C, toutes les modifications ultérieures à la couche physique ne nécessiteront pas de modification au plugin en tant que tel.