Una mini API para hacer benchmark de Symfony con RoadRunner (Parte II)

Una mini API para hacer benchmark de Symfony con RoadRunner (Parte II)

Esta es la continuación de la primera entrega que puedes leer aqui -> blog.equationlabs.io/una-mini-api-para-hace..

TLDR; Hemos desarrollado una pequeña API (PHP 8.1 + Symfony v6.1) utilizando RoadRunner como application server para realizar un pequeño benchmark de cuanta mejora tenemos al reemplazar Nginx por RoadRunner

Si se preguntan porque elegí RoadRunner en vez de otros SAPI que hacen lo mismo (SwoolePHP, ReachPHP, etc) es porque utilizando este ultimo, la manera de desarrollar se mantiene variando un poco como manejamos las conexiones persistentes y su fácil implementación con Symfony y su componente Runtime.


Bien, lo que tenemos ahora es una API con un solo endpoint que siempre retorna el mismo resultado, y queremos ver (a manera de benchmark) cuantos request puede manejar y en cuanto tiempo comparado con la misma API pero utilizando NGINX como convencionalmente es utilizado.

Screenshot 2022-09-29 at 10.16.13.png

Para hacer el benchmark lo mas sencillo posible, vamos a utilizar Vegeta - para conocer mas de Vegeta puedes mirar aquí -

El escenario es la misma aplicación con PHP+FPM+NGINX y por otro lado PHP+RoadRunner en ambas utilizaremos el siguiente comando de vegeta para hacer la prueba de carga:

cat src/tests/benchmark/target.txt | vegeta attack -rate 100 -duration=60s"

Leyenda: Rate: 100 Requests por Unidad (por default es 1s, con lo cual serian 20 req/s) Duration: 60segundos

El reporte nos generara la data para poder determinar los percentiles de respuesta de nuestros requests a lo largo de la prueba y así poder medir la latencia en ambos escenarios.

PHP + FPM + NGINX


php-fpm-vegeta.png

PHP + ROADRUNNER


Screenshot 2022-09-29 at 19.14.57.png

Si compramos la data de los histogramas resultantes de las pruebas (Vegeta permite exportar resultados que luego pueden ser graficados y cruzados con otros histogramas) nos da la siguiente escena:

histirgram-comparison.png

EL percentil 95% parece estar muy cerca en ambos caos, pero en el caso de RoadRunner se mantiene constante a lo largo de la prueba de carga con lo cual (para el escenario de la prueba) su degradación en el tiempo es mínima (el tiempo de respuesta a los usuarios se mantiene estable)

Hasta acá mi ensayo de prueba de carga utilizando PHP + RoadRunner, espero les haya gustado y si es así pues dejame tu comentario o like en el post.