Laravel Apps mit Octane skalieren
Laravel Octane ist ein hochleistungsfähiger HTTP-Server, der auf dem Laravel-Framework aufbaut.
Er bietet eine einfache Möglichkeit, Laravel-Anwendungen zu skalieren. Octane verwendet Swoole, Roadrunner oder FrankenPHP als zugrundeliegende Engine, so dass es in der Lage ist, Tausende von gleichzeitigen Verbindungen mit Leichtigkeit zu verarbeiten.
Die Verwendung von Octane bringt viele Vorteile mit sich, wie z. B. eine verbesserte Leistung, einen geringeren Ressourcenverbrauch und die Möglichkeit der horizontalen Skalierung. Es gibt jedoch auch einige Vorbehalte, die vor dem Einsatz von Octane in der Produktion zu beachten sind. In diesem Artikel werden wir die Möglichkeiten, Vorteile und Vorbehalte bei der Verwendung von Laravel Octane zur Skalierung einer Laravel-Anwendung diskutieren.
TL;DR
Laravel Octane ist ein hochleistungsfähiger HTTP-Server, der auf dem Laravel-Framework aufbaut. Octane verwendet Swoole oder Roadrunner als zugrundeliegende Engine, so dass er problemlos Tausende von gleichzeitigen Verbindungen verarbeiten kann. Die Verwendung von Octane bietet viele Vorteile, wie z. B. eine verbesserte Leistung, einen geringeren Ressourcenverbrauch und die Möglichkeit der horizontalen Skalierung. Es gibt jedoch auch einige Vorbehalte, die Sie beachten sollten, bevor Sie es in der Produktion einsetzen. In diesem Artikel werden wir die Möglichkeiten, Vorteile und Vorbehalte bei der Skalierung einer Laravel-Anwendung erörtern.
Wie funktioniert Laravel Octane?
Laravel Octane beschleunigt die Bereitstellung von Laravel-Anwendungen. Dies geschieht, indem Ihre Anwendung einmal gebootet und dann im Speicher gehalten wird, um alle nachfolgenden Anfragen zu beschleunigen. Auf diese Weise wird der Overhead des Frameworks beseitigt.
Unter der Haube verwendet es Open Swool, Swool, Roadrunner oder FrankenPhp, um die App zu booten und zu bedienen.
Swoole und Open Swoole sind PHP-Erweiterungen. Sie ermöglichen es Ihrer PHP-Anwendung, mehrere Anfragen gleichzeitig zu bearbeiten, was die Leistung von Websites mit hohem Datenverkehr erheblich steigern kann. Für Swoole muss jedoch PHP mit der Erweiterung kompiliert werden, während Open Swoole ein Drop-in-Ersatz für eine einfachere Bereitstellung ist.
Roadrunner ist ein anderer Ansatz. Es handelt sich nicht um eine PHP-Erweiterung, sondern um einen Prozessmanager, der speziell für die Ausführung von PHP-Anwendungen entwickelt wurde. Er fungiert als Ersatz für den Standard-PHP-FPM (FastCGI Process Manager) und kann Leistungsverbesserungen bieten, ohne dass Änderungen an Ihrem PHP-Code erforderlich sind.
FrankenPHP ist ein relativ neuer Kandidat. Es ist eine weitere Serveroption für das Laravel-Octane-Framework, das für leistungsstarke PHP-Anwendungen entwickelt wurde. Ähnlich wie Swoole und Open Swoole verwendet es ein Gleichzeitigkeitsmodell zur gleichzeitigen Bearbeitung mehrerer Anfragen. FrankenPHP baut auf dem Caddy-Webserver auf.
April 2024: Die Octane-Integration von FrankenPHP befindet sich in der Beta-Phase und sollte in der Produktion mit Vorsicht verwendet werden.
Der Unterschied zwischen Swoole und Open Swoole
Open Swoole ist eine Abspaltung des Swoole-Frameworks, die Ende 2021 aufgrund von Unstimmigkeiten innerhalb der Swoole-Entwicklergemeinschaft entstand.
Heute hat Open Swoole eine bessere Dokumentation, aber ein kleineres Entwicklungsteam. Das sollte man bedenken, wenn man ein größeres Projekt startet.
Die Vorteile von Octane zur Skalierung von Laravel-Anwendungen
Octane beschleunigt Laravel-Anwendungen durch das Zwischenspeichern von Daten und Objekten im Speicher. Selbst ohne weitere Änderungen an der Hardware oder Infrastruktur kann Laravel Octane die Leistung Ihrer Anwendung um bis zu 30 % verbessern. Dieser Gewinn wird durch die Eliminierung von Festplattenlesevorgängen, Prozessforks und anderem Overhead erreicht, der beim Hochfahren des Frameworks bei jeder Anfrage entsteht. Auf diese Weise kann Octane Tausende von gleichzeitigen Verbindungen mühelos verarbeiten. Dies macht es ideal für Anwendungen, die viel Verkehr erhalten oder hochverfügbar sein müssen.
Darüber hinaus kann man davon ausgehen, dass diese kosteneffiziente Methode von jedem Unternehmen, jeder Neugründung oder jedem Betrieb gerne genutzt wird.
Im günstigsten Fall müssen Sie nicht einmal Änderungen an Ihrer Codebasis vornehmen. Dies hängt jedoch stark davon ab, wie Ihre Anwendung strukturiert ist.
Mögliche Nachteile von Laravel Octane
Wenn Sie daran denken, Octane zur Skalierung Ihrer Laravel-Anwendung zu verwenden, gibt es einige Dinge zu beachten. Octane ist nicht mit allen Laravel-Anwendungen kompatibel. Insbesondere funktioniert es nicht mit Anwendungen, die Sitzungszustände oder bestimmte Arten von Middleware verwenden. Schließlich kann Octane zwar die Leistung verbessern, löst aber nicht unbedingt alle Leistungsprobleme. Wenn Ihre Anwendung bereits damit kämpft, mit dem Datenverkehr Schritt zu halten, reicht Octane möglicherweise nicht aus, um sie zu retten. In diesem Fall müssen Sie andere Optionen in Betracht ziehen, z. B. die horizontale Skalierung.
Notwendige Refactorings
Wenn Ihre Anwendung Sitzungsstatus oder bestimmte Arten von Middleware verwendet, müssen Sie einige Änderungen an Ihrem Code vornehmen, bevor Sie Octane verwenden können. Insbesondere müssen Sie Unterstützung für die Coroutine-basierten Sitzungen von Swoole hinzufügen und jegliche Middleware entfernen, die nicht mit Swoole kompatibel ist.
Andere Änderungen, die vorgenommen werden müssen, umfassen den Dependency Injection Container. Ich schlage vor, dass Sie die offizielle Laravel-Dokumentation zu diesem Thema lesen.
Wie werden Codeänderungen gehandhabt?
Octane bietet eine bequeme Möglichkeit, Ihre Codebasis automatisch auf Änderungen zu überwachen und den Octane-Server ohne manuelle Eingriffe neu zu starten. Das bedeutet, dass Sie Entwicklungen einfacher durchführen können, indem Sie Codes an einer Stelle ändern, anstatt jedes Mal eine ganze Anwendungsinstanz stoppen/starten zu müssen, wenn es etwas Neues in Ihrer Codebasis gibt.
Alternativen zu Laravel Octane
Laravel Octane ist ein großartiges Werkzeug für die Skalierung von Laravel-Anwendungen, aber es ist nicht die einzige Option. Es gibt andere Optionen, die für Ihre Bedürfnisse besser geeignet sein könnten. Hier sind einige Alternativen, die Sie in Betracht ziehen sollten:
Mehr Hardware = mehr Leistung
Nur um es zu erwähnen, wir empfehlen dies nicht. Dies ist die einfachste, die am wenigsten kosteneffektive und die am wenigsten zukunftssichere Methode der Skalierung: Geben Sie Ihrem Projekt einfach mehr Hardware-Performance. Dies hat die offensichtlichen Nachteile höherer Betriebskosten, der Notwendigkeit, auf einen anderen Server zu migrieren und der Tatsache, dass Sie mit diesem Setup nicht in der Lage sind, nach Bedarf zu skalieren.
Nginx Load Balancing mit oder ohne AWS
Um eine skalierbare Webanwendung mit Laravel auf Amazon Web Services zu erstellen, kann AWS verwendet werden, um die Anwendung automatisch auf mehrere Instanzen zu skalieren, die sich eine MySQL-Datenbank teilen. Alle diese Server würden einen Amazon Relational Database Service (RDS) verwenden.
Die Skalierung mit AWS gibt es schon seit einiger Zeit und sie funktioniert gut. Aber die Kosten können intransparent sein. Im Vergleich zu Octane funktioniert dies nach demselben Prinzip, ist aber nicht so effektiv wie Octane. Ein Vorteil ist auf jeden Fall, dass Sie Ihren bestehenden Code so skalieren können, wie er ist. Es sind keine Octane-spezifischen Änderungen erforderlich.
Wie man Laravel Octane einrichtet
In diesem Beispiel beginnen wir mit einer neuen Laravel-Anwendung.
Als nächstes installieren wir Laravel Octane mit FrankenPHP. Wenn FrankenPHP noch nicht auf dem System installiert ist, übernimmt dies der artisan-Befehl für Sie.
composer require laravel/octane --dev
php artisan octane:install
Das war's mit der Installation. Jetzt fügen wir der Laravel-App ein paar Messungen hinzu.
Jetzt können Sie Laravel Octane starten:
php artisan octane:start
Mit wrk (kann über brew installiert werden) führen wir den Benchmark von Laravel Octane durch:
wrk -t4 -c50 http://localhost:8001
Fazit
Laravel Octane ist eine großartige Möglichkeit zur Skalierung Ihrer Laravel-Anwendung. Es ist einfach zu bedienen und kann die Leistung verbessern, ohne dass Sie Änderungen an Ihrer Codebasis vornehmen müssen. Es ist jedoch nicht mit allen Anwendungen kompatibel und reicht möglicherweise nicht aus, um eine bereits angeschlagene Anwendung zu retten. Wenn Sie die Verwendung von Octane in Erwägung ziehen, stellen Sie sicher, dass Sie Ihre Recherchen durchführen und alle Optionen in Betracht ziehen, bevor Sie eine Entscheidung treffen.
Wenn Sie Laravel Octane installiert haben, achten Sie auf das Abzeichen "Laravel Octane Compatible" auf Paketen, die Sie zu Ihrem Projekt hinzufügen. Dies bedeutet, dass das Paket getestet wurde, um mit Laravel Octane zu funktionieren, und spart Ihnen Zeit bei der Konfiguration, damit es richtig funktioniert.
Dank an Bill Jelen für das tolle Bild.