Comunicación asincrónica

Colas de mensajes

Por qué a veces conviene no esperar la respuesta: asincronismo, picos de carga y componentes que se comunican sin conocerse.

→ avanzar · S notas del orador · F pantalla completa · O vista general

Deslizá hacia abajo para recorrerla. Las simulaciones se activan al llegar a cada una.

Sincrónico

"Te espero hasta que termines"

pedidorespuesta503

La app pide una factura en PDF y se queda esperando hasta que el servicio termina. Mientras tanto, ese lugar está ocupado.

Pedidos por segundo
2 /s
  • Cada pedido ocupa un lugar durante todo el trabajo.
  • Si llegan más de los que entran: 503, como vimos con load balancing.
  • Aunque en promedio alcance, los pedidos llegan de a ráfagas: sin lugar donde esperar, el pico rebota.
Asincrónico

"Te dejo el pedido y sigo"

mensajeen la colaterminado503

Mismo trabajo, misma carga. Con una cola, la app deja el mensaje y sigue: un worker lo procesa cuando puede.

El usuario espera todo el trabajo, y si no hay lugar recibe un 503.

La respuesta es inmediata: 202 Aceptado. El trabajo lo hace un worker después… si hay alguno.

  • La cola baja el tiempo de respuesta…
  • …pero no el tiempo hasta que el trabajo está hecho.
Amortiguar carga

La cola absorbe los picos

⚡ tocá "Pico": llegan 30 pedidos de golpe

Los workers trabajan a su ritmo, llegue como llegue la carga. Lo que sobra espera en la cola.

Sin cola, todo lo que no entra en el momento se rechaza.

Con cola, el pico se guarda y se procesa después.

Escalar consumidores

Más workers, la cola baja más rápido

en la colatomado por un worker

Llegan 4 mensajes por segundo y un worker procesa 1. Sumá workers hasta que la cola deje de crecer.

  • Cada mensaje lo toma uno solo de los workers.
  • Los workers son homogéneos: copias iguales que compiten por los mensajes.
  • Se escalan sin tocar al que produce los mensajes.
Comunicar componentes

El que produce no depende del que consume

👆 apagá los workers: la app ni se entera

La app y los workers no se conocen y no necesitan estar levantados al mismo tiempo. Lo único que comparten es la cola.

  • Con los workers caídos, los mensajes se acumulan, no se pierden.
  • Cuando vuelven, se ponen al día solos.
  • Se puede cambiar, redesplegar o reemplazar un lado sin tocar el otro.
Criterio

¿Cuándo conviene una cola?

✅ Sí no hace falta la respuesta ya

  • Mandar mails y notificaciones
  • Generar reportes y PDFs
  • Procesar imágenes o videos
  • Sincronizar stock con otros sistemas
  • Integrarse con terceros lentos o inestables
Alcanza con "recibido, te aviso cuando esté".

⛔ No el usuario necesita la respuesta

  • Iniciar sesión
  • Consultar el saldo o el stock en pantalla
  • Validar el pago antes de confirmar la compra
  • Cualquier cosa sin la cual el usuario no puede seguir
Ahí la cola solo agrega demora y piezas.
Lo que se complica

Fallas que hay que tener en cuenta

reentregadosiempre fallaen la cola

Romperlo en vivo: un worker se cae justo antes de confirmar (ack), o llega un mensaje que siempre falla.

  • Duplicados: el trabajo se hizo, pero sin ack el mensaje vuelve. Procesar dos veces tiene que dar lo mismo (idempotencia).
  • DLQ: después de N reintentos, el mensaje se aparta para revisarlo.
  • El orden no está garantizado, y una cola sin límite puede crecer sin control.
Resumen

Colas de mensajes: lo que nos llevamos

🔌

Desacople

El que produce y el que consume no se conocen ni tienen que estar levantados a la vez.

🌊

Absorbe picos

Los workers trabajan a su ritmo; lo que sobra espera en la cola en vez de rechazarse.

📈

Escala por separado

Más workers sin tocar al productor. Si uno se cae, el mensaje vuelve a la cola.

⏳

Respuesta diferida

El resultado llega después. No sirve cuando el usuario lo necesita para seguir.

🧩

Más piezas

Una cola para operar y monitorear; seguir qué pasó con un mensaje cuesta más.

🔁

Duplicados y orden

Hay que procesar de forma idempotente, tener DLQ y vigilar que la cola no crezca sin control.

En la práctica: RabbitMQ · Amazon SQS · Azure Service Bus / Storage Queues · Redis