¿Qué es Octane?
Laravel Octane es un paquete que mejora drásticamente el rendimiento de las aplicaciones Laravel usando servidores de aplicaciones de alto rendimiento. En un PHP-FPM normal, la aplicación se arranca y se termina en cada solicitud. Con Octane, la aplicación se arranca una única vez y se mantiene en memoria, procesando las siguientes solicitudes con gran rapidez. La mayor diferencia respecto a PHP-FPM es que el proceso de arranque de la aplicación (registro de service providers, etc.) no se repite en cada solicitud. Al arrancar una sola vez, las solicitudes se procesan a altísima velocidad.Servidores compatibles
Octane admite los siguientes tres servidores.En Laravel Cloud se recomienda operar Octane con FrankenPHP y ofrece soporte totalmente gestionado.
Instalación y configuración
Instalación del paquete
Configuración inicial de Octane
config/octane.php.
FrankenPHP
Al elegir FrankenPHP, Octane descarga automáticamente el binario. No hacen falta pasos adicionales.RoadRunner
Al elegir RoadRunner, Octane descarga automáticamente el binario.Swoole
Swoole se instala como extensión de PHP con PECL.Cómo arrancar
Arrancar el servidor
8000. Accede en http://localhost:8000.
Indicar el servidor
Indicar el número de workers
Observación de cambios en archivos
Durante el desarrollo, los cambios en los archivos no se reflejan sin reiniciar el servidor. Con--watch se reinicia automáticamente.
Otros comandos de gestión
Consideraciones sobre inyección de dependencias
En Octane la aplicación se mantiene en memoria, por lo queregister y boot de los service providers solo se ejecutan una vez, al arrancar el servidor. La misma instancia de la aplicación se reutiliza entre solicitudes, así que hay que tener cuidado al inyectar el contenedor o la solicitud en el constructor de un objeto.
Inyección del contenedor
Si inyectas el contenedor directamente en el constructor de un singleton, se reutiliza un contenedor antiguo.app() y Container::getInstance() siempre devuelven el contenedor más reciente, así que son seguros.
Inyección de la solicitud
Tipar
Illuminate\Http\Request en los métodos del controlador o en closures de ruta es seguro. El helper global request() también devuelve siempre la solicitud actual.Inyección del repositorio de configuración
config() siempre devuelve el repositorio de configuración más reciente, así que es seguro.
Mitigación de fugas de memoria
Como Octane mantiene la aplicación en memoria, acumular datos en propiedades estáticas provoca fugas.Reciclar workers con max-requests
Al reiniciar automáticamente el worker tras un cierto número de solicitudes se atenúan las fugas de memoria. El valor por defecto es 500 solicitudes.Configuración del tiempo máximo de ejecución
Puedes definir el tiempo máximo de una solicitud enconfig/octane.php. Por defecto son 30 segundos.
Tareas concurrentes (solo Swoole)
Con Swoole puedes ejecutar varias operaciones en paralelo conOctane::concurrently().
--task-workers.
Tick e Interval (solo Swoole)
En Swoole puedes registrar tareas que se ejecutan a intervalos regulares. Se registran en el métodoboot de un service provider.
Caché de Octane (solo Swoole)
Caché en memoria ultrarrápida basada en las tablas de Swoole. Soporta hasta 2 millones de lecturas/escrituras por segundo.Caché con intervalo
Caché que se actualiza automáticamente cada cierto tiempo.Tablas de Swoole (solo Swoole)
Puedes definir tablas en memoria accesibles desde todos los workers. Se configuran entables de config/octane.php.
Octane::table().
Operación en producción
Configuración Nginx + Octane
En producción es habitual ejecutar Octane detrás de Nginx. Nginx sirve los archivos estáticos y termina SSL, mientras que las solicitudes dinámicas se pasan por proxy a Octane.Ejecución permanente con Supervisor
En producción, usa Supervisor para mantener Octane siempre activo.Habilitar HTTPS
Para generar enlaces HTTPS a través de Octane, configura en.env:
Integración con Laravel Cloud
Laravel Cloud ofrece soporte totalmente gestionado para Octane con FrankenPHP. No necesitas configurar Nginx ni Supervisor: puedes activarlo en solo dos pasos.1
Instalación del paquete
Instala Octane. Ejecutar
octane:install es opcional.2
Activar Octane en Laravel Cloud
En la configuración del cluster de cómputo del entorno, activa “Use Octane as runtime” y guarda/despliega. Laravel Cloud construirá y arrancará automáticamente la aplicación con FrankenPHP + Octane.