Bei den mysqlnd
-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
mysqlnd
-Plugins spezifisch für PHP-Anwendungen sind.
Als PHP-Erweiterung wird ein mysqlnd
-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.
Der Einsatz des MySQL-Proxys auf dem Anwendungsserver hat zwei Vorteile:
Kein einzelner Ausfallpunkt
Einfach zu skalieren (horizontale Skalierung, Skalierung durch den Client)
Mit dem MySQL-Proxy (und den mysqlnd
-Plugins) lassen
sich auf einfache Weise Probleme lösen, die andernfalls Änderungen an
bestehenden Anwendungen erfordert hätten.
Allerdings hat der MySQL-Proxy auch ein paar Nachteile:
Es handelt sich um eine neue Komponente und Technologie, die beherrscht und implementiert werden muss.
Er erfordert Kenntnisse in der Skriptsprache Lua.
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 mysqlnd
-Plugin kann
in C geschrieben werden und mit
» PECL/mysqlnd_uh
ist es auch möglich, Plugins in PHP zu schreiben.
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 mysqlnd
-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
mysqlnd
-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.
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.
Mysqlnd
-Plugins nutzen die C-API, die den
libmysqlclient
-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.
Mysqlnd
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.
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 mysqlnd
-Plugin unter Verwendung
der C-API implementiert wird, sind bei späteren Änderungen am
Wire-Protokoll keine Änderungen am Plugin selbst erforderlich.