Benchmark React (PHP) vs. Node.js

Traue keinem Benchmark, den du nicht selbst gefälscht hast! So auch diesmal. Aber aufgrund der gestrigen Vorträge und Gespräche auf der NoSQL Cologne UG war ich dennoch neugierig. Wie schlägt sich eventbasiertes PHP gegen die inzwischen als etabliert zu bezeichnende JavaScript-Lösung Node.js?

Viel simpler geht es nicht. Ich habe mehr oder minder das einfachste Beispiel, was sowohl auf der React Seite als auch bei Node.js zu finden war, benutzt. Ein minimaler Web-Server, der die Anzahl der durchgeführten Requests ausgibt. Zugegebenermaßen ist der Code von Node.js etwas schlanker, hier stehen 15 Zeilen PHP gerade einmal 7 Zeilen JavaScript gegenüber, aber das Prinzip ist genau dasselbe. Und welcher Code nun besser lesbar oder leichter verständlich ist, oder auch nur noch einer Optimierung bedarf, soll hier auch nicht weiter diskutiert werden.

Die Installation erfolgte auf einer kleinen KVM-basierten virtuellen Maschine, als Client diente Apache Bench, gemessen wurde jeweils von einer anderen VM aus, die in einem anderen Rechenzentrum beheimatet war. Der Benchmark erhebt keinen Anspruch, in irgend einer Art repräsentativ zu sein, und angesichts mangelnder Zeit habe ich auch keinen Dauerbetrieb realisiert. Die Ergebnisse sind dennoch interessant.

Zunächst die Anzahl von Requests/s für unterschiedliche Concurrency Levels, d.h. parallele Requests vom Benchmark-Client:

Im Folgenden der Durchsatz in KBytes/s, ebenfalls in Abhängigkeit von parallelen Requests:

Natürlich muss hier erwähnt werden, dass die einzelnen Tests jeweils mehrfach hätten wiederholt werden müssen, um allgemeine Schwankungen der Leistung auszugleichen. Beide Server-Prozesse liefen parallel auf derselben VM.

Dennoch erlaube ich mir die Interpretation, dass PHP gar nicht so schlecht gegen Node.js abschneidet. Bei wenigen parallelen Requests zeigt Node.js nur einen geringen Vorsprung, bei einer höheren Anzahl hingegen kann Node.js punkten. Dies auch vor allem, da die PHP-Lösung bei einer Concurrency von 500 und 1000 nicht mehr alle Requests erfolgreich beantworten konnte, hier musste Apache Bench dazu gebracht werden, die Verbindungsfehler zu ignorieren. Insofern sind die letzten Werte auch mit einiger Vorsicht zu genießen. Doch auch Node.js gönnte sich in dieser Konstellation eine längere Pause, evtl. aufgrund einer gerade laufenden Garbage Collection. In diesem Fall konnte durch Wiederholung der Test erfolgreich bzw. ohne Unterbrechung abgeschlossen werden, während bei PHP die Verbindungsfehler Bestand hatten.

Und nun? Doch kein Node.js, lieber React PHP nutzen? It depends… Wie so häufig – der Einsatz hängt von vielen Merkmalen ab. Wie lautet der konkrete Anwendungsfall? Ist bereits Node.js-Expertise vorhanden? Wie sieht die Codebasis aus, wäre es nützlich, bestehende PHP-Module weiter verwenden zu können? Und so weiter.

Insgesamt sind React PHP und ähnliche Ansätze, die sich event-basierter, nichtblockierender Ein-/Ausgabe (im Englischen klingt es irgendwie besser – event-driven, non-blocking I/O) verschrieben haben, definitiv einer näheren Betrachtung wert. Eine sehr spannende Entwicklung, wie ich finde!

Tags:
Kategorie:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.