Wat is Octane
Laravel Octane is een package die de prestaties van je Laravel-applicatie drastisch verbetert door gebruik te maken van hoogperformante applicatieservers. Bij regulier PHP-FPM start en stopt de applicatie bij elke request. Met Octane wordt de applicatie één keer opgestart en in het geheugen gehouden, waarna volgende requests razendsnel worden afgehandeld. Het grootste verschil met PHP-FPM is dat het bootproces van de applicatie (zoals het registreren van service providers) niet bij elke request wordt herhaald. Na één keer opstarten worden requests supersnel verwerkt.Ondersteunde servers
Octane ondersteunt de volgende drie servers.Op Laravel Cloud wordt het draaien van Octane met FrankenPHP aanbevolen en volledig managed ondersteund.
Installatie en configuratie
De package installeren
Octane initialiseren
config/octane.php gegenereerd.
FrankenPHP
Kies je FrankenPHP, dan downloadt Octane automatisch de binary. Er zijn geen extra stappen nodig.RoadRunner
Kies je RoadRunner, dan downloadt Octane automatisch de binary.Swoole
Swoole installeer je als PHP-extensie via PECL.Starten
De server starten
8000. Je kunt de applicatie bereiken via http://localhost:8000.
Een server opgeven
Het aantal workers opgeven
Bestandswijzigingen volgen
Tijdens de ontwikkeling worden bestandswijzigingen pas zichtbaar na een herstart van de server. Met de flag--watch herstart de server automatisch.
Overige beheercommando’s
Aandachtspunten bij dependency injection
Omdat Octane de applicatie in het geheugen houdt, worden deregister- en boot-methoden van service providers slechts één keer uitgevoerd, bij het opstarten van de server. Dezelfde applicatie-instantie wordt hergebruikt tussen requests, dus wees voorzichtig wanneer je de container of de request in de constructor van een object injecteert.
Injectie van de container
Injecteer je de container rechtstreeks in de constructor van een singleton, dan wordt een verouderde container hergebruikt.app() en Container::getInstance() geven altijd de meest recente container terug en zijn dus veilig.
Injectie van de request
Het typehinten van
Illuminate\Http\Request in controllermethoden of routeclosures is veilig. Ook de globale helper request() geeft altijd de huidige request terug.Injectie van de configuration repository
config() geeft altijd de meest recente configuration repository terug en is dus veilig.
Geheugenlekken voorkomen
Omdat Octane de applicatie in het geheugen houdt, ontstaan er geheugenlekken als je data ophoopt in bijvoorbeeld statische properties.Workers recyclen met max-requests
Je kunt geheugenlekken beperken door workers automatisch te laten herstarten nadat ze een bepaald aantal requests hebben verwerkt. De standaardwaarde is 500 requests.De maximale uitvoeringstijd instellen
Inconfig/octane.php kun je de maximale uitvoeringstijd van een request instellen. De standaardwaarde is 30 seconden.
Gelijktijdige taken (alleen Swoole)
Als je Swoole gebruikt, kun je metOctane::concurrently() meerdere bewerkingen gelijktijdig uitvoeren.
--task-workers.
Ticks en intervals (alleen Swoole)
Met Swoole kun je bewerkingen registreren die periodiek op een opgegeven interval worden uitgevoerd. Je registreert ze in deboot-methode van een service provider.
Octane-cache (alleen Swoole)
Een supersnelle in-memory cache op basis van Swoole-tabellen. Er zijn tot 2 miljoen lees- en schrijfbewerkingen per seconde mogelijk.Intervalcache
Een cache die automatisch op een opgegeven interval wordt ververst.Swoole-tabellen (alleen Swoole)
Je kunt willekeurige in-memory tabellen definiëren die toegankelijk zijn vanuit alle workers. Je configureert ze viatables in config/octane.php.
Octane::table().
Draaien in productie
Configuratie met Nginx + Octane
In productie draai je Octane doorgaans achter Nginx. Nginx serveert de statische bestanden en handelt de SSL-terminatie af, en proxyt dynamische requests naar Octane.Als daemon draaien met Supervisor
In productie houd je Octane continu actief met Supervisor.HTTPS inschakelen
Om via Octane HTTPS-links te genereren, stel je het volgende in in.env.
Integratie met Laravel Cloud
Laravel Cloud ondersteunt Octane met FrankenPHP volledig managed. Je hebt geen Nginx- of Supervisor-configuratie nodig en kunt Octane in slechts twee stappen inschakelen.1
De package installeren
Installeer Octane. Je mag het commando
octane:install uitvoeren, maar dat is niet verplicht.2
Octane inschakelen in Laravel Cloud
Open de instellingen van het App-computecluster van je omgeving, zet “Use Octane as runtime” aan en sla op en deploy. Laravel Cloud bouwt en start je applicatie automatisch met FrankenPHP + Octane.
Workers herladen na een deploy
Na een deploy herlaad je de workers om de nieuwe code in het geheugen te laden.De lokale server opgeven voor php artisan dev
Na het installeren van Octane kan het gebeuren dat het server-proces van php artisan dev ook Octane gaat gebruiken. Wil je in productie op Laravel Cloud Octane gebruiken maar lokaal de reguliere php artisan serve, registreer dan het server-commando opnieuw in de register-methode van je AppServiceProvider.
php artisan dev uitvoert, start het lokale server-proces met php artisan serve. Aan de kant van Laravel Cloud kun je Octane als runtime ingeschakeld laten.