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.
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 + ROADRUNNER
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:
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.