En el subcapítulo anterior vimos SQS, donde un mensaje va a un consumidor que lo procesa. Pero a veces quieres lo contrario: que un mismo mensaje llegue a muchos destinatarios a la vez. Para eso existe SNS (Simple Notification Service), el servicio de notificaciones de AWS. Es el complemento perfecto de las colas.

El problema: avisar a varios servicios a la vez

Imagina que en una tienda se realiza un pedido, y cuando eso ocurre quieres que varios sistemas se enteren al mismo tiempo:

  • El servicio de facturación (para generar la factura).
  • El servicio de inventario (para descontar el stock).
  • El servicio de emails (para avisar al cliente).
  • El servicio de analítica (para las estadísticas).

Con una cola SQS, el mensaje iría a un consumidor. Aquí queremos que el aviso «hay un nuevo pedido» llegue a todos a la vez. Eso es exactamente lo que hace SNS.

Qué es SNS: el modelo publicador/suscriptor

SNS funciona con el modelo publicador/suscriptor (pub/sub):

  • Un publicador envía un mensaje a un topic (tema).
  • Todos los suscriptores de ese topic reciben una copia del mensaje, a la vez.
                    ┌─── Topic SNS "nuevo-pedido" ───┐
  Publicador ─────► │                                 │
 (servicio pedidos) └──────────────┬──────────────────┘
                    ┌──────────┬────┴─────┬──────────┐
                    ▼          ▼          ▼          ▼
              Facturación  Inventario  Emails   Analítica
              (suscriptor)(suscriptor)(suscrip.)(suscriptor)
  • Topic (tema): el «canal» al que se envían los mensajes (ej. nuevo-pedido).
  • Suscripción: cada destinatario se suscribe al topic para recibir sus mensajes.

Analogía: SNS es como una lista de difusión o un canal de radio. El locutor (publicador) emite un mensaje una vez, y todos los que están suscritos al canal lo reciben simultáneamente. El locutor no necesita saber cuántos oyentes hay ni quiénes son.

SNS vs SQS: la diferencia clave

Es fundamental no confundirlos:

SQS (colas) SNS (notificaciones)
Modelo Un mensaje → un consumidor lo procesa Un mensaje → todos los suscriptores lo reciben
Relación Uno a uno Uno a muchos
Los mensajes Esperan en la cola hasta procesarse Se entregan al momento a los suscriptores
Metáfora Lista de tareas (cada tarea, alguien la hace) Lista de difusión (todos reciben el aviso)

En resumen: SQS reparte trabajo (un mensaje, un trabajador); SNS difunde avisos (un mensaje, todos enterados).

Tipos de suscriptores

Un topic SNS puede tener muchos tipos de suscriptores, lo que lo hace muy versátil:

  • Una función Lambda (para que reaccione al evento, Capítulo 14).
  • Una cola SQS (¡muy importante! lo vemos enseguida).
  • Un email (SNS envía un correo).
  • Un SMS (un mensaje de texto a un móvil).
  • Un endpoint HTTP/HTTPS (avisar a otro sistema vía web).

El patrón fan-out: SNS + SQS juntos

Aquí está la combinación más poderosa, y una de las arquitecturas más usadas en AWS: el patrón fan-out («abanico»). Consiste en poner un topic SNS que difunde a varias colas SQS, una por cada servicio.

                    ┌─── Topic SNS "nuevo-pedido" ───┐
  Publicador ─────► │                                 │
                    └──────────┬──────────┬───────────┘
                               ▼          ▼
                         Cola SQS    Cola SQS
                         facturación  inventario
                               │          │
                               ▼          ▼
                          Consumidor   Consumidor

¿Por qué es tan bueno combinarlos? Porque suma lo mejor de los dos:

  • SNS difunde el aviso a todos los servicios a la vez (uno a muchos).
  • Cada cola SQS da a su servicio la resiliencia y el amortiguamiento que vimos en el subcapítulo 15.1: si el servicio de inventario se cae, sus mensajes esperan en su cola sin perderse, mientras los demás servicios siguen funcionando con normalidad.

Ejemplo del mundo real: en la tienda, se publica «nuevo pedido» en el topic SNS. Llega instantáneamente a las colas de facturación, inventario, emails y analítica. El servicio de analítica está en mantenimiento (caído), pero sus mensajes se acumulan en su cola y los procesará cuando vuelva. Mientras tanto, facturación, inventario y emails procesan los suyos sin problema. Ningún pedido se pierde y ningún servicio bloquea a los demás.

Este patrón fan-out es la base de muchas arquitecturas dirigidas por eventos (lo veremos en el subcapítulo 15.4 y en el Capítulo 28).

Lo que debes recordar

  • SNS es el servicio de notificaciones con modelo publicador/suscriptor: un mensaje enviado a un topic llega a todos sus suscriptores a la vez (uno a muchos).
  • Diferencia clave con SQS: SQS reparte trabajo (un mensaje → un consumidor); SNS difunde avisos (un mensaje → todos los suscriptores). Como una lista de difusión o un canal de radio.
  • Los suscriptores pueden ser Lambdas, colas SQS, emails, SMS o endpoints HTTP.
  • El patrón fan-out (SNS → varias colas SQS) combina lo mejor de ambos: difusión a todos los servicios + resiliencia y amortiguamiento de cada cola. Es una de las arquitecturas más usadas.

En el siguiente subcapítulo veremos un servicio de eventos más moderno y flexible que amplía estas ideas: EventBridge.

Cloud, AWS & Terraform — De cero a experto

Capítulo 1 · Qué es el cloud computing

Capítulo 2 · El mercado cloud y los grandes proveedores

Capítulo 3 · Regiones, zonas de disponibilidad y edge

Capítulo 4 · Cómputo: EC2

Capítulo 5 · Almacenamiento: S3

Capítulo 6 · Redes: VPC

Capítulo 7 · Identidad y acceso: IAM

Capítulo 8 · Bases de datos gestionadas

Capítulo 9 · Por qué Infraestructura como Código

Capítulo 10 · HCL: el lenguaje de Terraform

Capítulo 11 · Providers y estado

Capítulo 12 · Tu primera infraestructura real en Terraform

Capítulo 13 · Balanceo de carga y autoescalado

Capítulo 14 · Serverless con Lambda

Capítulo 15 · Mensajería y eventos

Capítulo 16 · Entrega de contenido y DNS

Capítulo 17 · Contenedores en AWS

Capítulo 18 · Módulos: reutilización y composición

Capítulo 19 · Workspaces y gestión de entornos

Capítulo 20 · Backends remotos y locking

Capítulo 21 · Testing de infraestructura

Capítulo 22 · Terraform en CI/CD

Capítulo 23 · Seguridad en profundidad

Capítulo 24 · Observabilidad: logs, métricas y trazas

Capítulo 25 · Optimización de costes

Capítulo 26 · Alta disponibilidad y disaster recovery

Capítulo 27 · Well-Architected Framework de AWS

Capítulo 28 · Arquitecturas serverless a escala

Capítulo 29 · Plataformas de datos en AWS

Capítulo 30 · Multi-cuenta y landing zones

Capítulo 31 · Platform Engineering e Internal Developer Platform

Capítulo 32 · Certificaciones AWS relevantes

Capítulo 33 · Proyectos para consolidar lo aprendido

Capítulo 34 · Recursos y comunidad

© Copyright 2024. Todos los derechos reservados