Todos los artículos

Por qué tu API parece lenta: la idea completa en dos bocetos

Backend · 3 min de lectura ·

Un cliente me dijo una vez: "el botón de registro tarda 4 segundos, hay que arreglar la base de datos." La base de datos no tenía ningún problema. La API enviaba un correo de bienvenida antes de responder al usuario. Aquí está todo el problema en un boceto:

Navegador Tu API Servicio de correo 3 segundos enteros el usuario mira un indicador de carga todo este tiempo
Todo ocurre en una sola línea. El paso más lento decide el tiempo de respuesta.

La solución: responder primero, trabajar después

El usuario no necesita que el correo ya exista para ver "cuenta creada". Solo necesita la promesa de que existirá. Así que dividimos la línea de tiempo: respondemos de inmediato y empujamos el trabajo lento a una cola que un worker procesa en segundo plano.

Navegador Tu API «listo!» en 50 ms las tareas se acumulan aquí, nadie las está esperando Cola Worker el correo sale segundos después
Dos líneas de tiempo en vez de una. El usuario solo ve la corta.

En Laravel esto son tres líneas

Se empuja el trabajo a un job en cola y se responde de inmediato:

SendWelcomeEmail::dispatch($user); dentro del controlador, php artisan queue:work en el servidor, y QUEUE_CONNECTION=redis en el entorno. Ese es todo el patrón.

Mi regla en cada proyecto: si el usuario no necesita el resultado de una tarea para continuar, esa tarea no pertenece a la petición. Correos, PDFs, redimensionar imágenes, webhooks, analítica: todo eso a la cola.

En Tamkeen pasé buena parte de seis meses sacando trabajo de las peticiones y metiéndolo en colas. Mismos servidores, misma base de datos, y endpoints que antes tardaban segundos empezaron a responder en decenas de milisegundos.

Notas de los lectores

  1. Todavía no hay notas. La primera siempre es la más valiente.
¿Estás construyendo algo parecido? Puedo ayudarte. Contacto