Laravel Octane

MisKo

Laravel Octane

Para quien no lo sepa, el 12 de mayo salió la version 1.0 de Laravel Octane, un paquete oficial cuya finalidad es mejorar aun más el rendimiento de laravel. Dejo un poco de información por aqui y al final dejo los links oficiales para quien quiera mancharse las manos.

Tampoco he hecho aun ninguna prueba, pero lo tengo pendiente :P

¿Qué es Laravel Octane?

Como he dicho antes, Laravel Octane es un paquete para Laravel cuya función principal es mejorar el rendimiento de laravel. Este paquete funciona con PHP 8 y, por debajo, hace uso de Swoole y RoadRunner, dos servidores de aplicaciones que se encargan de servir tu aplicación de Laravel

Mejoras de rendimiento

Con una app tradicional de php a través de un servidor web como nginx, cada solicitud genera un worker PHP-FPM y ejecuta, de principio a fin, todas las tareas necesarias para atender esa solicitud.

En el caso de Laravel, esto significa que se inicia el Framework, todos los proveedores de servicios se registran en el contenedor, se inician ellos mismos, la solicitud pasa por una lista de clases de middleware, llega a su controlador, se renderiza una vista , etc. hasta que finalmente obtengamos una respuesta de nuestro servidor.

En cambio, con Laravel Octane ( utilizando Swoole o RoadRunner ), seguimos teniendo un worker para cada solicitud, pero todos comparten el mismo framework de arranque. Esto significa que solo la primera solicitud va a realizar los procesos que inician el framework (incluidos todos los proveedores de servicios, etc.) y lo mantiene en memoria, mientras que el resto de solicitudes se aprovechan de no tener que hacer esto.

RoadRunner / Swoole

Os dejo los links de cada uno de ellos para que podais verlos, aunque por lo que me he informado yo, lo que interesa a priori es utilizar Laravel Octane con Swoole debido a que agregar algunas características nuevas a laravel.

Características específicas de Swoole

Workers

Con Swoole y Laravel Octane, se lanzará un worker por cada nucleo de CPU (por defecto), y los workers serán los que se encargarán de realizar distintas tareas como:

Tareas concurrentes

Permite realizar múltiples tareas al mismo tiempo y el "return" se devolverá una vez que todas hayan finalizado. (Cada tarea la hace un worker al mismo tiempo)

Ticks o intervalos

Un poco la idea del setInterval de javascript (aunque aún no hay forma de pararlos a placer :P)

Caché de Octane

Una caché a la que pueden acceder todos los workers (y supuestamente más rapida, aunque ni idea de esto comparado con redis por ejemplo)

Otras cosas de Laravel Octane

Seguramente me deje millones de cosas que comentar, pero os dejo un par que no voy a entrar en detalle y creo que son interesantes:

  • Enrutamiento de Octane: Para llegar directamente al controlador sin utilizar ningun middleware (tanto propios como del framework).
  • Listeners propios: Para controlars nuevos workers, ticks, requests, operations..
  • Laravel Forge ya lo tiene implementado para utilizarlo. (es así como lo he descubierto xD)

Links

Os dejo por aqui varios links de interés:

Pues ale, ahí os dejo el hilo xD

Yo tengo pendiente probarlo, asi que ya comentaré por aqui cuando tenga tiempo para hacer las pruebas con algo en condiciones xD

15
Mushuu

Mis dieses, lo llevo leyendo en twitter desde hace un par de semanas por parte de los que lo han hecho y parece que va como un tiro. Creo que aun hay algunos issues que estan solucionando, que no esta 100% production ready.

1 respuesta
MisKo

#2 Pues como digo en #1 , no lo he probado aún, asi que no se a que issues te refieres, pero supongo que como todo lo nuevo, habrá que esperar unas cuantas updates para ponerlo en producción (aunque ellos ya dicen que está production ready) xD

Por otro lado:

Tal como ponen en los primeros comentarios (y para q no tengais que abrirlo), esa es la memoria que está utilizando el worker en ese momento para mantenerse "vivo", no lo que gasta por cada requests.

MisKo

Vuelvo a publicar para decir que he hecho un test con 2 laravels creados por defecto.

El servidor utilizado es un servidor de desarrollo que tengo por ahi y que tampoco es muy allá pero bueno, es el mismo para los 2, así que sin más.

Prueba de 0 a 1000 conexiones durante 1 minuto

La prueba que he hecho, es pasar de 0 a 1000 conexiones durante un minuto. Cada segundo crece el número de usuarios y se hacen las requests. es decir, que el primer segundo hay 16 requests, el segundo 32, etc.. hasta que llega a 1000.

Laravel Normal

El resultado ha sido que, en Laravel, a los 21 segs había tantos errores 500 ( >50% ), que se ha parado el test:

Laravel Octane

Con laravel octane, se ha completado el test íntegro ( 1 minuto ), no ha dado ni un solo error aunque el tiempo de respuesta ha ido en aumento (max: 2.5s)

Prueba de 75 peticiones por segundo durante 1 minuto:

Laravel:

  • AVG response time: 251ms
  • MIN response time: 163ms
  • MAX response time: 1431ms

Laravel Octane:

  • AVG response time: 199ms
  • MIN response time: 157ms
  • MAX response time: 1233ms

No conozco muchas webs del estilo, por lo que si conoceis alguna que sea gratis (no voy a pagar pa esto xD) , lo pruebo

Se me ha olvidado ponerlo, lo he hecho con https://loader.io/ por si a alguien le interesa :D

Un saludo!

4

Usuarios habituales

  • MisKo
  • Mushuu