Sistemas Distribuidos · Ingeniería de Datos

Colas y procesamiento asíncrono

Desacoplar servicios mediante brokers de mensajes y colas, entendiendo entregas, patrones de consumo y compensaciones entre acoplamiento, fiabilidad y orden.

Colas y procesamiento asíncrono

Desacoplar en tiempo y en fallo Sin cola, dos servicios se encadenan en el tiempo: si uno falla, el otro se bloquea o pierde el mensaje. Con broker, el productor entrega, el consumo va a su ritmo y el pico se amortigua en el buffer.

Síncrono frente a asíncrono

La llamada síncrona espera respuesta y ata la disponibilidad de ambos. El patrón asíncrono deja un mensaje y sigue: quien lo procesa lo toma cuando puede, tolerando que el otro esté lento o caído.

Broker y colas

Desacoplamiento

Productor y consumidor dejan de conocerse ni coincidir en el tiempo. Puedes añadir consumidores sin tocar el emisor, y un consumidor nuevo no rompe al resto: el contrato es el formato del mensaje.

Absorber picos

Cuando la demanda se dispara, la cola acumula trabajo y los consumidores lo digieren a su ritmo. La cola actúa como volante: la punta entra irregular y sale suave y procesable.

Entrega y duplicación

Los brokers ofrecen al menos una vez y a veces exactamente una vez. Como reintentar puede duplicar, el consumidor debe ser idempotente: procesar dos veces el mismo mensaje no debe dañar.

Orden y paralelismo

Preservar el orden estricto limita el paralelismo; para acelerar se particiona por clave, garantizando orden dentro de cada partición pero no global. Orden total y alto rendimiento tironean.

Colas muertas

Un mensaje que falla repetidamente se aísla en una cola de fallos para inspeccionarlo sin bloquear el flujo. Es la válvula que evita que un mensaje tóxico atascara a todos los consumidores.

Un emisor deja caer tarjetas-sobre en un canal horizontal donde ya se alinean varias; a la derecha dos consumidores las recogen a distinta velocidad y debajo un cubo guarda un sobre tachado.
El broker amortigua el pico en el buffer, cada consumidor va a su ritmo y lo que siempre falla se aparta.

Errores frecuentes

Ejemplo resuelto: cobros que sobreviven al proveedor caído

Un servicio de pagos falla a veces justo al llamar al cobrador. El rediseño:

  1. Publicar la orden de cobro en una cola duradera en vez de llamar en línea.
  2. Responder al usuario con el encargo aceptado, sin esperar el cobro completo.
  3. Consumir a ritmo sostenido, añadiendo consumidores cuando la cola crece.
  4. Reintentar con espera creciente y, si se agota, mover el mensaje a la cola muerta.
  5. Garantizar idempotencia por identificador de cobro para no duplicar cargos.

¿Para qué sirve en la realidad?

Casi toda integración entre servicios, del email a la liquidación, usa colas para no caerse junta. El desacople convierte una dependencia de disponibilidad en un contrato sobre el formato del mensaje.

Un servicio de pagos falla a veces bajo su operación de cobro. Procesar los cobros vía una cola duradera en vez de una llamada directa aporta sobre todo:

Fiarse de una cola hace innecesario que el consumidor sea idempotente.

Colas

Servidor que recibe, guarda y entrega mensajes
broker
Dejar un mensaje y seguir sin esperar es procesamiento...
asincrono
Amortiguar picos acumulando trabajo usa una...
cola
Cola donde van los mensajes que fallan repetidamente
muerta
Preservar orden por clave repartiendo se hace con...
particiones

Ordena el recorrido de un mensaje asíncrono con reintentos:

Publicar
Acumular
Consumir
Muerta

Cola de mensajes
Funcionamiento de las colas y su papel en el desacoplamiento de sistemas.

Une cada pieza de la mensajería con su función.

Desacoplar en tiempo y en fallo

# Colas y asincronía
## Desacople
### ni se conocen
### ni coinciden en el tiempo
## Picos
### el buffer amortigua
### consumo a ritmo
## Entrega
### al menos una vez
### idempotencia obligada
## Orden
### por clave en particiones
### global si se paga en paralelo

Tutoriales oficiales de RabbitMQ
Guías paso a paso de colas, intercambios y consumidores.

Tu servicio de correos envía facturas y a veces el proveedor de email está caído. ¿Cómo convertir eso en flujo con cola, y qué debes garantizar en el consumidor por los reintentos?