Mehr Performance mit PHP und Datenbanken
Kommentare

Sowohl Gonzalo Ayuso als auch Michael Feichtinger haben Tipps gegeben, wie man die Leistung von PHP einfach verbessern kann. Dabei ging Feichtinger auf Ayusos Tipps kritisch ein, was wir im Folgenden zeigen

Sowohl Gonzalo Ayuso als auch Michael Feichtinger haben Tipps gegeben, wie man die Leistung von PHP einfach verbessern kann. Dabei ging Feichtinger auf Ayusos Tipps kritisch ein, was wir im Folgenden zeigen werden:

Laufzeit und Speicherbedarf messen

Ayuso rät dazu, über &#36time = microtime(TRUE); sowie &#36mem = memory_get_usage(); einfache Benchmarks von PHP-Skripten anzufertigen. Er weist dabei darauf hin, dass Monitoring-Systeme mit dieser Methode kollidieren und die Ergebnisse verfälschen. Feichtinger entgegnet, dass dieser Ansatz keine wirklich verwertbaren Daten liefern kann. Dafür verweist er auf eine Reihe externer Tools wie die Google Webmaster Tools, Google Analytics, Webgrind, Cacti, Pingdom, Nagios und die Verwendung von Log Files. Erst so kommt man an eine chronologische Aufzählung der relevanten Parameter: Speicherbedarf, CPU-Auslastung, Netzwerktraffic, Festplattenzugriffe, Anfragen, Antwortzeit, 404-Errors et cetera.

Caching

Memcache und Varnish sind von Ayuso empfohlene Tools, mit denen sich der Rechenaufwand für die Server-CPU reduzieren lässt. Dies geschieht, indem Resultate entsprechend angepasster Skripte im Arbeitsspeicher abgelegt werden. Somit sind diese statischen Inhalte sofort abrufbereit, was zudem die Ladezeit für Besucher reduziert.

Doch auch der Alternative PHP Cache, kurz APC, bietet diese Funktionalität, ist jedoch viel einfacher einzurichten. Die Skripte bleiben unangetastet, und nur ein Neustart des Webservers ist nötig. Feichtinger macht allerdings zum Thema Caching noch einige Anmerkungen. So sollte eine PHP-Anwendung auch ohne Caching schnell sein. Auch ist es nicht unbedingt sinnvoll, sämtliche Skripte mit &#36memcache zuzupflastern. HTML-Rendering und Datenbank-Queries hingegen sind gute Targets für Caching.

Schleifen

Operationen in Schleifen können zum Flaschenhals geraten. Daher sollte man beim Refactoring für mehr Performance nach Schleifen suchen, die über große Datenmengen iterieren. Wenn möglich, sollte man die inneren Operationen memcachen. Mit Profilern wie Xdebug oder Zend Debugger lassen sich die gewichtigsten Schleifen auffinden.

Gearman und horizontales Skalieren

Über Worker lassen sich rechenintensive Aufgaben auslagern. Dazu müssen sie lediglich vom betreffenden PHP-Script mit Gearman aufgerufen werden. Die Gearman Worker selbst können dabei sogar auf entfernten Rechnern oder in der Cloud liegen. Mailing-Systeme, PDF-Generatoren, Bildbearbeitung oder Logging lassen sich auf die Art auch bei großem Besucherandrang stemmen. Der Clou ist überdies, dass die Worker sprachagnostisch sind, also auch Java-Tools oder C-Clients ausgeführt werden können.

Feichtinger warnt aber davor, zu leichtfertig mit den Workern umzugehen. Wer nicht akribisch loggt und beobachtet, ob sie fehlerfrei laufen, der kann schnell die [Kosten-]Kontrolle verlieren. Ein Interface zum Beenden der Worker ist ebenfalls unverzichtbar.

Datenbanken sind meistens der Flaschenhals

Der größte Stolperstein in ansonsten schnellen Apps ist die Datenbank. Einen signifikanten Leistungszuwachs kann man allerdings bereits erzielen, wenn man die Indizes im Auge behält und nach Möglichkeit SQL Queries mit den richtigen Indizes verwendet. Einen zweiten Leistungsgewinn erzielt man mit Prepared Statements, die die Datenbank bei mehrfach iterierten Anfragen entlasten kann.

Belastungstests

Mit Apache Ab testet Ayuso schließlich, wie sich die Website schlägt, wenn 100 mal zehn gleichzeitige Verbindungen aufgebaut werden. Als weiteres Tool könnte der Load Tester dienen, der auf EC2-Instanzen eine Million virtuelle Nutzer kreiert und die Website belastet.

Hier warnt Feichtinger und sagt, dass Konkurrenten solche Mittel böswillig einsetzen könnten. Daher sollte man sich auf solche Attacken gefasst machen und Mittel einbauen, die derlei Zugriffe erkennen und frühzeitig blockieren. Andernfalls könnte der Server für eine Weile unerreichbar bleiben.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -