Published February 2, 2010 (1197 days ago)
Es wurde schon viel darüber spekuliert, wie groß der Anteil der PHP-Nutzer ist, die von HipHop profitieren werden. Die Zahlen bewegen sich im Wesentlichen zwischen 0% und 100%, daher versuche ich mich gar nicht erst an einer eigenen Schätzung, sondern will stattdessen über die Voraussetzungen schreiben, die ein Team beziehungsweise eine Firma erfüllen muss, um von HipHop profitieren zu können.
Stand heute unterstützt HipHop keine PHP 5.3-Features, und auch nicht gewisse PHP 5.2-Features wie eval(). Ganz abgesezen davon, dass man evil sowieso nicht verwenden sollte, kann man also nicht einfach davon ausgehen, dass beliebiger PHP-Code mit HipHop funktioniert. Das bedeutet, dass das Festlegen und Überwachen von Coding Guidelines für Teams, die HipHop einsetzen wollen, noch wesentlich wichtiger wird, als es heute ohnehin schon ist.
Es wird immer Unterschiede in den Funktionalitäten von HipHop und PHP geben, da sich PHP weiterentwickelt und neue Features eingeführt werden, die HipHop nachbilden muss. HipHop wird also immer ein wenig hinterher sein. Das ist normalerweise kein Problem, außer man ist auf die Benutzung von bestimmten neuen Features der neuesten PHP-Version angewiesen. Wenn man Code für HipHop schreiben will, muss man also defensiv programmieren.
HipHop führt PHP aus, ohne dass die Zend Engine beteiligt ist. Es gibt daher keine Garantie, dass sich ein Programm unter PHP und HipHop identisch verhält. Daher braucht man automatisierte Unit- und Integrationstests, um die Ergebnisse unter PHP und HipHop zu vergleichen, und herauszufinden, ob Abweichungen einen Fehler bedeuten oder hinnehmbar sind.
Es ist nicht realistisch, anzunehmen, dass eine größere Codebasis, die zur Zeit unter PHP läuft, unter HipHop exakt die gleichen Ergebnisse liefert. Die Ergebnisse können sich beispielsweise schon aufgrund von unterschiedlichen impliziten Sortierreihenfolgen unterscheiden. Auch (oder gerade) wenn man mit automatischen Tests die Ergebnisse unter PHP und unter HipHop vergleicht, müssen die Testsuites mit diesen Unterschieden umgehen können. Das bedeutet, dass eine flexible Softwarearchitektur notwendig wird, in der Dependency Injection und damit der Einsatz von Mock-Objekten möglich ist.
Auf längere Sicht, werden C++-Skills und -Entwicklungswerkzeuge benötigt, denn die bekannten PHP-Werkzeuge wie xdebug sind unter HipHop nicht verfügbar, da ja bei der eigentlichen Code-Ausführung auf dem Produktivserver kein PHP mehr beteiligt ist. Es wird schwierig, wenn nicht sogar unmöglich, beim Debugging des C++-Codes herauszufinden, was der entsprechende PHP-Code ist. Und wenn ich von meinen eigenen C++-Kenntnissen ausgehe, dann ist an Debugging gar nicht erst zu denken. Ich fürchte, das wird den meisten Teams, die PHP entwickeln, so gehen.
Da PHP unter fast jedem Webserver läuft, kann man das gleiche Skript problemlos auf einem Intel- oder AMD-Prozessor oder auch einem anderen Betriebssystem ausführen. Der PHP-Code, zumindest wenn man sorgfältig programmiert hat, ist im Wesentlichen von der tatsächlichen Systemumgebung abstrahiert.
HipHop erzeugt C++-Code, der wiederum in hoch optimierten Maschinencode übersetzt wird. Dabei spielt die Prozessorarchitektur aber plötzlich wieder eine wichtige Rolle. Man kann die Software nicht nur einmal übersetzen, sondern muss sie für jede Zielarchitektur neu übersetzen und optimieren. Mit HipHop muss man also entweder die Architektur der eingesetzten Server vereinheitlichen, oder eine Compile-Farm aufbauen, die den Code für die verschiedenen Server-Architekturen cross-kompiliert. Das Kompilieren einer größeren Codebasis kann ziemlich lange dauern, und jede winzige Änderung an der Software macht eine erneute Übersetzung nötig.
Es ist also auch nicht mehr möglich, einige wenige veränderte PHP-Skripte zu deployen, sondern man muss ein einziges, monolithisches Binary veröffentlichen. Das bedeutet, dass komplexere Build- und Deployment-Prozesse etabliert werden müssen. Apache und Lighty sind keine Option mehr, da HipHop einen eigenen Webserver mitbringt. Das gesamte Load-Balancing, Caching, Proxying und URL-Rewriting, das heute im Webserver stattfindet, muss angepasst werden.
HipHop reduziert die Systemlast. Das bedeutet aber nicht automatisch kürzere Antwortzeiten für die Nutzer einer Website, denn die Ein- und Ausgaben bestimmten im Wesentlichen die Antwortzeit. Im Vergleich zur Ausführung von PHP-Code dauert der Zugriff auf eine Disk oder auf das Netzwerk sehr, sehr lang. In den meisten Fällen ist es so, dass bei der Ausführung einer PHP-Anwendung der Computer einen Großteil der Zeit damit verbringt, auf das Laden oder Speichern von Daten von/auf einer externen Quelle zu warten.
Selbst wenn HipHop auch bei den Ein- und Ausgaben schneller ist als PHP, werden dadurch weder Disks noch das Netzwerk schneller. Man kann also dank HipHop mit der gleichen Anzahl Server mehr gleichzeitige Requests verarbeiten, oder natürlich weniger mit weniger Servern die gleiche Anzahl von Requests verarbeiten. Die interessante Frage ist nun, ob die I/O-Backends, die ja ohnehin in den allermeisten Fällen die Performance-Bottlenecks sind, mit dem erhöhten Traffic überhaupt zurechtkommen. Es ist gut möglich, dass man sein Skalierungsproblem nur verschoben hat. Um die richtigen Maßnahmen zur Skalierung zu ermitteln, muss man den Code durch sorgfältiges Profiling analysieren. Oft wird man auch gezwungen sein, die gesamte Software-Architektur zu überdenken.
Wie es aussieht, kann der Weg auf die Tanzfläche ganz schon weit sein, wenn man HipHop tanzen will.
Tags: PHP, Facebook, HipHop, C++
To comment, please send an email.
Stefan Priebsch is an IT consultant, trainer, and acclaimed expert for PHP software development.
He holds a university degree in computer science, and is author of numerous books and professional articles on various aspects of the software lifecycle. He regularly presents at international IT conferences.
Stefan Priebsch is married and father of twins. He lives and works in Wolfratshausen near Munich, Germany and is co-founder an Principal Consultant of thePHP.cc.
"Stefan has done a great job writing articles and books for php|architect. He's very sociable, always punctual and goes straight to the point."
--Marco Tabini, President, Marco Tabini & Associates, Inc.
A lot has already be speculated about what percentage of existing PHP users would benefit from using HipHop.
The numbers seem to range somewhere between 0% and 100%.
I will not try a guess myself, but rather try to shed some light on some the most important prerequisites I think there are for a company to benefit from HipHop.
(1205 days ago)
» Read full post
Der erste deutsche PHP Summit - powered by thePHP.cc - ist eine neue und
einzigartige Veranstaltung, die alle wichtigen Themen rund um die
Software-Entwicklung mit PHP in kompakter Form vermittelt.
(1207 days ago)
» Read full post
Want to learn how to turn bad code into good code, and master the full software development cycle, from good design to successful deployment of PHP applications?
(1209 days ago)
» Read full post
Canada Montreal Workshop Lifecycle Migration Facebook CodeWorks09 OOP Wordpress U.S.A. Training MTA HipHop thePHP.cc Relaunch Magento MVC Feedback Testing Blog Slideshare PHP Webcast Derick Rethans fail Sebastian Bergmann C++ Book Chicago tek09 Presentation Slides Selenium hack PHP Quebec 09 CRAP Atlanta Arne Blankerts PHP 5.3 Conference
RT @thePHPcc: 18 PHP Power Workshops in 3 Tagen? Klar geht das! Beim PHP Summit 2010 - http://phpsummit.de - Schnell buchen, bevor es zu ... (1208 days ago)
» Read original tweet
@s_bergmann Something must be wrong. There is no water ;-) (1208 days ago)
» Read original tweet
New blog post: http://priebsch.de/blog/how-to-turn-bad-code-into-good-code/ (1208 days ago)
» Read original tweet