## Vergleich der mysqlnd-Plugins mit dem MySQL-Proxy

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:

1. Kein einzelner Ausfallpunkt
2. 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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open