FrankenPHP und RoadRunner ersetzen den traditionellen PHP-FPM-Ansatz. Sie führen PHP-Anwendungen als dauerhafte Prozesse aus, die im Speicher bleiben, anstatt sie bei jeder Anfrage neu zu starten. Dieser Architekturwechsel bringt erhebliche Performance-Vorteile, insbesondere für framework-basierte Anwendungen mit hohem Initialisierungsaufwand. Beide Projekte sind Open-Source und können kostenlos genutzt werden.
FrankenPHP
FrankenPHP ist ein in Go geschriebener Application Server, der die PHP-Laufzeitumgebung direkt in den modernen Caddy-Webserver einbettet . Diese enge Integration erlaubt eine einfache Handhabung.
Man sollte beachten, dass FrankenPHP in zwei Modi betrieben werden kann:
- Klassisch: Funktioniert als Drop-in-Ersatz für PHP-FPM und bietet sofortige Performance-Verbesserungen ohne Codeänderungen .
- Worker-Modus: Hier bootet die gesamte Anwendung einmal und verbleibt im Speicher. Dies kann die Antwortzeiten laut Benchmarks um das 3,5-fache im Vergleich zu FPM verbessern, da der Framework-Initialisierungsaufwand für jede Anfrage entfällt.
Weitere herausragende Merkmale sind die native Unterstützung für moderne Protokolle wie HTTP/2 und HTTP/3, die automatische Verwaltung von HTTPS-Zertifikaten und die Möglichkeit, Anwendungen als eigenständige, portierbare Binärdateien zu bauen.
RoadRunner: Der leistungsstarke Manager
RoadRunner, ebenfalls in Go implementiert, verfolgt einen anderen Ansatz. Es handelt sich um einen High-Performance Application Server, der persistente PHP-Worker-Prozesse verwaltet . Anstatt PHP selbst einzubetten, startet und überwacht RoadRunner separate PHP-Worker und leitet Anfragen über eine schnelle Brücke an sie weiter.
Seine Stärken liegen in der hervorragenden Integration mit großen Frameworks wie Laravel oder Symfony und einem reichhaltigen Plugin-System, das Aufgaben wie Queue-Verarbeitung, gRPC und das Servieren statischer Dateien abdeckt . Dies macht es besonders geeignet für skalierbare Dienste, APIs und Anwendungen mit hohem Durchsatz.
Die Konfiguration und das Debugging gelten als anspruchsvoller als bei FrankenPHP.
Notwendige Anpassungen
Die Entscheidung für einen persistenten Application Server erfordert Anpassungen an der Architektur. Der größte Unterschied ist der Verlust der Prozessisolation. Während bei FPM jeder Request in einer sauberen Umgebung startet, kann globaler Zustand von einer Anfrage zur nächsten in einem Worker bestehen bleiben. Anwendungen müssen daher sorgfältiger mit globalen Variablen und der Initialisierung von Zuständen umgehen .
Zudem benötigt der Worker-Modus von FrankenPHP eine thread-sichere PHP-Version (ZTS), was die Kompatibilität mit einigen PHP-Erweiterungen einschränken kann. Für maximale Performance sollte der Bootstrap-Code der Anwendung so optimiert werden, dass er problemlos mehrmals in einem persistenten Worker ausgeführt werden kann.
Fazit
Mit FrankenPHP und RoadRunner stehen zwei ausgereifte und leistungsstarke Alternativen zu PHP-FPM zur Verfügung. Beide lösen das Problem des Kaltstarts von PHP-Anwendungen auf elegante Weise und ermöglichen so einen modernen, wettbewerbsfähigen Betrieb.
- FrankenPHP überzeugt durch seine einfache Integration, den mitgelieferten Caddy-Server und seine raw Performance in Benchmarks.
- RoadRunner punktet mit seiner Reife, einer breiten Funktionspalette durch Plugins und einer stabilen Architektur für komplexe, skalierbare Dienste.
Die Wahl zwischen ihnen hängt letztlich von den spezifischen Anforderungen des Projekts, der bestehenden Infrastruktur und den Vorlieben des Entwicklungsteams ab.
Abschließend ist es erwähnenswert, dass große Plattformen wie Facebook auf eigene, hochspezialisierte Lösungen wie HHVM und HackHack setzen, während FrankenPHP und RoadRunner diese moderne Architektur als praxistaugliche Werkzeuge für die gesamte PHP-Community bereitstellen.