## Una comparación de los complementos de mysqlnd y el Proxy de MySQL

Los complementos de `mysqlnd` y el Proxy de MySQL son diferentes tecnologías que utilizan diferentes enfoques. Ambos son herramientas válidas para resolver una variedad de tareas comunes tales como el equilibrio de carga, monitorización, y mejoras en el rendimiento. Una diferencia importante es que el Proxy de MySQL funciona con todos los clientes de MySQL, mientras que los complementos de `mysqlnd` son específicos de aplicaciones de PHP.

Al igual que una Extensión de PHP, un complemento de `mysqlnd` se instala en el servidor de aplicaciones de PHP, junto con el resto de PHP. El Proxy de MySQL puede ejecutarse sobre el servidor de aplicaciones de PHP o ser instalado en una máquina dedicada para manejar múltiples servidores de aplicaciones de PHP.

El despliegue del Proxy de MySQL sobre un servidor de aplicaciones tiene dos ventajas:

1. No tiene un único punto de fallo

2. Fácil escalabilidad (escalabilidad horizontal, escalabilidad por cliente)

El Proxy de MySQL (y los complementos de `mysqlnd`) pueden resolver problemas fácilmente que de otro modo requerirían cambios en las aplicaciones existentes.

Sin embargo, el Proxy de MySQL tiene algunas desventajas:

- El Proxy de MySQL es un componente y una tecnología nuevos que son necesarios llegar a dominar y desplegar.

- El Proxy de MySQL requiere conocimientos del lenguaje de scripts Lua.

El Proxy de MySQL puede ser personalizado con programación en C y Lua. Lua es el lenguaje de scripts preferido del Proxy de MySQL. Para la mayoría de los expertos en PHP, Lua es un nuevo lenguaje que aprender. Un complemento de `mysqlnd` puede ser escrito en C. También es posible escribir complementos en PHP usando » PECL/mysqlnd_uh.

El Proxy de MySQL se ejecuta como un demonio - un proceso en segundo plano. El Proxy de MySQL puede recordar decisiones anteriores, ya que todos los estados pueden ser guardados. Sin embargo, un complemento de `mysqlnd` está vinculado al ciclo de vida basado en peticiones de PHP. El Proxy de MySQL también comparte resultados computados una única vez entre múltiples servidores de aplicaciones. Un complemento de `mysqlnd` necesitaría almacenar los datos en un medio persistente para poder hacer esto. Sería necesario otro demonio para este propósito, tal como Memcache. Esto otorga al Proxy de MySQL una ventaja en este caso.

El Proxy de MySQL funciona en lo más alto del protocolo de cable. Con el Proxy de MySQL se ha de analizar y usar ingenierá inversa con el Protocolo Cliente Servidor de MySQL. Las acciones están limitadas a aquellas que pueden realizarse manipulando el protocolo de comunicación. Si el protocolo de calbe cambia (lo que ocurre muy raramente), los scripts del Proxy de MySQL necesitarían cambiarse también.

Los complementos de `Mysqlnd` funcionan en lo más alto de la API en C, la cual refleja el cliente `libmysqlclient` y las APIs Connector/C. ESta API en C es básicamente una envoltura sobre el protocolo Cliente Servidor de MySQL, o protocolo de cable, como es llamado a veces. Se pueden interceptar todas las llamadas a la API en C. PHP hace uso de la API en C, por lo que se pueden enganchar todas las llamadas de PHP, sin necesidad de programar en el nivel del protocolo de cable.

`Mysqlnd` implementa el protocolo de cable. Los complementos pueden, por lo tanto, analizar, usar ingeniería inversa, manipular e incluso reemplazar el protocolo de comunicación. Sin embargo, esto normalmente no es necesario.

Ya que los complementos permiten crear implementaciones que utilizan dos niveles (la API en C y el protocolo de cable), tienen más flexibilidad que el Proxy de MySQL. Si un complemento de `mysqlnd` es implementado usando la API en C, cualquier cambio subsiguiente al protocolo de cable no requerirá cambios en el complemento en sí.