Desarrollo backend

Cómo aceleramos nuestra API de Laravel cinco veces

Ruslan Ismailov Publicado Actualizado 9 min de lectura
C

Por dónde empezar la optimización

La optimización siempre debe empezar por las mediciones, no por las suposiciones. Antes de cambiar el código, perfilamos solicitudes reales y descubrimos que el 80% del tiempo de respuesta se dedicaba al acceso a la base de datos, no a la lógica de negocio. Por eso el primer objetivo fue precisamente el trabajo con los datos.

Luchando contra el problema N+1

La causa más frecuente de los endpoints lentos resultó ser el problema N+1: para una lista de cien entidades se ejecutaban más de cien consultas adicionales a las relaciones. La carga ansiosa mediante with() lo redujo a unas pocas consultas.

Qué cambiamos exactamente

  • Añadimos carga ansiosa para todas las relaciones usadas en los recursos de respuesta.
  • Activamos la protección contra la carga perezosa en el entorno de desarrollo para detectar el N+1 en etapas tempranas.
  • Trasladamos los agregados pesados a consultas optimizadas separadas.

Almacenamos en caché los datos calientes

Trasladamos los catálogos que cambian con poca frecuencia y las consultas pesadas a Redis con una invalidación bien pensada basada en eventos. Esto eliminó una parte significativa de la carga de PostgreSQL y estabilizó la latencia bajo el tráfico pico.

Modo residente

El paso final fue ejecutar la aplicación en modo residente, lo que eliminó la sobrecarga de la inicialización en frío del framework en cada solicitud. En conjunto, todas las medidas dieron una aceleración de cinco veces del tiempo medio de respuesta.

Conclusiones

Un enfoque sistemático —medir, encontrar el cuello de botella, corregirlo y volver a medir— permitió lograr una aceleración múltiple sin reescribir la aplicación. La lección principal: optimiza según los datos del perfilado, no según la intuición.

Tecnologías

Etiquetas

Ruslan Ismailov

Desarrollador Senior Web / Backend. Desarrollador senior web/backend con 9 años de experiencia. Stack: PHP, Laravel, PostgreSQL, Redis, Docker, Kubernetes, REST, microservicios, CI/CD. Más sobre mí →