Diseño de notificaciones con Amazon SNS - Patrones de temas y suscripciones

Explicamos cómo elegir entre temas Standard y FIFO, implementar el patrón de fan-out con SQS, filtrar mensajes por atributos y diseñar la entrega confiable.

Diseño de temas y suscripciones

Los temas SNS vienen en dos tipos: Standard y FIFO. Los temas Standard proporcionan throughput prácticamente ilimitado con ordenamiento de mensajes de mejor esfuerzo. Los temas FIFO proporcionan ordenamiento estricto por ID de grupo de mensajes y deduplicación mediante IDs de deduplicación de mensajes. Los suscriptores de temas FIFO están limitados a colas SQS FIFO. Los protocolos de suscripción soportan SQS, Lambda, HTTP/HTTPS, email, SMS y Kinesis Data Firehose. Al adjuntar atributos de mensaje, puede habilitar el enrutamiento condicional mediante políticas de filtro de suscripción.

Diseño del patrón de fan-out

El patrón de fan-out SNS + SQS suscribe múltiples colas SQS a un tema SNS, entregando mensajes a todas las colas con una sola publicación. El consumidor de cada cola procesa independientemente, por lo que un fallo en un consumidor no afecta a los demás. Este patrón se usa típicamente en sistemas de procesamiento de pedidos, donde un solo evento de pedido se entrega simultáneamente a una cola de actualización de inventario, una cola de notificación por email y una cola de registro analítico. No hay límite práctico en los destinos de fan-out (la cuota de suscripciones por cuenta es 12,500,000), y agregar nuevo procesamiento solo requiere agregar una suscripción sin cambios en el publicador. Para fan-out entre cuentas, la política del tema permite Subscribe desde colas SQS en otras cuentas, manteniendo los microservicios débilmente acoplados.

Filtros de suscripción y garantías de entrega

Las políticas de filtro de suscripción vienen en dos tipos: basadas en atributos y basadas en payload. Los filtros basados en atributos definen condiciones sobre atributos de mensaje (coincidencia exacta de cadena, coincidencia de prefijo, comparación numérica, verificación de existencia). Los filtros basados en payload ejecutan filtrado contra rutas JSON en el cuerpo del mensaje, soportando campos anidados. Los filtros se evalúan en el lado de SNS, por lo que los mensajes que no coinciden nunca se entregan a los suscriptores, reduciendo costos de procesamiento downstream y ruido. Las políticas de reintento para fallos de entrega varían por protocolo; los endpoints HTTP/HTTPS usan backoff exponencial (hasta 23 días) para reintentos. Los mensajes que no pueden entregarse después de reintentos se envían a una cola de mensajes no entregados (DLQ) para investigación o reprocesamiento posterior. La función de redrive de DLQ permite reenviar mensajes a la suscripción original después de resolver el problema.

Temas FIFO y atributos de mensaje

Los temas FIFO proporcionan garantías de ordenamiento y deduplicación, logrando procesamiento ordenado estricto cuando se combinan con colas SQS FIFO. Los IDs de grupo de mensaje agrupan mensajes lógicamente, garantizando el orden dentro de cada grupo. Los atributos de mensaje adjuntan metadatos (tipo de evento, prioridad, origen), y las políticas de filtro de suscripción implementan enrutamiento basado en atributos. La protección de datos de mensajes detecta automáticamente PII (información personal identificable) y permite configurar políticas de enmascaramiento o rechazo. Para profundizar en los patrones de integración de sistemas, libros especializados (Amazon) son una referencia útil.

Errores de diseño y consideraciones operativas

El tamaño máximo de mensaje SNS es 256 KB; para payloads más grandes, almacene el contenido en S3 y envíe solo un puntero a través de SNS usando el patrón Extended Client Library. El throughput de temas FIFO está limitado a 300 mensajes por segundo por grupo de mensajes (3,000 con batching), por lo que los casos de uso de alto throughput requieren distribuir los IDs de grupo de mensajes. A medida que la complejidad de las políticas de filtro crece, la depuración se vuelve difícil - mantenga las condiciones de filtro en 5 atributos o menos por suscripción, y considere EventBridge para enrutamiento complejo. Las suscripciones de endpoints HTTP/HTTPS no recibirán mensajes hasta que se complete la confirmación de suscripción, por lo que el manejo del token de confirmación debe ser parte de la implementación del endpoint. Habilitar el cifrado de mensajes (SSE) requiere que el rol IAM del suscriptor tenga permisos de descifrado KMS, lo cual frecuentemente se pasa por alto.

SNS vs. EventBridge - Cuándo usar cada uno

Tanto SNS como EventBridge son fundamentales para arquitecturas dirigidas por eventos, pero tienen fortalezas diferentes. SNS destaca en fan-out simple y diversidad de protocolos (SQS, Lambda, HTTP, SMS, email), con baja latencia de entrega de mensajes. EventBridge destaca en coincidencia de reglas complejas contra la estructura del evento (más de 100 patrones de campo), registro de esquemas para seguridad de tipos e integraciones SaaS. Como guía práctica, use SNS para fan-out dentro de la aplicación (pedido → múltiples colas) y EventBridge para enrutamiento de eventos entre servicios (ramificación condicional compleja, eventos SaaS externos). SNS soporta un número vastamente mayor de destinos de entrega por tema (12,500,000 suscripciones), mientras que EventBridge está limitado a 5 targets por regla pero escala a través del número de reglas.

Precios de SNS

Las publicaciones en temas Standard cuestan aproximadamente $0.50 por millón de solicitudes. Los temas FIFO cuestan aproximadamente $0.30 por millón de solicitudes. Las entregas a endpoints HTTP/S cuestan aproximadamente $0.60 por millón de notificaciones, mientras que las entregas a SQS son gratuitas. Los SMS tienen precios por mensaje que varían según el país de destino. El filtrado de mensajes está disponible sin cargo adicional, reduciendo entregas innecesarias y optimizando costos downstream.

Resumen

SNS es un servicio de mensajería Pub/Sub basado en temas que proporciona enrutamiento de mensajes flexible a través de patrones de fan-out y filtros de suscripción. Los temas FIFO ofrecen garantías de ordenamiento y deduplicación, mientras que la protección de datos de mensajes permite la detección y enmascaramiento automático de PII. Combinado con SQS, construye pipelines de procesamiento asíncrono confiables, con DLQs asegurando que los fallos de entrega se capturen de forma fiable.